Кіріспе

Тек бір мәнге ғана мүмкіндік беретін тип – компьютерлік бағдарламалау және типтер теориясында қолданылатын ұғым. Математикалық логика мен компьютерлік ғылымның типтер теориясы саласындағы бірлік тип – тек бір ғана мәнге мүмкіндік беретін (сондықтан ешқандай ақпарат сақтай алмайтын) тип. Бірлік типке сәйкес келетін тасымалдаушы (негізгі жиын) кез келген бір элементті жиын болуы мүмкін. Кез келген екі мұндай жиынның арасында изоморфизм бар, сондықтан бірлік тип туралы айту және оның мәнінің егжей-тегжейін назардан тыс қалдыру қалыпты жағдай. Бірлік типті 0-түплдің типі деп қарастыруға болады, яғни типтері жоқ көбейтінді. Бірлік тип – типтер және типтелген функциялар категориясындағы соңғы объект. Оны нөлдік немесе бос типпен шатастыруға болмайды, ол ешқандай мәнге жол бермейді және осы категориядағы алғашқы объект болып табылады. Сол сияқты, бульдік тип – екі мәнді тип. Бірлік тип көптеген функционалдық бағдарламалау тілдерінде іске асырылған. Кейбір императивтік бағдарламалау тілдерінде қолданылатын бос тип оның кейбір функцияларын орындайды, бірақ оның тасымалдаушы жиыны бос болғандықтан, оның кейбір шектеулері бар (төменде егжей-тегжейлі сипатталғандай).

Бағдарламалау тілдерінде

Бірнеше компьютерлік бағдарламалау тілдері функцияның нәтиже түрін, жалғыз мақсатпен – жанама әсер тудыру үшін, және аргументтерді қажет етпейтін функцияның аргумент түрін көрсету үшін бірлік түрін ұсынады. Хаскелл, Раст және Элм тілдерінде бірлік түрі деп аталады және оның жалғыз мәні де , болып табылады, бұл 0-тік түбірше интерпретациясын көрсетеді. ML ұрпақтарында (OCaml, Standard ML және F# кіретін) тип бірлік деп аталады, бірақ мәні болып жазылады. Scala-да бірлік түрі Unit деп аталады және оның жалғыз мәні болып жазылады. Common Lisp-те бір мәні бар тип бірлік тип деп аталады, атап айтқанда, символ. Бұл төменгі типпен шатастырылмауы керек. Python-да NoneType деп аталатын тип бар, ол None-тің жалғыз мәніне ғана рұқсат береді. Python-ның міндетті емес статикалық тип белгілемелерінде бұл тип None ретінде көрсетіледі. Swift-те бірлік түрі Void деп аталады немесе және оның жалғыз мәні де , болып табылады, бұл 0-тік түбірше интерпретациясын көрсетеді. Java-да бірлік түрі Void деп аталады және оның жалғыз мәні null. Go-да бірлік түрі struct{} деп жазылады және оның мәні struct{}{}. PHP-де бірлік түрі null деп аталады, оның жалғыз мәні NULL-дің өзі. JavaScript-те Null (оның жалғыз мәні null) және Undefined (оның жалғыз мәні анықталмаған) екеуі де кіріктірілген бірлік түрлері болып табылады. Kotlin-де Unit - жалғыз мәні Unit объектісі болатын бірлік. Ruby-де nil - NilClass класының жалғыз мысалы. C++-да std::monostate бірлік түрі C++17-де қосылды. Бұрын, бос құрылымды пайдалану арқылы, мысалы, struct empty{}; жекеше бірлік түрін анықтауға болады.

Бос орын түрі бірлік түрі ретінде

C, C++, C# және D тілдерінде void функцияның ештеңе қайтармайтынын немесе аргументтерді қабылдамайтынын көрсету үшін қолданылады. C тіліндегі бірлік түрі тұжырымдамалық тұрғыдан мүшесі жоқ құрылымға ұқсас, бірақ C тілінің сипаттамасында мүшесі жоқ құрылымға рұқсат етілмейді (ал C++ тілінде рұқсат етіледі). Оның орнына, 'void' бірлік түрінің кейбір, бірақ барлық емес қасиеттерін имитациялайтын жолмен қолданылады, бұл төменде егжей-тегжейлі сипатталған. Көптеген императивті тілдер сияқты, C тілі мән қайтармайтын функцияларды қабылдайды; мұндай функциялар қайтару түрі ретінде void деп белгіленеді. Мұндай функциялар Паскаль сияқты басқа императивті тілдерде процедуралар деп аталады, онда типтік жүйе емес, синтаксистік айырмашылық функциялар мен процедуралар арасында жасалады.

Сақтаудағы айырмашылық

Екінші маңызды айырмашылығы – бос түр ерекше және C/C++ тіліндегі құрылымдарда немесе сыныптарда, яғни жазба түрлерінде сақталмайды. Керісінше, функционалдық бағдарламалау тілдеріндегі жазбаларда бірлік түрін сақтауға болады, яғни ол өрістің түрі ретінде қолданылуы мүмкін; C++ тіліндегі бірлік түрінің жоғарыда көрсетілген реализациясы да сақталуы мүмкін. Бұл мүмкіндік пайдасыз сияқты көрінсе де, мысалы, жиынтықты бірлік түріне сәйкес карта ретінде әдемі түрде іске асыруға мүмкіндік береді. Бірлік түрі болмаған жағдайда, әр кілт үшін басқа түрдегі кез келген мәнді сақтау арқылы да жиынтықты осылай іске асыруға болады.