Семантика типов и переменных
От: m_n Казахстан  
Дата: 19.05.07 08:14
Оценка: -2 :))
Имеется класс


class Shape
{
    void draw();
}


и некая функция


void f (Shape shape)
{
    shape.draw();
}


Зачем описывать аргумент как Shape shape?
Семантически аргумент — это фигура (shape), собственно больше ничего и не нужно:


void f (Shape)
{
    Shape.draw();
}


Здесь Shape — это переменная (объект), не тип, ее тип следует из семантики ее имени.
Т.е. class Shape это определение класса, а Shape в выражениях


void f (Shape)
{
    Shape.draw();
}


или


class Element
{
    Shape;
}


это объявление переменных.


Думаю, такой подход полезен еще вот чем: он требует определения четких пользовательских типов.
В языке нужно вообще не использовать безразмерные типы данных типа int,
но должна быть удобная возможность определять пользовательские типы, в том числе и численные.
Пример:


class Person
{
    ...
    int age;
    int weight;
    string comment;
}


Компилятор не понимает семантику переменных, для него age + weight — синтаксически корректное выражение.
Семантический вариант:


class Age : [1..150];
class WeightInKilos : [1..200];
class WeightInPounds : [2..450];
class Comment = string;

class Person
{
    Age;
    WeightInKilos;
    Comment; 
}


Сложить возраст с весом уже не получится (без преобразования).
Вес в килограммах численно не тоже самое, что и вес в фунтах,
хотя неявное преобразование так и просится.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.