Notacja węgierska
Notacja węgierska (ang. Hungarian Notation) – w programowaniu sposób zapisu nazw zmiennych oraz obiektów, polegający na poprzedzaniu właściwej nazwy małą literą (literami) określającą rodzaj tej zmiennej (obiektu).
Notację węgierską wymyślił Charles Simonyi, programista z Microsoft. Podane niżej przedrostki są tylko jednym z przykładów formatu zapisu zmiennych w notacji węgierskiej. Tak naprawdę sposobów jest tyle, ilu jest programistów korzystających z tej notacji. Różnie także nazywane są zmienne. Przykładowo można spotkać się z formatami:
- iLiczba
- i_Liczba
- i_liczba
Przykład użycia notacji węgierskiej do nazywania zmiennych w C++:
| przedrostek | znaczenie |
|---|---|
| s | string (łańcuch znaków) |
| sz | string (łańcuch znaków zakończony bajtem zerowym - null'em) |
| c | char (jeden znak), również const - wartość stała (szczególnie w przypadku użycia wskaźników) |
| by | byte, unsigned char |
| n | short |
| i | int |
| x, y | int (przy zmiennych określających współrzędne) |
| cx, cy | int (przy zmiennych określających rozmiar, długość) |
| l | long |
| w | word |
| dw | dword |
| b | boolean (wartość logiczna: prawda lub fałsz) |
| f | flaga |
| fn | funkcja |
| h | handle (uchwyt) |
| p | pointer (wskaźnik) |
Przykład użycia notacji węgierskiej do nazywania obiektów w C#:
| przedrostek | znaczenie |
|---|---|
| asm | Assembly |
| bln | Boolean |
| btn | Button |
| ch | Char |
| cbx | CheckBox |
| cmb | ComboBox |
| ctr | Container |
| dcol | DataColumn |
| dgrid | DataGrid |
| dgdtpc | DataGridDateTimePickerColumn |
| dgts | DataGridTableStyle |
| dgtbc | DataGridTextBoxColumn |
| dreader | DataReader |
| drow | DataRow |
| dset | DataSet |
| dtable | DateTable |
| date | DateTime |
| dialog | Dialog |
| dr | DialogResult |
| dbl | Double |
| ex | Exception |
| gbx | GroupBox |
| htbl | HashTable |
| iml | ImageList |
| int | Integer |
| lbl | Label |
| lbx | ListBox |
| lv | ListView |
| rmt | MarshallByRedObject |
| mm | Mainmenu |
| mi | MenuItem |
| frame | MDI-Frame |
| sheet | MDI-Sheet |
| nud | NumericUpDown |
| pnl | Panel |
| pbx | PictureBox |
| rbtn | RadioButton |
| form | SDI-Form |
| sqlcom | SqlCommand |
| sqlcomb | SqlCommandBuilder |
| sqlcon | SqlConnection |
| sqlda | SqlDataAdapter |
| stb | StatusBar |
| str | String |
| strb | StringBuilder |
| tabctrl | TabControl |
| tabpage | TabPage |
| tbx | TextBox |
| tbr | ToolBar |
| tbb | ToolBarButton |
| tmr | Timer |
| usr | UserControl |
| wpl | WindowsPrincipal |
Charakterystyczne dla notacji węgierskiej (tworzące jej "węgierskie brzmienie") są również złożenia przedrostków, zbliżone do składania morfemów gramatycznych z morfemami znaczeniowymi w języku węgierskim (i innych językach aglutynacyjnych).
| przedrostek | znaczenie |
|---|---|
| lpcsz | "długi" ("daleki") wskaźnik na stały ciąg znaków zakończony bajtem zerowym |
| pfn | wskaźnik na funkcję |
Notacja węgierska, przez wielu wręcz uwielbiana, u innych wywołuje mieszane uczucia. Główną wadą tego systemu jest to, że jeśli chce się zmienić typ zmiennej, trzeba poprawiać nazwę w każdym miejscu programu. W związku z tym notacja nie jest najlepszym rozwiązaniem dla programistów nieco roztargnionych (a także programistów języków dynamicznych).
Notację węgierską stosuje się także w celu zaznaczenia zasięgu zmiennej. Przykładowo:
- g_iZmienna : zmienna globalna, integer
- m_iZmienna : zmienna w strukturze lub klasie, integer
- m_Zmienna : zmienna w strukturze lub klasie
- s_Zmienna : zmienna statyczna klasy
- _Zmienna : zmienna lokalna