Notation hongroise
La notation hongroise est, en programmation informatique, une convention de nommage des variables et des fonctions qui met en avant soit leur usage, soit leur type.
La dĂ©signation de cette convention qui conduit Ă des noms vraiment trĂšs exotiques dans un contexte de programmation anglais fait probablement rĂ©fĂ©rence Ă lâorigine hongroise de son inventeur, Charles Simonyi[1] - [2], programmeur chez Xerox puis architecte en chef au sein de Microsoft.
Par exemple, la variable booléenne danger est préfixée par un b pour indiquer un type booléen : bDanger. Autre exemple, la variable indexant un client, sera préfixée par un idx pour indiquer son usage : idxClient[3].
On distingue en principe deux notations hongroises :
- notation hongroise Apps
- notation hongroise Systems
Notation hongroise Apps
C'est l'idée de préfixer le nom des variables de maniÚre à indiquer son utilisation :
- rwPosition : variable représentant une ligne (row en anglais)
- usName : variable représentant une chaßne de caractÚres non sûre (unsafe string en anglais)
Cette notation fut utilisée notamment dans le langage BCPL car il n'y avait alors pas d'autres types que les 'word' machine.
L'intĂ©rĂȘt Ă©vident de cette notation est qu'elle prĂ©vient le dĂ©veloppeur, par simple convention, de la possible erreur dans l'usage de ses variables, juste par la lecture du code. Ainsi, l'assignation de variable rwPosition = colOtherPosition signifie assigner une valeur de colonne (col) Ă une valeur de ligne (row).
NĂ©anmoins, Microsoft recommande de ne pas utiliser la notation hongroise avec .NET[4].
Notation hongroise Systems
Cette notation utilisée couramment consiste à faire précéder le nom de la variable d'un préfixe reflétant son type. Ce préfixe est toujours écrit en minuscule puis la premiÚre lettre suivante en majuscule. Ce qui donne :
short nIndex; char cChar; float* pfVal;
Ăvidemment, il ne faut pas en abuser sinon elle devient inutile. Exemple : arpszTableau
pour un tableau de pointeurs de chaĂźnes de caractĂšres.
préfixes description i int (entier) n short int (entier court) l long int (entier long) f float (nombre à virgule flottante) d double (float double) c char (caractÚre) b boolean (booléen true/false) by byte (octet, caractÚre non signé) w word (mot = double octet) dw double word (double mot) s string (chaßne de caractÚres) sz zero-terminated string (chaßne de caractÚres terminée par un char zéro) str string object (objet String) h handle o object (objet) pt point rgb rgb triplet ou range of bytes f file (fichier) fd file descriptor (descripteur/pointeur de fichier) v void
modificateurs description u unsigned (non signé) p pointer (pointeur) a ou ar array (tableau) m_ member variable (variable membre) g_ global variable (variable globale) s_ static variable (variable statique) l_ local variable (variable locale)
Microsoft a introduit deux coutumes pour la notation hongroise Systems : utiliser trois caractĂšres au lieu d'un pour qualifier une variable ou une constante, et commencer chaque nom par une majuscule au sein d'un mot comportant plusieurs noms.
On Error Resume Next
strComputer = "fictional"
strPrinter = "TestPrinter"
Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
If Err = 0 Then
WScript.Echo "No error binding to " & strComputer
strPrinter = "TestPrinter"
Set objPrinter = objWMIService.Get("Win32_Printer.Name='" & strPrinter & "'")
If Err = 0 Then
WScript.Echo "No error connecting to " & strPrinter
Else
call DisplayErrorInfo
End If
Else
call DisplayErrorInfo
End If
WScript.Quit 0
'******************************************************************************
Sub DisplayErrorInfo
WScript.Echo "Error: : " & Err
WScript.Echo "Error (hex) : &H" & Hex(Err)
WScript.Echo "Source : " & Err.Source
WScript.Echo "Description : " & Err.Description
WScript.Quit 1
End Sub
Références
- Microsoft Corporation â Hungarian Notation.
- (en) Charles Simonyi et Martin Heller, « The Hungarian Revolution », Byte, vol. 16, no 8,â , p. 131 (lire en ligne).
- La langue hongroise fonctionne de la mĂȘme maniĂšre, bien quâelle utilise des suffixes au lieu de prĂ©fixes, cf. Pierre GAAL â Câest Ă©lĂ©mentaire, mon cher Watson!.
- General Naming Conventions.