Lo scopo della notazione ungherese è di codificare informazioni nell'identificatore che non possono essere codificate in altro modo nel sistema di tipi. La mia opinione è che se queste informazioni sono abbastanza importanti da essere codificate, allora è abbastanza importante da essere codificate nel sistema dei tipi, dove possono essere adeguatamente controllate. E se le informazioni non sono importanti, perché diamine vuoi ingombrare il tuo codice sorgente con esso?
Oppure, per dirla in modo più succinto: le informazioni sul tipo appartengono al sistema dei tipi. (Nota: non deve essere un sistema di tipo statico . Finché rileva gli errori di tipo, non mi interessa quando li rileva.)
Un paio di altre risposte menzionano le Unità di misura come usi accettabili della notazione ungherese. (Sono un po 'sorpreso che nessuno abbia menzionato ancora il Mars Climate Orbiter della NASA, dal momento che sembra emergere continuamente nelle discussioni sulla Notazione ungherese).
Ecco un semplice esempio in 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'.
Guarda, mamma, niente ungheresi!
Se io dovessi usare ungherese notazione invece di tipi qui, che non mi avrebbe aiutato un po ':
let mSomeLength = 48.15
let ftSomeOtherLength = 16.2342
mSomeLength + ftSomeOtherLength
// > val it : float = 64.3842
Il compilatore l'ha lasciato passare. Ora mi affido a un essere umano per individuare ciò che è essenzialmente un errore di tipo. Non è quello che serve per un controllo di tipo?
Ancora meglio, usando il linguaggio di programmazione 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
Quindi, in sintesi: non mi piace la notazione ungherese. Non dovresti mai usarlo.
Detto questo, penso che usare la Notazione ungherese sia una buona idea. Aspetta cosa?
Sì! In questo caso particolare , hai menzionato:
Inoltre, la maggior parte del nostro codice deve essere eseguita su alcuni DSP strani, in cui un concetto come bool o float non esiste comunque
Ma questo è esattamente l'unico caso d'uso sensato per la notazione ungherese!
PS: Consiglio vivamente di guardare Frink. Il suo manuale contiene alcune delle più fantastiche battute sulle scoregge di sempre. È anche un linguaggio piuttosto interessante :-)