Кіріспе
Бағдарламалау тілінің құралы. Қысқа тұйықтамалы бағалау, минималды бағалау немесе Маккарти бағалауы (Джон Маккарти атымен) – кейбір бағдарламалау тілдеріндегі кейбір бульдік операторлардың семантикасы, онда екінші аргумент тек бірінші аргумент өрнектің мәнін анықтау үшін жеткіліксіз болған жағдайда ғана орындалады немесе бағаланады: Егер AND функциясының бірінші аргументі жалғанға бағаланса, жалпы мән жалған болуы керек; ал егер OR функциясының бірінші аргументі шындыққа бағаланса, жалпы мән дұрыс болуы керек. Жақсылықпен бағалау (lazy evaluation) бар тілдерде (Lisp, Perl, Haskell) бульдік операторлар әдетте қысқа тұйықталады. Басқа тілдерде (Ada, Java, Delphi) қысқа тұйықтамалы және стандартты бульдік операторлардың екеуі де қолжетімді. Нәтижені анықтау үшін екі операндтың да әрқашан қажет болатындықтан, кейбір бульдік операциялар үшін, мысалы, эксклюзивті немесе (XOR) үшін, қысқа тұйықтама жасау мүмкін емес. Қысқа тұйықтамалы операторлар, іс жүзінде, қарапайым арифметикалық операторлар емес, басқару құрылымдары болып табылады, өйткені олар қатаң емес. Императивті тілдерде (әсіресе C және C++), жанама әсерлер маңызды болғанда, қысқа тұйықтамалы операторлар реттілік нүктесін енгізеді: олар екінші аргументті (мүмкіндігінше) өңдеуден бұрын, бірінші аргументті, соның ішінде кез келген жанама әсерлерді толық бағалайды. ALGOL 68 пайдаланушы анықтаған операторлар мен процедураларды жасау үшін процедуралық тәсілдерді қолданды. Қысқа тұйықтамалы операторларды пайдалану мәселелі деп сынға түсті.
Short circuit evaluation, minimal evaluation, or McCarthy evaluation (after John McCarthy) is the semantics of some Boolean operators in some programming languages in which the second argument is executed or evaluated only if the first argument does not suffice to determine the value of the expression: when the first argument of the AND function evaluates to false, the overall value must be false; and when the first argument of the OR function evaluates to true, the overall value must be true. In programming languages with lazy evaluation (Lisp, Perl, Haskell), the usual Boolean operators short circuit. In others (Ada, Java, Delphi), both short circuit and standard Boolean operators are available. For some Boolean operations, like exclusive or (XOR), it is impossible to short circuit, because both operands are always needed to determine a result. Short circuit operators are, in effect, control structures rather than simple arithmetic operators, as they are not strict. In imperative language terms (notably C and C++), where side effects are important, short circuit operators introduce a sequence point: they completely evaluate the first argument, including any side effects, before (optionally) processing the second argument. ALGOL 68 used proceduring to achieve user defined short circuit operators and procedures. The use of short circuit operators has been criticized as problematic:
Анықтама
Қысқа тұйықталуды іске асыратын кез келген бағдарламалау тілінде, `x және y` өрнегі `егер x болса, y болмаса x` шартты өрнегімен тең, ал `x немесе y` өрнегі `егер x болса, x болмаса y` шартты өрнегімен тең. Екі жағдайда да, `x` тек бір рет бағаланады. Жоғарыдағы жалпыланған анықтама, `True` және `False` екі ғана шындық мәнінен өзгеше, бос типті тілдерді де қамтиды, онда қысқа тұйықталу операторлары соңғы бағаланған кіші өрнекті қайтара алады. Бұл төмендегі кестеде "соңғы мән" деп аталады. Қатаң түрде типтелген тіл үшін, Бульдік жағдайда бұл өрнектер тиісінше `егер x болса, y болмаса жалған` және `егер x болса, шын болмаса y` түрінде қарапайымдатылады.
Ресмилендіру
Қысқа тұйықталу логикасы, жанама әсерлерімен немесе оларсыз, Хоар шарты негізінде формалдануы мүмкін. Осының нәтижесінде, қысқа тұйықталу операторлары жоқ операторларды қысқа тұйықталу логикасынан осыған ұқсас бағалау тізбегін алу үшін анықтауға болады.
Оптимизациялауды шектеуден болатын тиімділіктің төмендеуі
Қысқа тұйықталу заманауи орталық процессорларда (CPU) тармақтарды болжауда қателерге алып келуі мүмкін және өнімділікті күрт төмендетуі мүмкін. Назар аударуға лайық мысал – сәулелерді іздеудегі осьтерге қатысты қораптардың қиылысуын анықтайтын жоғары сапалы код. Кейбір компиляторлар мұндай жағдайларды анықтап, одан да жылдам код жасаса да, бағдарламалау тілінің ережелері мұндай оңтайландыруларға кедерес келтіруі мүмкін. 2012 жылғы деректер бойынша, мұндай жағдайларды оңтайландыра алмайтын компилятордың мысалы – Java-ның Hotspot виртуалды машинасы (VM).