Кіріспе
Тек бір мәнге ғана мүмкіндік беретін тип – компьютерлік бағдарламалау және типтер теориясында қолданылатын ұғым. Математикалық логика мен компьютерлік ғылымның типтер теориясы саласындағы бірлік тип – тек бір ғана мәнге мүмкіндік беретін (сондықтан ешқандай ақпарат сақтай алмайтын) тип. Бірлік типке сәйкес келетін тасымалдаушы (негізгі жиын) кез келген бір элементті жиын болуы мүмкін. Кез келген екі мұндай жиынның арасында изоморфизм бар, сондықтан бірлік тип туралы айту және оның мәнінің егжей-тегжейін назардан тыс қалдыру қалыпты жағдай. Бірлік типті 0-түплдің типі деп қарастыруға болады, яғни типтері жоқ көбейтінді. Бірлік тип – типтер және типтелген функциялар категориясындағы соңғы объект. Оны нөлдік немесе бос типпен шатастыруға болмайды, ол ешқандай мәнге жол бермейді және осы категориядағы алғашқы объект болып табылады. Сол сияқты, бульдік тип – екі мәнді тип. Бірлік тип көптеген функционалдық бағдарламалау тілдерінде іске асырылған. Кейбір императивтік бағдарламалау тілдерінде қолданылатын бос тип оның кейбір функцияларын орындайды, бірақ оның тасымалдаушы жиыны бос болғандықтан, оның кейбір шектеулері бар (төменде егжей-тегжейлі сипатталғандай).
the notion used in computer programming and type theory
In the area of mathematical logic and computer science known as type theory, a unit type is a type that allows only one value (and thus can hold no information). The carrier (underlying set) associated with a unit type can be any singleton set. There is an isomorphism between any two such sets, so it is customary to talk about the unit type and ignore the details of its value. One may also regard the unit type as the type of 0 tuples, i. e. the product of no types. The unit type is the terminal object in the category of types and typed functions. It should not be confused with the zero or empty type, which allows no values and is the initial object in this category. Similarly, the Boolean is the type with two values. The unit type is implemented in most functional programming languages. The void type that is used in some imperative programming languages serves some of its functions, but because its carrier set is empty, it has some limitations (as detailed below).
Бағдарламалау тілдерінде
Бірнеше компьютерлік бағдарламалау тілдері функцияның нәтиже түрін, жалғыз мақсатпен – жанама әсер тудыру үшін, және аргументтерді қажет етпейтін функцияның аргумент түрін көрсету үшін бірлік түрін ұсынады. Хаскелл, Раст және Элм тілдерінде бірлік түрі деп аталады және оның жалғыз мәні де , болып табылады, бұл 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++ тіліндегі бірлік түрінің жоғарыда көрсетілген реализациясы да сақталуы мүмкін. Бұл мүмкіндік пайдасыз сияқты көрінсе де, мысалы, жиынтықты бірлік түріне сәйкес карта ретінде әдемі түрде іске асыруға мүмкіндік береді. Бірлік түрі болмаған жағдайда, әр кілт үшін басқа түрдегі кез келген мәнді сақтау арқылы да жиынтықты осылай іске асыруға болады.