Мета угорської нотації - це кодування інформації в ідентифікатор, який інакше не може бути закодований в системі типів. Моя власна думка полягає в тому, що якщо ця інформація є достатньо важливою для кодування, то це досить важливо, щоб вона була закодована в системі типів, де її можна правильно перевірити. А якщо інформація неважлива, то чому, чортів, ви хочете захаращувати її вихідним кодом?
Або, простіше кажучи: інформація про тип належить до системи типів. (Примітка: вона не повинна бути системою статичного типу. Поки вона вловлює помилки типу, мені все одно, коли вони їх ловлять.)
Кілька інших відповідей згадали одиниці вимірювання як прийнятне використання угорської нотації. (Я дуже здивований, що ще ніхто не згадав про НАСА Марс Клімат Орбітер, оскільки, здається, це постійно виникає в дискусіях про Угорську нотацію).
Ось простий приклад у F #:
[<Measure>] type m
[<Measure>] type ft
let someLength = 48.15<m>
let someOtherLength = 16.2342<ft>
someLength + someOtherLength
// someLength + someOtherLength
// -------------^^^^^^^^^^^^^^^
// error FS0001: The unit of measure 'ft' does not match the unit of measure 'm'.
Дивись, ма, ніяких угорців!
Якби я був використовувати угорську нотацію замість типів тут, це не допомогло б мені один біт:
let mSomeLength = 48.15
let ftSomeOtherLength = 16.2342
mSomeLength + ftSomeOtherLength
// > val it : float = 64.3842
Компілятор пропустив це прямо. Зараз я покладаюся на людину, щоб помітити, що по суті є помилкою типу. Це не те, для чого призначена перевірка типу?
Ще краще, використовуючи мову програмування Frink :
someLength = 48.15m
someOtherLength = 16.2342ft
someLength + someOtherLength
// 53.09818416 m (length)
// Wanna know the answer in a good old fashioned American unit?
someLength + someOtherLength -> yd
// 58.06888031496062992
// Are you an astrophysicist?
someLength + someOtherLength -> parsec
// 1.7207949554318336148e-15
// ... or a fundmentalist Christian who refuses to use units invented
// less than 2000 years ago?
someLength + someOtherLength -> biblicalcubits
// 95.893563822870765006
Отже, підсумовуючи: мені не подобається угорська нотація. Ніколи не слід його використовувати.
Якщо говорити, я думаю, що використання угорської нотації - це гарна ідея. Чекати, що?
Так! У цьому конкретному випадку ви згадали:
Крім того, більша частина нашого коду повинна працювати на деяких дивних DSP, де такої концепції, як bool або float, не існує.
Але це як раз єдиний розумний варіант використання для угорської нотації!
PS: Від усієї душі рекомендую поглянути на Frink. Посібник містить деякі найдивовижніші жартівливі приколи. Це також досить класна мова :-)