Кіріспе
Идентификаторды атау нотациясы (компьютер ғылымдары)
Мажар нотациясы – компьютерлік бағдарламалаудағы идентификаторды атау конвенциясы, онда айнымалының немесе функцияның атауы оның мақсатын немесе түрін, немесе кейбір диалекттерде оның дерек типін көрсетеді. Алғашқы мажар нотациясы атау конвенциясында тек мақсатты немесе түрін қолданады және кейде «Apps Hungarian» деп аталады, себебі ол Microsoft Office қолданбаларын әзірлеуде Microsoft Apps бөлімінде кең таралды. Microsoft Windows бөлімі атау конвенциясын қабылдағанда, оны нақты дерек типіне негіздеді, және бұл конвенция Windows API арқылы кеңінен тарады; бұл кейде «Systems Hungarian» нотациясы деп аталады. Мажар нотациясы тілге тәуелсіз болу үшін жасалған және алғаш рет BCPL бағдарламалау тілінде қолданылды. BCPL-де машиналық сөзден басқа дерек типі болмағандықтан, тілдің өзі бағдарламашыға айнымалылардың типін есте сақтауға көмектеспейді. Мажар нотациясы бағдарламашыға әр айнымалының дерек типін нақты білу арқылы бұл мәселені шешуді мақсат етеді. Мажар нотациясында айнымалының атауы айнымалының типі немесе мақсатын білдіретін кіші әріптер тобынан басталады, содан кейін бағдарламашы таңдаған кез келген атау келеді; бұл соңғы бөлік кейде «берілген атау» деп аталады. Атаудың бірінші әрпін түр көрсеткіштерінен ажырату үшін үлкен әріппен жазуға болады (CamelCase-ті де қараңыз). Әйтпесе, бұл әріптің регистрі ауқымын көрсетеді.
Hungarian notation is an identifier naming convention in computer programming in which the name of a variable or function indicates its intention or kind, or in some dialects, its type. The original Hungarian notation uses only intention or kind in its naming convention and is sometimes called Apps Hungarian as it became popular in the Microsoft Apps division in the development of Microsoft Office applications. When the Microsoft Windows division adopted the naming convention, they based it on the actual data type, and this convention became widely spread through the Windows API; this is sometimes called Systems Hungarian notation. Hungarian notation was designed to be language independent, and found its first major use with the BCPL programming language. Because BCPL has no data types other than the machine word, nothing in the language itself helps a programmer remember variables' types. Hungarian notation aims to remedy this by providing the programmer with explicit knowledge of each variable's data type. In Hungarian notation, a variable name starts with a group of lower case letters which are mnemonics for the type or purpose of that variable, followed by whatever name the programmer has chosen; this last part is sometimes distinguished as the given name. The first character of the given name can be capitalized to separate it from the type indicators (see also CamelCase). Otherwise the case of this character denotes scope.
Тарих
Венгриялық нотацияның түпнұсқасы 1972–1981 жылдары Xerox PARC-те жұмыс істеген, кейіннен Microsoft-тың бас архитектор болған Чарльз Симоньи жасаған. Нотацияның аты Симоньидің туған жерін еске түсіреді, сондай-ақ Энди Герцфельдтің сөзіне сүйенсек, ол бағдарламаларды «көне, түсініксіз шетел тілінде жазылғандай» көрінетін етіп жасады. Венгр халқының есімдері көптеген еуропалық есімдерден өзгеше, «кері» жазылады; әуелі тегі, содан кейін есім келеді. Мысалы, ағылшын тіліндегі «Чарльз Симоньи» есімі венгр тілінде «Симоньи Карой» болып жазылады. Сол сияқты, венгр нотациясында тип атауы «есімнен» бұрын тұрады. Smalltalk-тың ұқсас «тип соңында» атау стилі (мысалы, aPoint және lastPoint) Симоньи Xerox PARC-те жұмыс істеген кезеңде кең таралған. Симоньидің нотация туралы мақаласында сақталатын мәліметтердің «типін» көрсету үшін қолданылатын префикстер туралы айтылған. pX – басқа X типіне сілтеме; бұл өте аз семантикалық ақпаратты қамтиды. d – екі мән арасындағы айырмашылықты білдіретін префикс; мысалы, dY графиктің Y осі бойынша қашықтықты білдіруі мүмкін, ал y деп аталатын айнымалы абсолюттік орналасуы мүмкін. Бұл толығымен семантикалық сипаттама. sz – нөлдік немесе нөлмен аяқталатын жол. C тілінде бұл қандай да бір семантикалық ақпаратты қамтиды, себебі char* типіндегі айнымалы бір таңбаға, таңбалар массивіне немесе нөлмен аяқталатын жолға сілтеме жасайтыны белгісіз. w – сөзді білдіретін айнымалыны көрсетеді. Бұл дерлік ешқандай семантикалық ақпаратты қамтимайды және оны Systems Hungarian деп санауға болады. b – байтты көрсетеді, ал w-дан айырмашылығы, семантикалық ақпаратты қамтуы мүмкін, себебі C тілінде байт өлшеміне арналған жалғыз дерек типі – char, сондықтан олар кейде сандық мәндерді сақтау үшін қолданылады. Бұл префикс айнымалының таңба немесе сан ретінде қарастырылуы тиіс мәнді сақтай ма екендігі туралы түсініксіздікті жоюға көмектеседі. Нотация әрқашан бастапқы кіші әріптерді аббревиатура ретінде пайдаланады, бірақ аббревиатуралардың өзін белгілемейді. Көптеген кең таралған конвенциялар бар (төмендегі мысалдарды қараңыз), бірақ кодтың ішінде сәйкес келетін кез келген әріптер жиынтығын қолдануға болады. Apps Hungarian нотациясын пайдаланатын код кейде айнымалыларды тек олардың типі бойынша сипаттағанда Systems Hungarian элементтерін қамтуы мүмкін.
Белгілерге қатынасы
Кейбір бағдарламалау тілдерінде осыған ұқсас жазулар, қазір сигильдер деп аталады, тілге енгізілген және компилятормен күшімен орындалады. Мысалы, BASIC-тің кейбір түрлерінде name$ жол (string) екенін, ал count% бүтін сан (integer) екенін көрсетеді. Венгерлік нотациясы мен сигильдердің басты айырмашылығы – сигильдер тілдегі айнымалының типін анықтайды, ал венгерлік нотациясы бағдарлама мәтінін машиналық түрде түсіндіруге ешқандай әсер етпейтін, тек атау жүйесі болып табылады.
Ерекше пікірлер
Роберт Сесил Мартин (мажар нотациясына және кодтаудың барлық басқа түрлеріне қарсы): қазіргі уақытта HN және типтік кодтаудың басқа түрлері жай ғана кедергі келтіреді. Олар айнымалының, функцияның, мүшесінің немесе кластың атауын немесе түрін өзгертуді қиындатады. Олар кодты оқуды қиындатады. Олар кодтау жүйесі оқырманды жаңылыстыру мүмкіндігін тудырады. Линус Торвальдс (Systems Hungarian-қа қарсы): Функцияның түрін атауға (мажарша нотация деп аталады) кодтау – мидың зақымдануы. Компилятор түрлерді өзі біледі және оларды тексеруге болады, ал ол бағдарламашыны шатастырады. Стив Макконнелл (Apps Hungarian үшін): Мажар нотациясы енді кеңінен қолданылмаса да, қысқаша, нақты аббревиатураларды стандарттаудың негізгі идеясы әлі де құнды. Стандартталған префикстер сізге компилятор міндетті түрде тексермейтін абстрактілі деректер түрлерін қолданғанда, түрлерді дәл тексеруге мүмкіндік береді. Бьярн Строструп (C++ үшін Systems Hungarian-қа қарсы): Мен «мажар» нотациясын ұсынбаймын. Мен «мажар» (түрдің қысқартылған нұсқасын айнымалының атына енгізу) типсіз тілдерде пайдалы болуы мүмкін, бірақ жалпыға бірдей бағдарламалауды және объектіге бағытталған бағдарламалауды қолдайтын тіл үшін мүлдем қолайсыз деп санаймын, себебі олар екеуі де түрге және аргументтерге негізделген операцияларды таңдауды (тілге немесе орындалу уақытына белгілі) ерекшелендіреді. Бұл жағдайда «объектінің түрін атауларға енгізу» абстракцияны жай ғана қиындатады және азайтады. Джоэл Спольски (Apps Hungarian үшін): Егер сіз Симоньидің мақаласын мұқият оқысаңыз, ол жоғарыдағы мысалдағыдай атаудың бір түрін қолданды, онда біз us дегеніміз – қауіпсіз емес жол, s дегеніміз – қауіпсіз жол. Олар екеуі де жол түрінде. Компилятор сізге көмектеспейді, егер сіз бірін екіншісіне тағайындасаңыз және Intellisense [ақылды кодты толықтыру жүйесі] сізге ештеңе айтпайды. Бірақ олардың мағынасы әртүрлі. Оларды әртүрлі түсіндіру керек және әртүрлі қарау керек, және егер сіз бірін екіншісіне тағайындасаңыз, қандай да бір түрлендіру функциясын шақыру керек немесе орындалу кезінде қате пайда болады. Егер сәттілік болса. Apps Hungarian кодты оқуды, жазуды, түзетуді және күтіп-ұстауды жеңілдетеді, ал ең бастысы, қате кодты қате көрінеді. (Systems Hungarian) Симоньидің ниеті мен тәжірибесін түсінбеушілік болды. Microsoft-тың жобалау нұсқаулары NET кітапханаларындағы элементтерге атаулар таңдағанда әзірлеушілерді Systems Hungarian нотациясын пайдаланудан бас тартуға шақырады, дегенмен бұл Visual Basic 6 және одан бұрынғы Microsoft-тың даму платформаларында кең таралған. Бұл жобалау нұсқаулықтары функциялардың ішіндегі жергілікті айнымалылардың атау ережелері туралы ештеңе айтпайды.