Кіріспе
Код пен құжаттамадағы атаулар үшін ережелер жинағы
Компьютерлік бағдарламалауда атау конвенциясы – дереккөз кодтары мен құжаттамадағы айнымалыларды, типтерді, функцияларды және басқа да объектілерді белгілейтін идентификаторлар үшін қолданылатын таңбалар тізбесін таңдау ережелерінің жиынтығы. Атау конвенциясын пайдалану себептері (бағдарламалаушыларға кез келген таңбалар тізбесін таңдау мүмкіндігінен гөрі) мыналарды қамтиды:
Дереккөз кодын оқу және түсінуге жұмсалатын күш-жігерді азайту;
Кодты қарау кезінде синтаксис пен атау стандарттарынан гөрі маңызды мәселелерге назар аударуға мүмкіндік беру. Код сапасын тексеру құралдарының есептерін синтаксис пен стильдік қалаулар емес, маңызды мәселелерге бағыттауға мүмкіндік беру. Атау конвенциясын таңдау пікір-таласты мәселе болуы мүмкін, оның жақтастары өздерінің нұсқасын ең жақсы деп санайды, ал басқаларын нашар деп есептейді. Бұл көбінесе догмалық мәселе деп айтылады. Көптеген компаниялар өздерінің конвенциялар жиынтығын әзірлеген.
To enable code reviews to focus on issues more important than syntax and naming standards. To enable code quality review tools to focus their reporting mainly on significant issues other than syntax and style preferences. The choice of naming conventions can be a controversial issue, with partisans of each holding theirs to be the best and others to be inferior. Colloquially, this is said to be a matter of dogma. Many companies have also established their own set of conventions.
Қиындықтар
Атау конвенцияларын таңдау (және олардың қаншалықты міндетті түрде сақталынатыны) көбінесе даулы мәселе болып табылады, мұнда әр тарап өз пікірін ең дұрысы деп, ал қалғанын нашар деп санайды. Сонымен қатар, белгілі және анықталған атау конвенциялары бар болған жағдайда да, кейбір ұйымдар оларды үнемі сақтамайды, бұл сәйкессіздікке және шатасуға әкеледі. Егер атау конвенцияларының ережелері өзара қайшы болса, негізсіз, есте сақтау қиын болса немесе пайдалырақ емес, ауыртпалық ретінде қарастырылса, бұл қиындықтар одан да күшеюі мүмкін.
Ортақ элементтер
Атаудың нақты ережелері оларды қолданылатын жағдайға байланысты. Бірақ, қазіргі кезде қолданылып жүрген атаулардың көпшілігіне, тіпті барлығына да әсер ететін бірнеше ортақ элементтер бар.
Көп сөзді идентификаторлар
Жалпы ұсыныс – «Мағыналы идентификаторларды қолданыңыз». Бір сөз көп сөзден гөрі аз мағыналы болуы мүмкін. Сондықтан, кейбір атау конвенциялары бірнеше сөзден тұратын «құрама» идентификаторларды өңдеу ережелерін белгілейді. Көптеген бағдарламалау тілдері идентификаторларда бос орынға рұқсат бермейді, сондықтан әр сөзді бөлу тәсілі қажет (кейінірек оқығандарға қай таңбалар қай сөзді құрайтынын түсінуді жеңілдету үшін). Тарихи тұрғыдан алғанда, FORTRAN (1955) және ALGOL (1958) сияқты ерте тілдер идентификаторлардың ішінде бос орындарға рұқсат берді, идентификаторлардың соңын контекст арқылы анықтады. Кейінірек тілдерде токенизацияның қиындығына байланысты бұл тәсіл қолданудан шығарылды. Атауларды жай ғана сөздерді тіркеу арқылы жазуға болады, және бұл кейде қолданылады, мысалы, Java пакеттері үшін mypackage атауында, бірақ ұзын сөздерді оқу қиынға түседі, сондықтан әдетте қандай да бір бөлігіш белгі қолданылады.
Бөлімшемен бөлінген сөздер
Бір тәсіл – әріптік-сандық емес символдармен жеке сөздерді бөлу. Бұл мақсатта ең көп қолданылатын екі символ – дефис ("-") және астын сызу ("_"); мысалы, "екі сөз" деген екі сөздік атау "екі-сөз" немесе "екі_сөз" түрінде көрсетіледі. Дефис COBOL (1959), Forth (1970) және Lisp (1958) тілдерінде бағдарлама жазатын дерлік барлық бағдарламашылар қолданады; сондай-ақ, Unix жүйесінде командалар мен пакеттер үшін және CSS-те де жиі қолданылады. Бұл конвенцияның ресми атауы жоқ, бірақ оны lisp case немесе COBOL CASE (Pascal case-пен салыстырыңыз), kebab case, brochette case немесе басқа да түрлендірілген нұсқалар деп атауға болады. Олардың ішінде, кемінде 2012 жылдан бері қолданылып келе жатқан kebab case белгілі бір деңгейде танымал. Ал, FORTRAN/ALGOL дәстүріндегі тілдер, әсіресе C және Pascal отбасы тілдері, дефисті шегеру операторы үшін қолданды және оның айналасында бос орын қалдыруды қаламады (еркін форматтағы тілдер ретінде), бұл идентификаторларда оны пайдалануға кедергі келтірді. Балама ретінде астын сызуды қолдануға болады; бұл C отбасында (соның ішінде Python) жиі кездеседі, кіші әріптермен жазылған сөздерді қолданады, мысалы, The C Programming Language (1978) кітабында көрсетілгендей, және оны snake case немесе snail case деп атайды. UPPER CASE-тегі үлкен әріптермен жазылған астын сызулар әдетте C препроцессорлық макростары үшін қолданылады, сондықтан оны MACRO CASE деп атайды, сондай-ақ Unix орта айнымалылары үшін, мысалы, bash-тағы BASH VERSION сияқты. Кейде оны әзілде SCREAMING SNAKE CASE (немесе SCREAMING SNAIL CASE) деп атайды.
Кіріспе әріппен бөлінген сөздер
Тағы бір тәсіл – "camelCase", "PascalCase" және тағы да көптеген атаулармен белгіленетін сөздердің шекараларын ортадағы әріптерді үлкен етіп жазу арқылы көрсету, осылайша "екі сөз" дегенді "twoWords" немесе "TwoWords" деп беру. Бұл әдет Паскаль, Java, C# және Visual Basic тілдерінде кеңінен қолданылады. Идентификаторлардағы аббревиатураларды (мысалы, XMLHttpRequest-тегі "XML" және "HTTP") қалай өңдеу әртүрлі. Кейбіреулер оларды кішкентай әріптермен жазуды ұсынады (мысалы, XmlHttpRequest), бұл теруді, оқуды және бөлуді жеңілдетеді, ал басқалары оларды үлкен әріптермен қалдырады (мысалы, XMLHTTPRequest), дәлдікті сақтау үшін.
Венгриялық жазу
Бәлкім, ең танымал – венгр нотациясы, ол айнымалының мақсатын («Қолданба венгр нотациясы») немесе түрін («Жүйе венгр нотациясы») атауында кодтайды. Мысалы, szName айнымалысының алдынан тұрған «sz» префиксі, бұл айнымалының нөлдік символмен аяқталатын жол екенін көрсетеді.
Позициялық белгі
Өте қысқа (сегіз таңбадан кем) атаулар үшін мынадай стильді қолдануға болады: LCCIIL01, онда LC – қолданба (аккредитивтер), C – COBOL, IIL – нақты процесс бөлімі, ал 01 – реттік нөмір. Осындай үлгі JCL-ге тәуелді мейнфреймдерде әлі де қолданылып келеді, сондай-ақ 8.3 (максимум сегіз таңба, нүктемен бөлінген, содан кейін үш таңбалы файл түрі) MS DOS стилінде де кездеседі.
Құрама сөз схемасы (OF Language)
IBM-нің "OF Language" тілі IMS (Ақпаратты басқару жүйесі) нұсқаулығында сипатталған. Онда "клиенттік шот нөмірі" дегенді білдіретін "CUST ACT NO" сияқты атаулардан тұратын PRIME MODIFIER CLASS сөздер схемасы егжей-тегжейлі түсіндірілген. PRIME сөздері жүйе үшін маңызды негізгі "бірліктерді" көрсетуге арналған. MODIFIER сөздері қосымша нақтылау, толықтыру және оқуға қолайлылық үшін қолданылған. CLASS сөздері нақты бір қолданбаға қатысты дерек түрлерінің өте қысқа тізімі болуы тиіс. Көбінесе қолданылатын CLASS сөздері: NO (нөмір), ID (турама), TXT (мәтін), AMT (сома), QTY (көлем), FL (белгі), CD (код), W (жұмыс) және т.б. Іс жүзінде қол жетімді CLASS сөздері екі ондықтан аспайтын терминдерден тұратын тізім болады. CLASS сөздері, әдетте оң жақта (суффикс ретінде) орналасып, венгр нотациясының префикстерімен ұқсас мақсатты қызмет етеді. CLASS сөздерінің мақсаты, біркелкейліліктен басқа, бағдарламашыға нақты деректер өрісінің дерек типін көрсету болды. BOOLEAN (екі мән ғана болатын) өрістер қабылдаудан бұрын FL (белгі) тек екі мүмкін мәні бар өрісті білдіретін.
ActionScript- тің атауы
Adobe компаниясының Кодтау Конвенциялары мен Ең жақсы тәжірибелері ActionScript үшін ECMAScript-тің стандарттарымен көбінесе үйлесетін атау стандарттарын ұсынады. Идентификаторлар стилі Java стиліне ұқсас.
Аида
Адада идентификаторлар үшін ұсынылатын жалғыз стиль – әріптердің үлкен-кіші әріптерінің араласуы және асты сызықтардың қолданылуы.
АПЛ
APL диалектілерінде сөздердің арасында дельта (Δ) таңбасы қолданылады, мысалы, PERFΔSQUARE (ескі APL нұсқаларында дәстүрлі түрде кіші әріптер болмаған). Егер атау асты сызылған әріптерді қамтыса, онда delta underbar (⍙) таңбасы қолданылады.
C және C++
C және C++ тілдерінде түйін сөздер мен стандартты кітапхана идентификаторлары көбінесе кіші әріптермен жазылады. C стандартты кітапханасында қысқартылған атаулар жиі кездеседі (мысалы, бір таңбаның әріптік-цифрлық екенін тексеру үшін isalnum функциясы), ал C++ стандартты кітапханасы сөздерді бөлу үшін көбінесе астын сызу белгісін пайдаланады (мысалы, ауқымнан тыс). Макростарды көрсететін идентификаторлар әдетте тек үлкен әріптермен және астын сызу белгісімен жазылады (бұл көптеген бағдарламалау тілдерінде константалар үшін тек үлкен әріптерден тұратын идентификаторларды қолдану дәстүрімен байланысты). Екі астын сызу белгісінен тұратын немесе астын сызу белгісімен басталып, үлкен әріппен жалғасатын атаулар жүзеге асыру үшін (компилятор, стандартты кітапхана) резервтелген және оларды пайдаланбау керек (мысалы, резервтелген немесе Reserved). Бұл сырттай строппингке ұқсас, бірақ мағынасы басқа: астын сызу белгілері идентификатордың мәнінің бөлігі болып табылады, цитата белгілері емес (строппинг сияқты): foo-ның мәні foo (резервтелген), foo емес (бірақ басқа кеңістікте).
С#
C# атау конвенциялары әдетте Microsoft-тың барлық .NET тілдері үшін жариялаған нұсқауларына сәйкес келеді (төмендегі .NET бөлімін қараңыз), бірақ C# компиляторы ешқандай конвенцияларды міндеттейді. Microsoft нұсқауларында тек PascalCase және camelCase пайдалану ұсынылады, соңғысы әдіс параметрлерінің және әдістің жергілікті айнымалыларының атаулары үшін (әдістің жергілікті константа мәндерін қоса алғанда) қолданылады. PascalCase-ке ерекшелік екі әріптен тұратын акронимдер үшін жасалады, егер олар идентификаторды бастаса; мұндай жағдайларда екі әріп те үлкен әріппен жазылады (мысалы, IOStream), ал ұзын акронимдерге бұл қатысты емес (мысалы, XmlStream). Сондай-ақ, интерфейс атауы PascalCase-те болуы керек және оның алдынан үлкен әріппен «I» жазылуы тиіс, мысалы, IEnumerable. Microsoft-тың өріс атауларына қатысты нұсқаулары статикалық, ашық және қорғалған өрістерге ғана қатысты; ал статикалық емес және басқа қолжетімділік деңгейлеріне ие өрістер (мысалы, ішкі және жеке) нұсқаулармен қамтылмайды. Көптеген жағдайларда барлық өрістердің атаулары үшін PascalCase қолданылады, жеке (және константа немесе статикалық емес) өрістерден басқа, оларға camelCase-ті қолданатын атаулар беріледі, оның алдынан бір төменгі сызық қойылады; мысалы, totalCount. Кез келген идентификатор атауы мағынасын өзгертпей, коммерциялық «@» символымен префикспен жазылуы мүмкін. Яғни, factor және @factor бір нысанды білдіреді. Конвенция бойынша, бұл префикс тек идентификатор резервтелген кілт сөз (мысалы, for және while) болған жағдайларда қолданылады, оны префикссіз идентификатор ретінде пайдалануға болмайды, немесе контексттік кілт сөз (мысалы, from және where) болғанда, мұндай жағдайларда префикс міндетті емес (кем дегенде, оның жариялануында емес; мысалы, dynamic dynamic жарамды болса да, көбінесе dynamic @dynamic түрінде жазылады, оқырманға соңғысы айнымалы атауы екенін дереу көрсету үшін).
Жүре беріңіз
Go-да бірнеше сөзден тұратын атауларды жазу үшін асты сызулардың орнына MixedCaps немесе mixedCaps қолданылады. Құрылымдар мен функцияларды атағанда, бірінші әріп сыртқы пакеттерге көріну деңгейін анықтайды. Бірінші әріпті үлкен әріппен жазу сол код бөлігін экспорттайды, ал кіші әріппен жазу оны тек ағымдағы ауқымда ғана қолдануға мүмкіндік береді.
Лиспа
Lisp диалектілерінің көпшілігінде идентификаторлардағы сөздерді сызықшалармен бөлу қалыпты жағдай, мысалы, `with open file` және `make hash table` сияқты. Динамикалық айнымалылардың атаулары әдетте екі жағынан да жұлдызшамен белгіленеді: `*map walls*`. Тұрақтылардың атаулары плюс белгілерімен көрсетіледі: `+map size+`.
.NET
Microsoft .NET көптеген идентификаторлар үшін UpperCamelCase, сонымен қатар PascalCase қолдануды ұсынады. (параметрлер мен айнымалылар үшін төменгіCamelCase ұсынылады) және бұл .NET тілдері үшін ортақ конвенция болып табылады. Microsoft сондай-ақ типтік префикстерді (мажар нотациясы деп те аталады) пайдаланбауды ұсынады. Мажар нотациясын пайдаланудың орнына, атауды негізгі сыныптың атымен аяқтау ұсынылады; BtnLogin орнына LoginButton.
C-мақсаты
Objective-C Smalltalk тамырларындағы ортақ кодтау стиліне ие. Сыныптар, протоколдар, категориялар және Objective-C бағдарламаларында қолданылатын жаһандық айнымалылар мен функциялар сияқты жоғарғы деңгейдегі элементтер, NSString, UIAppDelegate, NSApp немесе CGRectMake сияқты атау кеңістігін көрсететін қысқа, толық үлкен әріптермен жазылған префиксі бар UpperCamelCase форматында болады. Тұрақтыларға kCFBooleanTrue сияқты кіші әріп "k" префиксі қосылуы мүмкін. Объектінің инстанция айнымалылары төменгі сызықпен басталатын lowerCamelCase форматында жазылады, мысалы, delegate және tableView. Әдіс атаулары аргументтерді бөлетін нүктелермен бөлінген бірнеше lowerCamelCase бөліктерін пайдаланады, мысалы: application:didFinishLaunchingWithOptions:, stringWithFormat: және isRunning.
Top level entities, including classes, protocols, categories, as well as C constructs that are used in Objective C programs like global variables and functions, are in UpperCamelCase with a short all uppercase prefix denoting namespace, like NSString, UIAppDelegate, NSApp or CGRectMake. Constants may optionally be prefixed with a lowercase letter "k" like kCFBooleanTrue. Instance variables of an object use lowerCamelCase prefixed with an underscore, like delegate and tableView. Method names use multiple lowerCamelCase parts separated by colons that delimit arguments, like: application:didFinishLaunchingWithOptions:, stringWithFormat: and isRunning.
Паскаль, Модула-2 және Оберон
Вирт тілдері Паскаль, Модула 2 және Оберон бағдарламалар, модульдер, тұрақтылар, типтер және процедуралар үшін әдетте үлкен әріптермен немесе жоғарғы КамельКейс идентификаторларын, ал математикалық тұрақтылар, айнымалылар, формальды параметрлер және функциялар үшін кіші әріптермен немесе кіші КамельКейс идентификаторларын қолданады. Кейбір түсіндірмелер идентификаторларда астын сызу және доллар белгілерін қолдаса да, жылан стилі мен макро стиль көбінесе шетелдік API интерфейстерінде қолданумен шектеледі.
Perl (жазу)
Perl өзінің C мұрасынан кейбір ережелерді конвенциялар ретінде қабылдайды. Жергілікті ауқымдағы айнымалылар мен кіші бағдарламалардың атаулары кіші әріптермен және аралық астын сызықтармен жазылады. Жеке пайдалануға арналған кіші бағдарламалар мен айнымалылардың алдына астын сызық қойылады. Пакет айнымалылары әрпінің басы үлкен болып жазылады. Декларацияланған тұрақтылар толығымен үлкен әріптермен жазылады. Пакеттердің атаулары түйе жазу тәсілімен жазылады, бірақ прагмалар – мысалы, strict және mro – кіші әріптермен жазылады.
PHP-де
PHP ұсыныстары PSR 1 (PHP Стандарттық ұсынысы 1) және PSR 12-де қамтылған. PSR 1 бойынша, класс атаулары PascalCase форматында, класс тұрақтылары – MACRO CASE форматында, ал функциялар мен әдістердің атаулары camelCase форматында болуы тиіс.
Python және Ruby
Python және Ruby екеуі де кластың атаулары үшін UpperCamelCase, тұрақтылар үшін БҮКІН ӘРІПТЕРМЕН ЖӘНЕ ТЫҢ БЕЛГІЛЕРМЕН, ал қалған атаулар үшін жылан стилін (snake case) ұсынады. Python-да, егер атау "жеке" деп белгіленсе, онда ол бір немесе екі тың белгісімен басталады. Python-да жеке айнымалылар тек конвенция бойынша сақталады. Атаулар Python түйін сөздерімен келіспеушіліктерді болдырмау үшін тың белгісімен аяқталуы мүмкін. Екі тың белгісімен бастау сыныптарда атауларды өзгертуге қатысты әрекетті өзгертеді. Екі тың белгісімен бастау және аяқтау – Python-дағы "dunder" ("қос тың") әдістері – Python нысандарында арнайы әрекеттерді орындайтын "сиқырлы атаулар" үшін резервтелген.
R
R-дің ресми стильдік нұсқаулығы болмаса да, R сарапашысы Хэдли Уикхэмнің tidyverse стильдік нұсқаулығы көптеген қолданушылар үшін стандартты белгілейді. Бұл нұсқаулық файл атауларында арнайы символдардан қашуды және айнымалылар мен функциялардың атауларында тек сандарды, әріптерді және астын сызуды қолдануды ұсынады, мысалы, модельдерді құру. R.
Раку
Raku Perl-ге ұқсас конвенцияларды қолданады, бірақ идентификатордың ішінде тире немесе апострофты (' немесе жеке тырнақша) пайдалануға рұқсат береді (бірақ екі қатар болмауы керек), егер одан кейін әріптік таңба келсе. Сондықтан Raku бағдарламашылары көбінесе идентификаторларында кебаб-кейсті пайдаланады; мысалы, fish-food және don't-do-that жарамды идентификаторлар болып табылады.
fish food and don't do that are valid identifiers.
Қатты тотығу
Раст типтік псевдонимдер, құрылымдар, белгілер, түзілімдер және түзілім нұсқаларының атаулары үшін UpperCamelCase, тұрақтылар немесе статикалық айнымалылар үшін SCREAMING SNAKE CASE, ал айнымалылар, функциялар және құрылым мүшелерінің атаулары үшін snake case қолдануды ұсынады.
Тез
Swift әр шығарылымымен атау конвенцияларын өзгертті. Бірақ Swift 3.0-дағы маңызды жаңарту айнымалылар мен функция жариялауларда төменгіCamelCase атау конвенцияларын бекітті. Тұрақтылар көбінесе осы форматта жазылатын enum түрлерімен немесе тұрақты параметрлермен анықталады. Кластар және басқа нысан түрлерінің жариялаулары UpperCamelCase болып табылады. Swift 3.0-дан бастап, барлық үшінші тарап API-леріндегі API атаулары мен жариялау конвенцияларын біртектеу үшін тілге нақты атау ережелері енгізілді.