LINUX.ORG.RU

История изменений

Исправление Miguel, (текущая версия) :

Не совсем так.

Грубо говоря, идея была в том, чтобы программист не складывал, случайно, градусы Цельсия и Фаренгейта. Поэтому переменная, в которой градусы Цельсия, будет иметь префикс cd, а переменная, в которой градусы Фаренгейта, префикс fd. Если программист ошибётся и сложит одно с другим, то это будет проще заметить.

В нормальном языке вместо этого можно и нужно использовать систему типов, и писать что-то вроде

newtype Celsius = Celsius Int deriving (Eq, Ord, Num)
newtype Fahrenheit = Fahrenheit Int deriving (Eq, Ord, Num)

и компилятор сам проследит, чтобы Цельсия с Цельсием можно было складывать, Фаренгейта с Фаренгейтом — тоже, а вот одно с другим — нельзя. Но в то время хороших языков не было.

Исходная версия Miguel, :

Не совсем так.

Грубо говоря, идея была в том, чтобы программист не складывал, случайно, градусы Цельсия и Фаренгейта. Поэтому переменная, в которой градусы Цельсия, будет иметь префикс cd, а переменная, в которой градусы Фаренгейта, префикс fd. Если программист ошибётся и сложит одно с другим, то это будет проще заметить.

В нормальном языке вместо этого можно и нужно использовать систему типов, и писать что-то вроде

newtype Celsius = Celsius Int deriving Eq, Ord, Num
newtype Fahrenheit = Fahrenheit Int deriving Eq, Ord, Num

и компилятор сам проследит, чтобы Цельсия с Цельсием можно было складывать, Фаренгейта с Фаренгейтом — тоже, а вот одно с другим — нельзя. Но в то время хороших языков не было.