Вуго́рская ната́цыя — у праграмаваньні пагадненьне пра найменьне зьменных, калі зьменная або функцыя характарызуе сваё прызначэньне ці від, а ў некаторых мовах і тып. Аўтэнтычная вугорская натацыя ў пагадненьні пра найменьні выкарыстоўвае прызначэньне ці від.

Распрацоўвалася вугорская натацыя мованезалежнай і ўпершыню шырока была выкарыстаная ў мове праграмаваньня BCPL. Паколькі BCPL ня мае ніякіх тыпаў зьвестак, акрамя машынных словаў, праграмоўца ня мае ніякіх іншых сродкаў да запамінаньня тыпу зьменных. Вугорская натацыя прапануе праграмоўцу яўнае апісаньне тыпу кожнай зьменнай.

У вугорскай натацыі назва зьменнай пачынаецца зь некалькіх літараў у ніжнім рэгістры, якія зьяўляюцца пазначэньнем тыпу ці прызначэньня гэтай зьменнай, пасьля якіх ідзе ўласна прыдуманая праграмоўцам назва зьменнай; гэтая апошняя частка часам называецца імя. Першы сымбаль імені можа пачынацца зь вялікай літары, каб адрозьніваць яго ад паказьніка тыпу (глядзіце таксама вярблюджы рэгістар).

Мінуўшчына

рэдагаваць

Арыгінальную вугорскую натацыю прыдумаў Чарльз Сымоні, які ў 1972—1981 працаваў у Xerox PARC, а пазьней стаў галоўным архітэктарам у Microsoft.

Назва натацыі паходзіць ад роднай краіны Чарльза; вугорскія імёны «перакуленыя» ў параўнаньні з большасьцю іншых эўрапейскіх імёнаў: прозьвішча ідзе перад уласным імем. Напрыклад, імя «Чарльз Сымоні» па-вугорску гучыць як «Шымані Карай». Такім сама чынам і назва тыпу зьменнай папярэднічае ейнаму «імені» ў вугорскай натацыі, у адрозьненьне ад больш звыклага для эўрапейцаў парадку «тып апошнім», прынятаму ў мове Smalltalk. Падчас працы Сымоні Xerox PARC кампанія шырока карысталася менавіта апошнім тыпам найменьняў.

Пазьней натацыю Чарльза Сымоні ўзяў на ўзбраеньне дастасоўны аддзел Microsoft, адсюль прынцып стаў таксама называцца «Дастасоўная вугорская натацыя». Пазьней каманда распрацоўнікаў апэрацыйнай сыстэмы Microsoft Windows удасканаліла натацыю, якая атрымала назву «Сыстэмнай вугорскай». У адрозьненьне ад правілаў Сымоні, які прапанаваў у прэфіксе шыфраваць назву тыпу зьменнай, у сыстэмнай вугорскай натацыі распрацоўнікі Microsoft ужылі больш зразумелыя прэфіксы, якая і цяпер выкарыстоўваецца ў дастасоўным праграмным інтэрфэйсе Windows.

Параўнаньне дастасоўнай і сыстэмнай натацыяў

рэдагаваць

Прывядзем адрозьненьні дастасоўнай і сыстэмнай натацыяў у прэфіксах зьменных.

У сыстэмнай вугорскай натацыі ў прэфіксе зашыфраваны фактычны тып зьвестак зьменнай. Напрыклад:

  • lAccountNum : зьменная тыпу long integer («l»);
  • arru8NumberList : зьменная тыпу array of unsigned 8-bit integers («arru8»);
  • bReadLine(bPort,&arru8NumberList) : функцыя, што вяртае значэньне байтавага тыпу.
  • strName : зьменная ўяўляе зь сябе радок («str») зь іменем, але не ўдакладняе, як уводзіцца гэты радок.

Дастасоўная вугорская натацыя імкнецца зашыфраваць лягічны тып зьвестак, чымся фізычны; такім парадкам, яна дае падказку, якое прызначэньне мае зьменная ці што яна захоўвае.

  • rwPosition : зьменная ўяўляе зь сябе рад (анг. row; «rw»);
  • usName : зьменная ўяўляе зь сябе небясьпечны радок (анг. unsafe string; «us»), які патрабуе «падчысткі» перад выкарыстаньнем
  • szName : зьменная ўяўляе зь сябе радок з нулявым байтам у канцы (анг. zero-terminated string; "sz"); адзін зь першых прапанаваных Сымоні прэфіксаў.

Большасьць, хоць ня ўсе, прапанаваных Сымоні прэфіксаў — сэмантычныя ў натуры. На цяперашні погляд некаторыя прэфіксы выглядаюць як фактычныя назвы тыпаў зьвестак (напрыклад, sz); аднак тады гэтыя прэфіксы ўсё яшчэ былі сэмантычнымі, бо Сымоні прапаноўваў вугорскую натацыю для моваў, дзе немагчыма было адрозьніць некаторыя тыпы зьвестак. Цяперашнія мовы праграмаваньня ўжо немагчыма ўявіць бяз гэтых тыпаў зьвестак.

Яшчэ прыклады з арыгінальных правілаў:[1]

  • pX — паказальнік на іншы тып X; вельмі малая сэмантычная інфармацыя.
  • d — азначае адрозьненьне між двума значэньнямі; напрыклад, dY магло азначаць адлегласьць уздоўж восі Y графу, а зьменная y магла зьяўляцца абсалютнай каардынатай. Гэта цалкам сэмантычнае значэньне.
  • sz — радок з нулявым байтам у канцы. Для C гэта нясе пэўную сэмантычную інфармацыю, бо незразумела, ці зьменная тыпу char* ёсьць паказальнікам на адзін сымбаль, масіў сымбаляў ці на радок з канцавым нулявым байтам.
  • w — зьменная-слова. Тут цалкам адсутнічае сэмантычная інфармацыя, таму можна аднесьці гэты запіс да сыстэмнай вугорскай натацыі.
  • b — байт; у адрозьненьне ад w, сэмантычная інфармацыя прысутная, бо ў C адзіным тыпам зьвестак аднабайтавага памеру ёсьць char, і часам у іх могуць захоўвацца лічбавыя значэньні. Гэты прэфікс адназначна характарызуе, ці можна лічыць значэньне зьменнай сымбалем, ці байтам.

Прыклады

рэдагаваць
  • bBusy : boolean
  • chInitial : char
  • cApples : падлік элемэнтаў
  • dwLightYears : double word (сыстэмная)
  • fBusy : flag (або float)
  • nSize : integer (сыстэмная) ці падлік (дастасоўная)
  • iSize : integer (сыстэмная) ці індэкс (дастасоўная)
  • fpPrice: floating-point
  • dbPi : double (сыстэмная)
  • pFoo : pointer
  • rgStudents : array або range
  • szLastName : zero-terminated string
  • u16Identifier : unsigned 16-bit integer (сыстэмная)
  • u32Identifier : unsigned 32-bit integer (сыстэмная)
  • stTime : структура з часаў
  • fnFunction : назва функцыі

Мнэмонікі для паказальнікаў і масіваў, якія не зьяўляюцца сапраўднымі тыпамі зьвестак, звычайна бяруцца паводле тыпу зьвестак элемэнтаў:

  • pszOwner : паказальнік на радок з нулявым байтам у канцы
  • rgfpBalances : масіў зь лікаў float
  • aulColors : масіў з unsigned long (сыстэмная)

Хоць вугорская натацыя можа пасаваць для любой мовы ці асяродзьдзя праграмаваньня, пераважна выкарыстоўваецца кампаніяй Microsoft у праграмаваньні на C, у прыватнасьці для Microsoft Windows. Для праграмоўцаў, якія вывучалі праграмаваньне Windows на C, пэўна, найбольш запамінальнымі прыкладамі ёсьць wParam (парамэтар тыпу word) і lParam (парамэтар long-integer) для функцыі WindowProc().

  • hwndFoo : дэскрыптар вакна
  • lpszBar : паказальнік тыпу long на радок з нулявым байтам у канцы

Перавагі

рэдагаваць

Прыхільнікі вугорскай натацыі зазначаюць такія перавагі:[1]

  • Сымбальны тып можна ўбачыць па ягонай назьве. Гэта зручна пры праглядзе крынічнага коду без інтэграванага асяродзьдзя распрацоўкі — прыкладам, пры інспэкцыі коду ці на раздрукоўцы — ці калі апісаньне зьменнай знаходзіцца ня ў тым файле, дзе выкарыстоўваецца.
  • У мовах, якія выкарыстоўваюць дынамічную тыпізацыю ці без тыпізацыі, пазначэньні тыпаў зьменных могуць быць неадпаведнымі. У такіх мовах зьменныя звычайна не апісваюцца для захоўваньня вызначанага тыпу зьвестак, таму адзінай падказкай, для чаго патрэбная зьменная, стануць даступныя праграмоўцам сродкі (найменьне зьменнай, дакумэнтацыя, камэнтары). Як згадвалася вышэй, вугорская натацыя пашыраная ў такой мове (BCPL).
  • Фарматаваньне назваў зьменных можа спрасьціць пэўныя аспэкты рэфактарынгу (аднак зробіць іншыя аспэкты больш схільнымі да памылак).
  • У адным кавалку коду могуць ужывацца некалькі зьменных з падобнай сэмантыкай: dwWidth, iWidth, fWidth, dWidth.
  • Назвы зьменных лёгка запомніць, ведаючы проста іхнія тыпы.
  • Назвы зьменных становяцца больш прадказальнымі.
  • Пры чытаньні коду можна лёгка заўважыць хібныя прывядзеньні тыпаў зь несумяшчальнымі тыпамі зьвестак.
  • У складаных праграмах зь вялікай колькасьцю глябальных аб’ектаў (формы VB/Delphi) выкарыстаньне натацыі з прэфіксамі можа спрасьціць пошук кампанэнту ўнутры рэдактара. Напрыклад, шукаючы падрадок btn, можна знайсьці ўсе аб’екты Button.
  • Друкаваны крынічны код больш зразумелы чытачу пры ўмове выкарыстаньня тыпаў зьвестак, пагадненьнях па назвах тыпаў, прысвойваньняў, абразаньняў ды інш.

Нязручнасьці

рэдагаваць

Большасьць аргумэнтаў супраць вугорскай натацыі тычацца сыстэмнай галіны, а не дастасоўнай:

  • Вугорская натацыя састарэлая пры праверцы тыпу зьвестак кампілятарам. Кампілятары моваў праграмаваньня выконваюць строгую праверку тыпаў, безь якой праграма не выканаецца.
  • Найсучасьнейшыя інтэграваныя асяродзьдзі распрацоўкі паказваюць тыпы зьменных пры патрэбе і аўтаматычна пазначаюць апэрацыю зь несумяшчальнымі тыпамі.
  • Вугорская натацыя можа зьбіць з панталыку, калі паспрабаваць апісаць ёй некалькі характарыстык зьменных, напрыклад a_crszkvc30LastNameCol: аргумэнт канстанты-спасылкі, які зьмяшчае слупок базы зьвестак LastName тыпу varchar(30), які ўваходзіць у першасны ключ табліцы.
  • Пры зьмяненьні ці пераносе коду натацыя можа выклікаць неадпаведнасьць. Пры зьмяненьні тыпу зьменнай трэба зьмяняць і назву зьменнай, інакш ейная назва будзе неадпаведнай новаму тыпу. Даволі вядомым прыкладам ёсьць стандартны тып WPARAM і спадарожны фармальны парамэтар wParam у апісаньні мноства сыстэмных функцыяў Windows. Тут «w» азначае «word» — пачаткова 16-бітны тып зьвестак, але зь пераходам ад 16-бітнай архітэктуры словаў да 32-бітнай стаў адпаведнай 32-бітным тыпам, а на 64-бітнай архітэктуры — 64-бітным (фактычная назва гэтага тыпу — UINT_PTR, што азначае «бяззнакавы цэлы, дастаткова вялікі, каб зьмясьціць паказальнік»).
  • Часьцей за ўсё веданьне прымяненьня зьменнай дазваляе зразумець ейны тып. Больш за тое, нават веданьне тыпу зьменнай не дапаможа зразумець ейнага прымяненьня.
  • Вугорская натацыя зьмяншае перавагі выкарыстаньня рэдактараў коду, якія маюць аўтападстаноўку назваў зьменных, бо праграмоўца вымушаны абавязкова ўводзіць прэфікс тыпу, які можа супадаць зь іншымі назвамі зьменных таго ж тыпу.
  • Крынічнік становіцца горш чытэльным праз запаланеньне зьменнымі зь непатрэбнымі пазначэньнямі тыпаў і прызначэньняў зьменных.
  • Дадатковая інфармацыя пра тып зьменнай ня можа замяніць ейную больш апісальную назву. Напрыклад, sDatabase ня так патлумачыць чытачу прызначэньне зьменнай, як больш апісальная назва databaseName.
  • Калі назвы зьменных дастаткова апісальныя, дадатковая інфармацыя пра тып можа быць залішняй. Напрыклад, хутчэй за ўсё зьменная firstName будзе радковага тыпу, таму выкарыстаньне яе з прэфіксам sFirstName уводзіць непатрэбшчыну.
  • Назвы зьменных цяжэй запамінальныя.
  • У адным блёку коду могуць трапіцца розныя зьменныя з рознай сэмантыкай ды падобнымі назвамі: dwTmp, iTmp, fTmp, dTmp.

Глядзіце таксама

рэдагаваць
  1. ^ а б Charles Simonyi (лістапад 1999) Hungarian Notation MSDN Library. Microsoft Corp..

Вонкавыя спасылкі

рэдагаваць