Celem notacji węgierskiej jest zakodowanie informacji w identyfikatorze, których inaczej nie można zakodować w systemie typów. Moim zdaniem, jeśli ta informacja jest wystarczająco ważna, aby ją zakodować, to jest wystarczająco ważna, aby być zakodowana w systemie pisma, gdzie można ją właściwie sprawdzić. A jeśli informacja nie jest ważna, to dlaczego, do cholery, chcesz zaśmiecać nią swój kod źródłowy?
Lub, mówiąc bardziej zwięźle: informacje o typie należą do systemu typów. (Uwaga: nie musi to być system typu statycznego . Dopóki wyłapuje błędy typu, nie obchodzi mnie, kiedy je wychwytuje.)
Kilka innych odpowiedzi wymieniło Jednostki miary jako dopuszczalne zastosowania notacji węgierskiej. (Jestem trochę zaskoczony, że nikt jeszcze nie wspomniał o NASA Mars Climate Orbiter, ponieważ wydaje się, że pojawia się to cały czas w dyskusjach na temat notacji węgierskiej).
Oto prosty przykład w 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'.
Spójrz, mamo, nie ma Węgrów!
Gdybym był w użyciu notacja węgierska zamiast typów tu nie pomoże mi jeden bit:
let mSomeLength = 48.15
let ftSomeOtherLength = 16.2342
mSomeLength + ftSomeOtherLength
// > val it : float = 64.3842
Kompilator przepuścił go prosto. Teraz polegam na człowieku, który dostrzega błąd, który jest zasadniczo błędem typu. Czy nie po to jest sprawdzanie typu?
Jeszcze lepiej, używając języka programowania 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
Podsumowując: nie lubię notacji węgierskiej. Nigdy nie powinieneś go używać.
Biorąc to pod uwagę, myślę, że używanie notacji węgierskiej jest dobrym pomysłem. Czekaj, co?
Tak! W tym konkretnym przypadku wspomniałeś:
Co więcej, większość naszego kodu musi działać na niektórych dziwnych procesorach DSP, w których i tak nie ma koncepcji typu bool lub float
Ale to jest właśnie jedyny rozsądny przypadek użycia dla notacja węgierska!
PS: Z całego serca polecam patrzeć na Frinka. Jego instrukcja zawiera jedne z najbardziej niesamowitych dowcipów z pierdnięciem. To także całkiem fajny język :-)