La notation hongroise a pour objet de coder dans l'identificateur des informations qui ne pourraient autrement pas être codées dans le système de types. Mon opinion personnelle est que si cette information est suffisamment importante pour être encodée, elle l'est suffisamment pour être encodée dans le système de types, où elle peut être vérifiée correctement. Et si l’information n’a pas d’importance, pourquoi alors vous voulez encombrer votre code source?
Ou, pour le dire plus succinctement: les informations de type appartiennent au système de types. (Note: il n'a pas besoin d'être un statique système de type Tant qu'il attrape les erreurs de type, je ne se soucient pas. Quand il les attrape.)
Quelques autres réponses ont mentionné les unités de mesure comme utilisations acceptables de la notation hongroise. (Je suis un peu surpris que personne n'ait encore mentionné Mars Orbiter de la NASA, car cela semble être une question récurrente dans les discussions sur la notation hongroise).
Voici un exemple simple en 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'.
Ecoute, maman, pas de Hongrois!
Si je devais utiliser la notation hongroise au lieu de types ici, cela ne me aider un peu:
let mSomeLength = 48.15
let ftSomeOtherLength = 16.2342
mSomeLength + ftSomeOtherLength
// > val it : float = 64.3842
Le compilateur l'a laissé passer. Je compte maintenant sur un humain pour repérer ce qui est essentiellement une erreur de type. N'est-ce pas ce à quoi sert un vérificateur de types?
Encore mieux, en utilisant le langage de programmation 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
Donc, en résumé: je n'aime pas la notation hongroise. Vous ne devriez jamais l'utiliser.
Cela dit, je pense que l’utilisation de la notation hongroise est une bonne idée. Attends quoi?
Oui! Dans ce cas particulier , vous avez mentionné:
De plus, la plupart de notre code doit fonctionner sur certains DSP bizarres, où un concept comme bool ou float n'existe de toute façon pas.
Mais c’est précisément le seul cas d’utilisation judicieux de la notation hongroise!
PS: Je recommande vivement de regarder Frink. Son manuel contient quelques-unes des blagues les plus impressionnantes de tous les temps. C'est aussi une langue plutôt cool :-)