CINXE.COM
Short-circuit evaluation - Wikipedia
<!DOCTYPE html> <html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available" lang="en" dir="ltr"> <head> <meta charset="UTF-8"> <title>Short-circuit evaluation - Wikipedia</title> <script>(function(){var className="client-js vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-sticky-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-1 vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-1 vector-feature-night-mode-enabled skin-theme-clientpref-day vector-toc-available";var cookie=document.cookie.match(/(?:^|; )enwikimwclientpreferences=([^;]+)/);if(cookie){cookie[1].split('%2C').forEach(function(pref){className=className.replace(new RegExp('(^| )'+pref.replace(/-clientpref-\w+$|[^\w-]+/g,'')+'-clientpref-\\w+( |$)'),'$1'+pref+'$2');});}document.documentElement.className=className;}());RLCONF={"wgBreakFrames":false,"wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy", "wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgRequestId":"67af7bf8-54d4-46ff-b17e-0568f55c12d5","wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"Short-circuit_evaluation","wgTitle":"Short-circuit evaluation","wgCurRevisionId":1221229846,"wgRevisionId":1221229846,"wgArticleId":704018,"wgIsArticle":true,"wgIsRedirect":false,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Articles with short description","Short description is different from Wikidata","Articles needing additional references from August 2013","All articles needing additional references","Wikipedia articles needing clarification from November 2010","All articles with unsourced statements","Articles with unsourced statements from October 2016","Articles with example C code","Articles with example Perl code","Compiler optimizations","Conditional constructs", "Evaluation strategy","Implementation of functional programming languages"],"wgPageViewLanguage":"en","wgPageContentLanguage":"en","wgPageContentModel":"wikitext","wgRelevantPageName":"Short-circuit_evaluation","wgRelevantArticleId":704018,"wgIsProbablyEditable":true,"wgRelevantPageIsProbablyEditable":true,"wgRestrictionEdit":[],"wgRestrictionMove":[],"wgNoticeProject":"wikipedia","wgCiteReferencePreviewsActive":false,"wgFlaggedRevsParams":{"tags":{"status":{"levels":1}}},"wgMediaViewerOnClick":true,"wgMediaViewerEnabledByDefault":true,"wgPopupsFlags":0,"wgVisualEditor":{"pageLanguageCode":"en","pageLanguageDir":"ltr","pageVariantFallbacks":"en"},"wgMFDisplayWikibaseDescriptions":{"search":true,"watchlist":true,"tagline":false,"nearby":true},"wgWMESchemaEditAttemptStepOversample":false,"wgWMEPageLength":20000,"wgRelatedArticlesCompat":[],"wgCentralAuthMobileDomain":false,"wgEditSubmitButtonLabelPublish":true,"wgULSPosition":"interlanguage","wgULSisCompactLinksEnabled":false, "wgVector2022LanguageInHeader":true,"wgULSisLanguageSelectorEmpty":false,"wgWikibaseItemId":"Q605499","wgCheckUserClientHintsHeadersJsApi":["brands","architecture","bitness","fullVersionList","mobile","model","platform","platformVersion"],"GEHomepageSuggestedEditsEnableTopics":true,"wgGETopicsMatchModeEnabled":false,"wgGEStructuredTaskRejectionReasonTextInputEnabled":false,"wgGELevelingUpEnabledForUser":false};RLSTATE={"ext.globalCssJs.user.styles":"ready","site.styles":"ready","user.styles":"ready","ext.globalCssJs.user":"ready","user":"ready","user.options":"loading","ext.cite.styles":"ready","ext.pygments":"ready","skins.vector.search.codex.styles":"ready","skins.vector.styles":"ready","skins.vector.icons":"ready","jquery.makeCollapsible.styles":"ready","ext.wikimediamessages.styles":"ready","ext.visualEditor.desktopArticleTarget.noscript":"ready","ext.uls.interlanguage":"ready","wikibase.client.init":"ready","ext.wikimediaBadges":"ready"};RLPAGEMODULES=["ext.cite.ux-enhancements", "ext.pygments.view","site","mediawiki.page.ready","jquery.makeCollapsible","mediawiki.toc","skins.vector.js","ext.centralNotice.geoIP","ext.centralNotice.startUp","ext.gadget.ReferenceTooltips","ext.gadget.switcher","ext.urlShortener.toolbar","ext.centralauth.centralautologin","mmv.bootstrap","ext.popups","ext.visualEditor.desktopArticleTarget.init","ext.visualEditor.targetLoader","ext.echo.centralauth","ext.eventLogging","ext.wikimediaEvents","ext.navigationTiming","ext.uls.interface","ext.cx.eventlogging.campaigns","ext.cx.uls.quick.actions","wikibase.client.vector-2022","ext.checkUser.clientHints","ext.growthExperiments.SuggestedEditSession","wikibase.sidebar.tracking"];</script> <script>(RLQ=window.RLQ||[]).push(function(){mw.loader.impl(function(){return["user.options@12s5i",function($,jQuery,require,module){mw.user.tokens.set({"patrolToken":"+\\","watchToken":"+\\","csrfToken":"+\\"}); }];});});</script> <link rel="stylesheet" href="/w/load.php?lang=en&modules=ext.cite.styles%7Cext.pygments%2CwikimediaBadges%7Cext.uls.interlanguage%7Cext.visualEditor.desktopArticleTarget.noscript%7Cext.wikimediamessages.styles%7Cjquery.makeCollapsible.styles%7Cskins.vector.icons%2Cstyles%7Cskins.vector.search.codex.styles%7Cwikibase.client.init&only=styles&skin=vector-2022"> <script async="" src="/w/load.php?lang=en&modules=startup&only=scripts&raw=1&skin=vector-2022"></script> <meta name="ResourceLoaderDynamicStyles" content=""> <link rel="stylesheet" href="/w/load.php?lang=en&modules=site.styles&only=styles&skin=vector-2022"> <meta name="generator" content="MediaWiki 1.44.0-wmf.4"> <meta name="referrer" content="origin"> <meta name="referrer" content="origin-when-cross-origin"> <meta name="robots" content="max-image-preview:standard"> <meta name="format-detection" content="telephone=no"> <meta name="viewport" content="width=1120"> <meta property="og:title" content="Short-circuit evaluation - Wikipedia"> <meta property="og:type" content="website"> <link rel="preconnect" href="//upload.wikimedia.org"> <link rel="alternate" media="only screen and (max-width: 640px)" href="//en.m.wikipedia.org/wiki/Short-circuit_evaluation"> <link rel="alternate" type="application/x-wiki" title="Edit this page" href="/w/index.php?title=Short-circuit_evaluation&action=edit"> <link rel="apple-touch-icon" href="/static/apple-touch/wikipedia.png"> <link rel="icon" href="/static/favicon/wikipedia.ico"> <link rel="search" type="application/opensearchdescription+xml" href="/w/rest.php/v1/search" title="Wikipedia (en)"> <link rel="EditURI" type="application/rsd+xml" href="//en.wikipedia.org/w/api.php?action=rsd"> <link rel="canonical" href="https://en.wikipedia.org/wiki/Short-circuit_evaluation"> <link rel="license" href="https://creativecommons.org/licenses/by-sa/4.0/deed.en"> <link rel="alternate" type="application/atom+xml" title="Wikipedia Atom feed" href="/w/index.php?title=Special:RecentChanges&feed=atom"> <link rel="dns-prefetch" href="//meta.wikimedia.org" /> <link rel="dns-prefetch" href="//login.wikimedia.org"> </head> <body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject mw-editable page-Short-circuit_evaluation rootpage-Short-circuit_evaluation skin-vector-2022 action-view"><a class="mw-jump-link" href="#bodyContent">Jump to content</a> <div class="vector-header-container"> <header class="vector-header mw-header"> <div class="vector-header-start"> <nav class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-dropdown" class="vector-dropdown vector-main-menu-dropdown vector-button-flush-left vector-button-flush-right" > <input type="checkbox" id="vector-main-menu-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-main-menu-dropdown" class="vector-dropdown-checkbox " aria-label="Main menu" > <label id="vector-main-menu-dropdown-label" for="vector-main-menu-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-menu mw-ui-icon-wikimedia-menu"></span> <span class="vector-dropdown-label-text">Main menu</span> </label> <div class="vector-dropdown-content"> <div id="vector-main-menu-unpinned-container" class="vector-unpinned-container"> <div id="vector-main-menu" class="vector-main-menu vector-pinnable-element"> <div class="vector-pinnable-header vector-main-menu-pinnable-header vector-pinnable-header-unpinned" data-feature-name="main-menu-pinned" data-pinnable-element-id="vector-main-menu" data-pinned-container-id="vector-main-menu-pinned-container" data-unpinned-container-id="vector-main-menu-unpinned-container" > <div class="vector-pinnable-header-label">Main menu</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-main-menu.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-main-menu.unpin">hide</button> </div> <div id="p-navigation" class="vector-menu mw-portlet mw-portlet-navigation" > <div class="vector-menu-heading"> Navigation </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-mainpage-description" class="mw-list-item"><a href="/wiki/Main_Page" title="Visit the main page [z]" accesskey="z"><span>Main page</span></a></li><li id="n-contents" class="mw-list-item"><a href="/wiki/Wikipedia:Contents" title="Guides to browsing Wikipedia"><span>Contents</span></a></li><li id="n-currentevents" class="mw-list-item"><a href="/wiki/Portal:Current_events" title="Articles related to current events"><span>Current events</span></a></li><li id="n-randompage" class="mw-list-item"><a href="/wiki/Special:Random" title="Visit a randomly selected article [x]" accesskey="x"><span>Random article</span></a></li><li id="n-aboutsite" class="mw-list-item"><a href="/wiki/Wikipedia:About" title="Learn about Wikipedia and how it works"><span>About Wikipedia</span></a></li><li id="n-contactpage" class="mw-list-item"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us" title="How to contact Wikipedia"><span>Contact us</span></a></li> </ul> </div> </div> <div id="p-interaction" class="vector-menu mw-portlet mw-portlet-interaction" > <div class="vector-menu-heading"> Contribute </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="n-help" class="mw-list-item"><a href="/wiki/Help:Contents" title="Guidance on how to use and edit Wikipedia"><span>Help</span></a></li><li id="n-introduction" class="mw-list-item"><a href="/wiki/Help:Introduction" title="Learn how to edit Wikipedia"><span>Learn to edit</span></a></li><li id="n-portal" class="mw-list-item"><a href="/wiki/Wikipedia:Community_portal" title="The hub for editors"><span>Community portal</span></a></li><li id="n-recentchanges" class="mw-list-item"><a href="/wiki/Special:RecentChanges" title="A list of recent changes to Wikipedia [r]" accesskey="r"><span>Recent changes</span></a></li><li id="n-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_upload_wizard" title="Add images or other media for use on Wikipedia"><span>Upload file</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> <a href="/wiki/Main_Page" class="mw-logo"> <img class="mw-logo-icon" src="/static/images/icons/wikipedia.png" alt="" aria-hidden="true" height="50" width="50"> <span class="mw-logo-container skin-invert"> <img class="mw-logo-wordmark" alt="Wikipedia" src="/static/images/mobile/copyright/wikipedia-wordmark-en.svg" style="width: 7.5em; height: 1.125em;"> <img class="mw-logo-tagline" alt="The Free Encyclopedia" src="/static/images/mobile/copyright/wikipedia-tagline-en.svg" width="117" height="13" style="width: 7.3125em; height: 0.8125em;"> </span> </a> </div> <div class="vector-header-end"> <div id="p-search" role="search" class="vector-search-box-vue vector-search-box-collapses vector-search-box-show-thumbnail vector-search-box-auto-expand-width vector-search-box"> <a href="/wiki/Special:Search" class="cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only search-toggle" title="Search Wikipedia [f]" accesskey="f"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span> <span>Search</span> </a> <div class="vector-typeahead-search-container"> <div class="cdx-typeahead-search cdx-typeahead-search--show-thumbnail cdx-typeahead-search--auto-expand-width"> <form action="/w/index.php" id="searchform" class="cdx-search-input cdx-search-input--has-end-button"> <div id="simpleSearch" class="cdx-search-input__input-wrapper" data-search-loc="header-moved"> <div class="cdx-text-input cdx-text-input--has-start-icon"> <input class="cdx-text-input__input" type="search" name="search" placeholder="Search Wikipedia" aria-label="Search Wikipedia" autocapitalize="sentences" title="Search Wikipedia [f]" accesskey="f" id="searchInput" > <span class="cdx-text-input__icon cdx-text-input__start-icon"></span> </div> <input type="hidden" name="title" value="Special:Search"> </div> <button class="cdx-button cdx-search-input__end-button">Search</button> </form> </div> </div> </div> <nav class="vector-user-links vector-user-links-wide" aria-label="Personal tools"> <div class="vector-user-links-main"> <div id="p-vector-user-menu-preferences" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-userpage" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-dropdown" class="vector-dropdown " title="Change the appearance of the page's font size, width, and color" > <input type="checkbox" id="vector-appearance-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-appearance-dropdown" class="vector-dropdown-checkbox " aria-label="Appearance" > <label id="vector-appearance-dropdown-label" for="vector-appearance-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span class="vector-dropdown-label-text">Appearance</span> </label> <div class="vector-dropdown-content"> <div id="vector-appearance-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <div id="p-vector-user-menu-notifications" class="vector-menu mw-portlet emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> <div id="p-vector-user-menu-overflow" class="vector-menu mw-portlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en" class=""><span>Donate</span></a> </li> <li id="pt-createaccount-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:CreateAccount&returnto=Short-circuit+evaluation" title="You are encouraged to create an account and log in; however, it is not mandatory" class=""><span>Create account</span></a> </li> <li id="pt-login-2" class="user-links-collapsible-item mw-list-item user-links-collapsible-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogin&returnto=Short-circuit+evaluation" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o" class=""><span>Log in</span></a> </li> </ul> </div> </div> </div> <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-button-flush-right vector-user-menu-logged-out" title="Log in and more options" > <input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox " aria-label="Personal tools" > <label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-ellipsis mw-ui-icon-wikimedia-ellipsis"></span> <span class="vector-dropdown-label-text">Personal tools</span> </label> <div class="vector-dropdown-content"> <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal user-links-collapsible-item" title="User menu" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-sitesupport" class="user-links-collapsible-item mw-list-item"><a href="https://donate.wikimedia.org/wiki/Special:FundraiserRedirector?utm_source=donate&utm_medium=sidebar&utm_campaign=C13_en.wikipedia.org&uselang=en"><span>Donate</span></a></li><li id="pt-createaccount" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:CreateAccount&returnto=Short-circuit+evaluation" title="You are encouraged to create an account and log in; however, it is not mandatory"><span class="vector-icon mw-ui-icon-userAdd mw-ui-icon-wikimedia-userAdd"></span> <span>Create account</span></a></li><li id="pt-login" class="user-links-collapsible-item mw-list-item"><a href="/w/index.php?title=Special:UserLogin&returnto=Short-circuit+evaluation" title="You're encouraged to log in; however, it's not mandatory. [o]" accesskey="o"><span class="vector-icon mw-ui-icon-logIn mw-ui-icon-wikimedia-logIn"></span> <span>Log in</span></a></li> </ul> </div> </div> <div id="p-user-menu-anon-editor" class="vector-menu mw-portlet mw-portlet-user-menu-anon-editor" > <div class="vector-menu-heading"> Pages for logged out editors <a href="/wiki/Help:Introduction" aria-label="Learn more about editing"><span>learn more</span></a> </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="pt-anoncontribs" class="mw-list-item"><a href="/wiki/Special:MyContributions" title="A list of edits made from this IP address [y]" accesskey="y"><span>Contributions</span></a></li><li id="pt-anontalk" class="mw-list-item"><a href="/wiki/Special:MyTalk" title="Discussion about edits from this IP address [n]" accesskey="n"><span>Talk</span></a></li> </ul> </div> </div> </div> </div> </nav> </div> </header> </div> <div class="mw-page-container"> <div class="mw-page-container-inner"> <div class="vector-sitenotice-container"> <div id="siteNotice"><!-- CentralNotice --></div> </div> <div class="vector-column-start"> <div class="vector-main-menu-container"> <div id="mw-navigation"> <nav id="mw-panel" class="vector-main-menu-landmark" aria-label="Site"> <div id="vector-main-menu-pinned-container" class="vector-pinned-container"> </div> </nav> </div> </div> <div class="vector-sticky-pinned-container"> <nav id="mw-panel-toc" aria-label="Contents" data-event-name="ui.sidebar-toc" class="mw-table-of-contents-container vector-toc-landmark"> <div id="vector-toc-pinned-container" class="vector-pinned-container"> <div id="vector-toc" class="vector-toc vector-pinnable-element"> <div class="vector-pinnable-header vector-toc-pinnable-header vector-pinnable-header-pinned" data-feature-name="toc-pinned" data-pinnable-element-id="vector-toc" > <h2 class="vector-pinnable-header-label">Contents</h2> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-toc.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-toc.unpin">hide</button> </div> <ul class="vector-toc-contents" id="mw-panel-toc-list"> <li id="toc-mw-content-text" class="vector-toc-list-item vector-toc-level-1"> <a href="#" class="vector-toc-link"> <div class="vector-toc-text">(Top)</div> </a> </li> <li id="toc-Definition" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Definition"> <div class="vector-toc-text"> <span class="vector-toc-numb">1</span> <span>Definition</span> </div> </a> <button aria-controls="toc-Definition-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Definition subsection</span> </button> <ul id="toc-Definition-sublist" class="vector-toc-list"> <li id="toc-Precedence" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Precedence"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.1</span> <span>Precedence</span> </div> </a> <ul id="toc-Precedence-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Formalization" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Formalization"> <div class="vector-toc-text"> <span class="vector-toc-numb">1.2</span> <span>Formalization</span> </div> </a> <ul id="toc-Formalization-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Support_in_common_programming_and_scripting_languages" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Support_in_common_programming_and_scripting_languages"> <div class="vector-toc-text"> <span class="vector-toc-numb">2</span> <span>Support in common programming and scripting languages</span> </div> </a> <ul id="toc-Support_in_common_programming_and_scripting_languages-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Common_use" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Common_use"> <div class="vector-toc-text"> <span class="vector-toc-numb">3</span> <span>Common use</span> </div> </a> <button aria-controls="toc-Common_use-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Common use subsection</span> </button> <ul id="toc-Common_use-sublist" class="vector-toc-list"> <li id="toc-Avoiding_undesired_side_effects_of_the_second_argument" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Avoiding_undesired_side_effects_of_the_second_argument"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.1</span> <span>Avoiding undesired side effects of the second argument</span> </div> </a> <ul id="toc-Avoiding_undesired_side_effects_of_the_second_argument-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Idiomatic_conditional_construct" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Idiomatic_conditional_construct"> <div class="vector-toc-text"> <span class="vector-toc-numb">3.2</span> <span>Idiomatic conditional construct</span> </div> </a> <ul id="toc-Idiomatic_conditional_construct-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-Possible_problems" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#Possible_problems"> <div class="vector-toc-text"> <span class="vector-toc-numb">4</span> <span>Possible problems</span> </div> </a> <button aria-controls="toc-Possible_problems-sublist" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-toc-toggle"> <span class="vector-icon mw-ui-icon-wikimedia-expand"></span> <span>Toggle Possible problems subsection</span> </button> <ul id="toc-Possible_problems-sublist" class="vector-toc-list"> <li id="toc-Untested_second_condition_leads_to_unperformed_side_effect" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Untested_second_condition_leads_to_unperformed_side_effect"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.1</span> <span>Untested second condition leads to unperformed side effect</span> </div> </a> <ul id="toc-Untested_second_condition_leads_to_unperformed_side_effect-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-Reduced_efficiency_due_to_constraining_optimizations" class="vector-toc-list-item vector-toc-level-2"> <a class="vector-toc-link" href="#Reduced_efficiency_due_to_constraining_optimizations"> <div class="vector-toc-text"> <span class="vector-toc-numb">4.2</span> <span>Reduced efficiency due to constraining optimizations</span> </div> </a> <ul id="toc-Reduced_efficiency_due_to_constraining_optimizations-sublist" class="vector-toc-list"> </ul> </li> </ul> </li> <li id="toc-See_also" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#See_also"> <div class="vector-toc-text"> <span class="vector-toc-numb">5</span> <span>See also</span> </div> </a> <ul id="toc-See_also-sublist" class="vector-toc-list"> </ul> </li> <li id="toc-References" class="vector-toc-list-item vector-toc-level-1 vector-toc-list-item-expanded"> <a class="vector-toc-link" href="#References"> <div class="vector-toc-text"> <span class="vector-toc-numb">6</span> <span>References</span> </div> </a> <ul id="toc-References-sublist" class="vector-toc-list"> </ul> </li> </ul> </div> </div> </nav> </div> </div> <div class="mw-content-container"> <main id="content" class="mw-body"> <header class="mw-body-header vector-page-titlebar"> <nav aria-label="Contents" class="vector-toc-landmark"> <div id="vector-page-titlebar-toc" class="vector-dropdown vector-page-titlebar-toc vector-button-flush-left" > <input type="checkbox" id="vector-page-titlebar-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-titlebar-toc" class="vector-dropdown-checkbox " aria-label="Toggle the table of contents" > <label id="vector-page-titlebar-toc-label" for="vector-page-titlebar-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--icon-only " aria-hidden="true" ><span class="vector-icon mw-ui-icon-listBullet mw-ui-icon-wikimedia-listBullet"></span> <span class="vector-dropdown-label-text">Toggle the table of contents</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-titlebar-toc-unpinned-container" class="vector-unpinned-container"> </div> </div> </div> </nav> <h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Short-circuit evaluation</span></h1> <div id="p-lang-btn" class="vector-dropdown mw-portlet mw-portlet-lang" > <input type="checkbox" id="p-lang-btn-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-p-lang-btn" class="vector-dropdown-checkbox mw-interlanguage-selector" aria-label="Go to an article in another language. Available in 10 languages" > <label id="p-lang-btn-label" for="p-lang-btn-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet cdx-button--action-progressive mw-portlet-lang-heading-10" aria-hidden="true" ><span class="vector-icon mw-ui-icon-language-progressive mw-ui-icon-wikimedia-language-progressive"></span> <span class="vector-dropdown-label-text">10 languages</span> </label> <div class="vector-dropdown-content"> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li class="interlanguage-link interwiki-cs mw-list-item"><a href="https://cs.wikipedia.org/wiki/Zkr%C3%A1cen%C3%A9_vyhodnocov%C3%A1n%C3%AD" title="Zkrácené vyhodnocování – Czech" lang="cs" hreflang="cs" data-title="Zkrácené vyhodnocování" data-language-autonym="Čeština" data-language-local-name="Czech" class="interlanguage-link-target"><span>Čeština</span></a></li><li class="interlanguage-link interwiki-de mw-list-item"><a href="https://de.wikipedia.org/wiki/Kurzschlussauswertung" title="Kurzschlussauswertung – German" lang="de" hreflang="de" data-title="Kurzschlussauswertung" data-language-autonym="Deutsch" data-language-local-name="German" class="interlanguage-link-target"><span>Deutsch</span></a></li><li class="interlanguage-link interwiki-es mw-list-item"><a href="https://es.wikipedia.org/wiki/Evaluaci%C3%B3n_de_cortocircuito" title="Evaluación de cortocircuito – Spanish" lang="es" hreflang="es" data-title="Evaluación de cortocircuito" data-language-autonym="Español" data-language-local-name="Spanish" class="interlanguage-link-target"><span>Español</span></a></li><li class="interlanguage-link interwiki-fa mw-list-item"><a href="https://fa.wikipedia.org/wiki/%D8%A7%D8%B1%D8%B2%DB%8C%D8%A7%D8%A8%DB%8C_%D8%A7%D8%AA%D8%B5%D8%A7%D9%84_%DA%A9%D9%88%D8%AA%D8%A7%D9%87" title="ارزیابی اتصال کوتاه – Persian" lang="fa" hreflang="fa" data-title="ارزیابی اتصال کوتاه" data-language-autonym="فارسی" data-language-local-name="Persian" class="interlanguage-link-target"><span>فارسی</span></a></li><li class="interlanguage-link interwiki-it mw-list-item"><a href="https://it.wikipedia.org/wiki/Valutazione_a_corto_circuito" title="Valutazione a corto circuito – Italian" lang="it" hreflang="it" data-title="Valutazione a corto circuito" data-language-autonym="Italiano" data-language-local-name="Italian" class="interlanguage-link-target"><span>Italiano</span></a></li><li class="interlanguage-link interwiki-ja mw-list-item"><a href="https://ja.wikipedia.org/wiki/%E7%9F%AD%E7%B5%A1%E8%A9%95%E4%BE%A1" title="短絡評価 – Japanese" lang="ja" hreflang="ja" data-title="短絡評価" data-language-autonym="日本語" data-language-local-name="Japanese" class="interlanguage-link-target"><span>日本語</span></a></li><li class="interlanguage-link interwiki-pt mw-list-item"><a href="https://pt.wikipedia.org/wiki/Avalia%C3%A7%C3%A3o_de_curto-circuito" title="Avaliação de curto-circuito – Portuguese" lang="pt" hreflang="pt" data-title="Avaliação de curto-circuito" data-language-autonym="Português" data-language-local-name="Portuguese" class="interlanguage-link-target"><span>Português</span></a></li><li class="interlanguage-link interwiki-ru mw-list-item"><a href="https://ru.wikipedia.org/wiki/%D0%92%D1%8B%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D0%BE_%D0%BA%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%BE%D0%B9_%D1%81%D1%85%D0%B5%D0%BC%D0%B5" title="Вычисления по короткой схеме – Russian" lang="ru" hreflang="ru" data-title="Вычисления по короткой схеме" data-language-autonym="Русский" data-language-local-name="Russian" class="interlanguage-link-target"><span>Русский</span></a></li><li class="interlanguage-link interwiki-uk mw-list-item"><a href="https://uk.wikipedia.org/wiki/%D0%9E%D0%B1%D1%87%D0%B8%D1%81%D0%BB%D0%B5%D0%BD%D0%BD%D1%8F_%D0%B7%D0%B0_%D0%BA%D0%BE%D1%80%D0%BE%D1%82%D0%BA%D0%BE%D1%8E_%D1%81%D1%85%D0%B5%D0%BC%D0%BE%D1%8E" title="Обчислення за короткою схемою – Ukrainian" lang="uk" hreflang="uk" data-title="Обчислення за короткою схемою" data-language-autonym="Українська" data-language-local-name="Ukrainian" class="interlanguage-link-target"><span>Українська</span></a></li><li class="interlanguage-link interwiki-zh mw-list-item"><a href="https://zh.wikipedia.org/wiki/%E7%9F%AD%E8%B7%AF%E6%B1%82%E5%80%BC" title="短路求值 – Chinese" lang="zh" hreflang="zh" data-title="短路求值" data-language-autonym="中文" data-language-local-name="Chinese" class="interlanguage-link-target"><span>中文</span></a></li> </ul> <div class="after-portlet after-portlet-lang"><span class="wb-langlinks-edit wb-langlinks-link"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q605499#sitelinks-wikipedia" title="Edit interlanguage links" class="wbc-editpage">Edit links</a></span></div> </div> </div> </div> </header> <div class="vector-page-toolbar"> <div class="vector-page-toolbar-container"> <div id="left-navigation"> <nav aria-label="Namespaces"> <div id="p-associated-pages" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-associated-pages" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-nstab-main" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Short-circuit_evaluation" title="View the content page [c]" accesskey="c"><span>Article</span></a></li><li id="ca-talk" class="vector-tab-noicon mw-list-item"><a href="/wiki/Talk:Short-circuit_evaluation" rel="discussion" title="Discuss improvements to the content page [t]" accesskey="t"><span>Talk</span></a></li> </ul> </div> </div> <div id="vector-variants-dropdown" class="vector-dropdown emptyPortlet" > <input type="checkbox" id="vector-variants-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-variants-dropdown" class="vector-dropdown-checkbox " aria-label="Change language variant" > <label id="vector-variants-dropdown-label" for="vector-variants-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">English</span> </label> <div class="vector-dropdown-content"> <div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants emptyPortlet" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> </ul> </div> </div> </div> </div> </nav> </div> <div id="right-navigation" class="vector-collapsible"> <nav aria-label="Views"> <div id="p-views" class="vector-menu vector-menu-tabs mw-portlet mw-portlet-views" > <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-view" class="selected vector-tab-noicon mw-list-item"><a href="/wiki/Short-circuit_evaluation"><span>Read</span></a></li><li id="ca-edit" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Short-circuit_evaluation&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-history" class="vector-tab-noicon mw-list-item"><a href="/w/index.php?title=Short-circuit_evaluation&action=history" title="Past revisions of this page [h]" accesskey="h"><span>View history</span></a></li> </ul> </div> </div> </nav> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-dropdown" class="vector-dropdown vector-page-tools-dropdown" > <input type="checkbox" id="vector-page-tools-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-page-tools-dropdown" class="vector-dropdown-checkbox " aria-label="Tools" > <label id="vector-page-tools-dropdown-label" for="vector-page-tools-dropdown-checkbox" class="vector-dropdown-label cdx-button cdx-button--fake-button cdx-button--fake-button--enabled cdx-button--weight-quiet" aria-hidden="true" ><span class="vector-dropdown-label-text">Tools</span> </label> <div class="vector-dropdown-content"> <div id="vector-page-tools-unpinned-container" class="vector-unpinned-container"> <div id="vector-page-tools" class="vector-page-tools vector-pinnable-element"> <div class="vector-pinnable-header vector-page-tools-pinnable-header vector-pinnable-header-unpinned" data-feature-name="page-tools-pinned" data-pinnable-element-id="vector-page-tools" data-pinned-container-id="vector-page-tools-pinned-container" data-unpinned-container-id="vector-page-tools-unpinned-container" > <div class="vector-pinnable-header-label">Tools</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-page-tools.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-page-tools.unpin">hide</button> </div> <div id="p-cactions" class="vector-menu mw-portlet mw-portlet-cactions emptyPortlet vector-has-collapsible-items" title="More options" > <div class="vector-menu-heading"> Actions </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="ca-more-view" class="selected vector-more-collapsible-item mw-list-item"><a href="/wiki/Short-circuit_evaluation"><span>Read</span></a></li><li id="ca-more-edit" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Short-circuit_evaluation&action=edit" title="Edit this page [e]" accesskey="e"><span>Edit</span></a></li><li id="ca-more-history" class="vector-more-collapsible-item mw-list-item"><a href="/w/index.php?title=Short-circuit_evaluation&action=history"><span>View history</span></a></li> </ul> </div> </div> <div id="p-tb" class="vector-menu mw-portlet mw-portlet-tb" > <div class="vector-menu-heading"> General </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-whatlinkshere" class="mw-list-item"><a href="/wiki/Special:WhatLinksHere/Short-circuit_evaluation" title="List of all English Wikipedia pages containing links to this page [j]" accesskey="j"><span>What links here</span></a></li><li id="t-recentchangeslinked" class="mw-list-item"><a href="/wiki/Special:RecentChangesLinked/Short-circuit_evaluation" rel="nofollow" title="Recent changes in pages linked from this page [k]" accesskey="k"><span>Related changes</span></a></li><li id="t-upload" class="mw-list-item"><a href="/wiki/Wikipedia:File_Upload_Wizard" title="Upload files [u]" accesskey="u"><span>Upload file</span></a></li><li id="t-specialpages" class="mw-list-item"><a href="/wiki/Special:SpecialPages" title="A list of all special pages [q]" accesskey="q"><span>Special pages</span></a></li><li id="t-permalink" class="mw-list-item"><a href="/w/index.php?title=Short-circuit_evaluation&oldid=1221229846" title="Permanent link to this revision of this page"><span>Permanent link</span></a></li><li id="t-info" class="mw-list-item"><a href="/w/index.php?title=Short-circuit_evaluation&action=info" title="More information about this page"><span>Page information</span></a></li><li id="t-cite" class="mw-list-item"><a href="/w/index.php?title=Special:CiteThisPage&page=Short-circuit_evaluation&id=1221229846&wpFormIdentifier=titleform" title="Information on how to cite this page"><span>Cite this page</span></a></li><li id="t-urlshortener" class="mw-list-item"><a href="/w/index.php?title=Special:UrlShortener&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FShort-circuit_evaluation"><span>Get shortened URL</span></a></li><li id="t-urlshortener-qrcode" class="mw-list-item"><a href="/w/index.php?title=Special:QrCode&url=https%3A%2F%2Fen.wikipedia.org%2Fwiki%2FShort-circuit_evaluation"><span>Download QR code</span></a></li> </ul> </div> </div> <div id="p-coll-print_export" class="vector-menu mw-portlet mw-portlet-coll-print_export" > <div class="vector-menu-heading"> Print/export </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="coll-download-as-rl" class="mw-list-item"><a href="/w/index.php?title=Special:DownloadAsPdf&page=Short-circuit_evaluation&action=show-download-screen" title="Download this page as a PDF file"><span>Download as PDF</span></a></li><li id="t-print" class="mw-list-item"><a href="/w/index.php?title=Short-circuit_evaluation&printable=yes" title="Printable version of this page [p]" accesskey="p"><span>Printable version</span></a></li> </ul> </div> </div> <div id="p-wikibase-otherprojects" class="vector-menu mw-portlet mw-portlet-wikibase-otherprojects" > <div class="vector-menu-heading"> In other projects </div> <div class="vector-menu-content"> <ul class="vector-menu-content-list"> <li id="t-wikibase" class="wb-otherproject-link wb-otherproject-wikibase-dataitem mw-list-item"><a href="https://www.wikidata.org/wiki/Special:EntityPage/Q605499" title="Structured data on this page hosted by Wikidata [g]" accesskey="g"><span>Wikidata item</span></a></li> </ul> </div> </div> </div> </div> </div> </div> </nav> </div> </div> </div> <div class="vector-column-end"> <div class="vector-sticky-pinned-container"> <nav class="vector-page-tools-landmark" aria-label="Page tools"> <div id="vector-page-tools-pinned-container" class="vector-pinned-container"> </div> </nav> <nav class="vector-appearance-landmark" aria-label="Appearance"> <div id="vector-appearance-pinned-container" class="vector-pinned-container"> <div id="vector-appearance" class="vector-appearance vector-pinnable-element"> <div class="vector-pinnable-header vector-appearance-pinnable-header vector-pinnable-header-pinned" data-feature-name="appearance-pinned" data-pinnable-element-id="vector-appearance" data-pinned-container-id="vector-appearance-pinned-container" data-unpinned-container-id="vector-appearance-unpinned-container" > <div class="vector-pinnable-header-label">Appearance</div> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.vector-appearance.pin">move to sidebar</button> <button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.vector-appearance.unpin">hide</button> </div> </div> </div> </nav> </div> </div> <div id="bodyContent" class="vector-body" aria-labelledby="firstHeading" data-mw-ve-target-container> <div class="vector-body-before-content"> <div class="mw-indicators"> </div> <div id="siteSub" class="noprint">From Wikipedia, the free encyclopedia</div> </div> <div id="contentSub"><div id="mw-content-subtitle"></div></div> <div id="mw-content-text" class="mw-body-content"><div class="mw-content-ltr mw-parser-output" lang="en" dir="ltr"><div class="shortdescription nomobile noexcerpt noprint searchaux" style="display:none">Programming language construct</div> <style data-mw-deduplicate="TemplateStyles:r1236090951">.mw-parser-output .hatnote{font-style:italic}.mw-parser-output div.hatnote{padding-left:1.6em;margin-bottom:0.5em}.mw-parser-output .hatnote i{font-style:normal}.mw-parser-output .hatnote+link+.hatnote{margin-top:-0.5em}@media print{body.ns-0 .mw-parser-output .hatnote{display:none!important}}</style><div role="note" class="hatnote navigation-not-searchable">Not to be confused with <a href="/wiki/Short-circuit_test" title="Short-circuit test">Short-circuit test</a>.</div> <style data-mw-deduplicate="TemplateStyles:r1251242444">.mw-parser-output .ambox{border:1px solid #a2a9b1;border-left:10px solid #36c;background-color:#fbfbfb;box-sizing:border-box}.mw-parser-output .ambox+link+.ambox,.mw-parser-output .ambox+link+style+.ambox,.mw-parser-output .ambox+link+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+style+.ambox,.mw-parser-output .ambox+.mw-empty-elt+link+link+.ambox{margin-top:-1px}html body.mediawiki .mw-parser-output .ambox.mbox-small-left{margin:4px 1em 4px 0;overflow:hidden;width:238px;border-collapse:collapse;font-size:88%;line-height:1.25em}.mw-parser-output .ambox-speedy{border-left:10px solid #b32424;background-color:#fee7e6}.mw-parser-output .ambox-delete{border-left:10px solid #b32424}.mw-parser-output .ambox-content{border-left:10px solid #f28500}.mw-parser-output .ambox-style{border-left:10px solid #fc3}.mw-parser-output .ambox-move{border-left:10px solid #9932cc}.mw-parser-output .ambox-protection{border-left:10px solid #a2a9b1}.mw-parser-output .ambox .mbox-text{border:none;padding:0.25em 0.5em;width:100%}.mw-parser-output .ambox .mbox-image{border:none;padding:2px 0 2px 0.5em;text-align:center}.mw-parser-output .ambox .mbox-imageright{border:none;padding:2px 0.5em 2px 0;text-align:center}.mw-parser-output .ambox .mbox-empty-cell{border:none;padding:0;width:1px}.mw-parser-output .ambox .mbox-image-div{width:52px}@media(min-width:720px){.mw-parser-output .ambox{margin:0 10%}}@media print{body.ns-0 .mw-parser-output .ambox{display:none!important}}</style><table class="box-More_citations_needed plainlinks metadata ambox ambox-content ambox-Refimprove" role="presentation"><tbody><tr><td class="mbox-image"><div class="mbox-image-div"><span typeof="mw:File"><a href="/wiki/File:Question_book-new.svg" class="mw-file-description"><img alt="" src="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/50px-Question_book-new.svg.png" decoding="async" width="50" height="39" class="mw-file-element" srcset="//upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/75px-Question_book-new.svg.png 1.5x, //upload.wikimedia.org/wikipedia/en/thumb/9/99/Question_book-new.svg/100px-Question_book-new.svg.png 2x" data-file-width="512" data-file-height="399" /></a></span></div></td><td class="mbox-text"><div class="mbox-text-span">This article <b>needs additional citations for <a href="/wiki/Wikipedia:Verifiability" title="Wikipedia:Verifiability">verification</a></b>.<span class="hide-when-compact"> Please help <a href="/wiki/Special:EditPage/Short-circuit_evaluation" title="Special:EditPage/Short-circuit evaluation">improve this article</a> by <a href="/wiki/Help:Referencing_for_beginners" title="Help:Referencing for beginners">adding citations to reliable sources</a>. Unsourced material may be challenged and removed.<br /><small><span class="plainlinks"><i>Find sources:</i> <a rel="nofollow" class="external text" href="https://www.google.com/search?as_eq=wikipedia&q=%22Short-circuit+evaluation%22">"Short-circuit evaluation"</a> – <a rel="nofollow" class="external text" href="https://www.google.com/search?tbm=nws&q=%22Short-circuit+evaluation%22+-wikipedia&tbs=ar:1">news</a> <b>·</b> <a rel="nofollow" class="external text" href="https://www.google.com/search?&q=%22Short-circuit+evaluation%22&tbs=bkt:s&tbm=bks">newspapers</a> <b>·</b> <a rel="nofollow" class="external text" href="https://www.google.com/search?tbs=bks:1&q=%22Short-circuit+evaluation%22+-wikipedia">books</a> <b>·</b> <a rel="nofollow" class="external text" href="https://scholar.google.com/scholar?q=%22Short-circuit+evaluation%22">scholar</a> <b>·</b> <a rel="nofollow" class="external text" href="https://www.jstor.org/action/doBasicSearch?Query=%22Short-circuit+evaluation%22&acc=on&wc=on">JSTOR</a></span></small></span> <span class="date-container"><i>(<span class="date">August 2013</span>)</i></span><span class="hide-when-compact"><i> (<small><a href="/wiki/Help:Maintenance_template_removal" title="Help:Maintenance template removal">Learn how and when to remove this message</a></small>)</i></span></div></td></tr></tbody></table> <style data-mw-deduplicate="TemplateStyles:r1129693374">.mw-parser-output .hlist dl,.mw-parser-output .hlist ol,.mw-parser-output .hlist ul{margin:0;padding:0}.mw-parser-output .hlist dd,.mw-parser-output .hlist dt,.mw-parser-output .hlist li{margin:0;display:inline}.mw-parser-output .hlist.inline,.mw-parser-output .hlist.inline dl,.mw-parser-output .hlist.inline ol,.mw-parser-output .hlist.inline ul,.mw-parser-output .hlist dl dl,.mw-parser-output .hlist dl ol,.mw-parser-output .hlist dl ul,.mw-parser-output .hlist ol dl,.mw-parser-output .hlist ol ol,.mw-parser-output .hlist ol ul,.mw-parser-output .hlist ul dl,.mw-parser-output .hlist ul ol,.mw-parser-output .hlist ul ul{display:inline}.mw-parser-output .hlist .mw-empty-li{display:none}.mw-parser-output .hlist dt::after{content:": "}.mw-parser-output .hlist dd::after,.mw-parser-output .hlist li::after{content:" · ";font-weight:bold}.mw-parser-output .hlist dd:last-child::after,.mw-parser-output .hlist dt:last-child::after,.mw-parser-output .hlist li:last-child::after{content:none}.mw-parser-output .hlist dd dd:first-child::before,.mw-parser-output .hlist dd dt:first-child::before,.mw-parser-output .hlist dd li:first-child::before,.mw-parser-output .hlist dt dd:first-child::before,.mw-parser-output .hlist dt dt:first-child::before,.mw-parser-output .hlist dt li:first-child::before,.mw-parser-output .hlist li dd:first-child::before,.mw-parser-output .hlist li dt:first-child::before,.mw-parser-output .hlist li li:first-child::before{content:" (";font-weight:normal}.mw-parser-output .hlist dd dd:last-child::after,.mw-parser-output .hlist dd dt:last-child::after,.mw-parser-output .hlist dd li:last-child::after,.mw-parser-output .hlist dt dd:last-child::after,.mw-parser-output .hlist dt dt:last-child::after,.mw-parser-output .hlist dt li:last-child::after,.mw-parser-output .hlist li dd:last-child::after,.mw-parser-output .hlist li dt:last-child::after,.mw-parser-output .hlist li li:last-child::after{content:")";font-weight:normal}.mw-parser-output .hlist ol{counter-reset:listitem}.mw-parser-output .hlist ol>li{counter-increment:listitem}.mw-parser-output .hlist ol>li::before{content:" "counter(listitem)"\a0 "}.mw-parser-output .hlist dd ol>li:first-child::before,.mw-parser-output .hlist dt ol>li:first-child::before,.mw-parser-output .hlist li ol>li:first-child::before{content:" ("counter(listitem)"\a0 "}</style><style data-mw-deduplicate="TemplateStyles:r1246091330">.mw-parser-output .sidebar{width:22em;float:right;clear:right;margin:0.5em 0 1em 1em;background:var(--background-color-neutral-subtle,#f8f9fa);border:1px solid var(--border-color-base,#a2a9b1);padding:0.2em;text-align:center;line-height:1.4em;font-size:88%;border-collapse:collapse;display:table}body.skin-minerva .mw-parser-output .sidebar{display:table!important;float:right!important;margin:0.5em 0 1em 1em!important}.mw-parser-output .sidebar-subgroup{width:100%;margin:0;border-spacing:0}.mw-parser-output .sidebar-left{float:left;clear:left;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-none{float:none;clear:both;margin:0.5em 1em 1em 0}.mw-parser-output .sidebar-outer-title{padding:0 0.4em 0.2em;font-size:125%;line-height:1.2em;font-weight:bold}.mw-parser-output .sidebar-top-image{padding:0.4em}.mw-parser-output .sidebar-top-caption,.mw-parser-output .sidebar-pretitle-with-top-image,.mw-parser-output .sidebar-caption{padding:0.2em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-pretitle{padding:0.4em 0.4em 0;line-height:1.2em}.mw-parser-output .sidebar-title,.mw-parser-output .sidebar-title-with-pretitle{padding:0.2em 0.8em;font-size:145%;line-height:1.2em}.mw-parser-output .sidebar-title-with-pretitle{padding:0.1em 0.4em}.mw-parser-output .sidebar-image{padding:0.2em 0.4em 0.4em}.mw-parser-output .sidebar-heading{padding:0.1em 0.4em}.mw-parser-output .sidebar-content{padding:0 0.5em 0.4em}.mw-parser-output .sidebar-content-with-subgroup{padding:0.1em 0.4em 0.2em}.mw-parser-output .sidebar-above,.mw-parser-output .sidebar-below{padding:0.3em 0.8em;font-weight:bold}.mw-parser-output .sidebar-collapse .sidebar-above,.mw-parser-output .sidebar-collapse .sidebar-below{border-top:1px solid #aaa;border-bottom:1px solid #aaa}.mw-parser-output .sidebar-navbar{text-align:right;font-size:115%;padding:0 0.4em 0.4em}.mw-parser-output .sidebar-list-title{padding:0 0.4em;text-align:left;font-weight:bold;line-height:1.6em;font-size:105%}.mw-parser-output .sidebar-list-title-c{padding:0 0.4em;text-align:center;margin:0 3.3em}@media(max-width:640px){body.mediawiki .mw-parser-output .sidebar{width:100%!important;clear:both;float:none!important;margin-left:0!important;margin-right:0!important}}body.skin--responsive .mw-parser-output .sidebar a>img{max-width:none!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-night .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-list-title,html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle{background:transparent!important}html.skin-theme-clientpref-os .mw-parser-output .sidebar:not(.notheme) .sidebar-title-with-pretitle a{color:var(--color-progressive)!important}}@media print{body.ns-0 .mw-parser-output .sidebar{display:none!important}}</style><table class="sidebar nomobile nowraplinks"><tbody><tr><th class="sidebar-title"><a href="/wiki/Evaluation_strategy" title="Evaluation strategy">Evaluation strategies</a></th></tr><tr><td class="sidebar-content" style="text-align: left"> <ul><li><a href="/wiki/Lazy_evaluation" title="Lazy evaluation">Lazy evaluation</a></li> <li><a href="/wiki/Partial_evaluation" title="Partial evaluation">Partial evaluation</a></li> <li><a href="/wiki/Remote_evaluation" title="Remote evaluation">Remote evaluation</a></li> <li><a class="mw-selflink selflink">Short-circuit evaluation</a></li></ul></td> </tr><tr><td class="sidebar-navbar"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1239400231">.mw-parser-output .navbar{display:inline;font-size:88%;font-weight:normal}.mw-parser-output .navbar-collapse{float:left;text-align:left}.mw-parser-output .navbar-boxtext{word-spacing:0}.mw-parser-output .navbar ul{display:inline-block;white-space:nowrap;line-height:inherit}.mw-parser-output .navbar-brackets::before{margin-right:-0.125em;content:"[ "}.mw-parser-output .navbar-brackets::after{margin-left:-0.125em;content:" ]"}.mw-parser-output .navbar li{word-spacing:-0.125em}.mw-parser-output .navbar a>span,.mw-parser-output .navbar a>abbr{text-decoration:inherit}.mw-parser-output .navbar-mini abbr{font-variant:small-caps;border-bottom:none;text-decoration:none;cursor:inherit}.mw-parser-output .navbar-ct-full{font-size:114%;margin:0 7em}.mw-parser-output .navbar-ct-mini{font-size:114%;margin:0 4em}html.skin-theme-clientpref-night .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}@media(prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .navbar li a abbr{color:var(--color-base)!important}}@media print{.mw-parser-output .navbar{display:none!important}}</style><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:Evaluation_strategy" title="Template:Evaluation strategy"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:Evaluation_strategy" title="Template talk:Evaluation strategy"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:Evaluation_strategy" title="Special:EditPage/Template:Evaluation strategy"><abbr title="Edit this template">e</abbr></a></li></ul></div></td></tr></tbody></table> <p><b>Short-circuit evaluation</b>, <b>minimal evaluation</b>, or <b>McCarthy evaluation</b> (after <a href="/wiki/John_McCarthy_(computer_scientist)" title="John McCarthy (computer scientist)">John McCarthy</a>) is the semantics of some <a href="/wiki/Logical_connective" title="Logical connective">Boolean operators</a> in some <a href="/wiki/Programming_language" title="Programming language">programming languages</a> 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 <code>AND</code> function evaluates to <code>false</code>, the overall value must be <code>false</code>; and when the first argument of the <code>OR</code> function evaluates to <code>true</code>, the overall value must be <code>true</code>. </p><p>In programming languages with <a href="/wiki/Lazy_evaluation" title="Lazy evaluation">lazy evaluation</a> (<a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>, <a href="/wiki/Perl" title="Perl">Perl</a>, <a href="/wiki/Haskell" title="Haskell">Haskell</a>), the usual <a href="/wiki/Boolean_expression" title="Boolean expression">Boolean operators</a> short-circuit. In others (<a href="/wiki/Ada_(programming_language)" title="Ada (programming language)">Ada</a>, <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>, <a href="/wiki/Delphi_(software)" title="Delphi (software)">Delphi</a>), both short-circuit and standard Boolean operators are available. For some Boolean operations, like <i><a href="/wiki/Exclusive_or" title="Exclusive or">exclusive or</a></i> (XOR), it is impossible to short-circuit, because both operands are always needed to determine a result. </p><p>Short-circuit operators are, in effect, <a href="/wiki/Control_structure" class="mw-redirect" title="Control structure">control structures</a> rather than simple arithmetic operators, as they are not <a href="/wiki/Strict_function" title="Strict function">strict</a>. In <a href="/wiki/Imperative_language" class="mw-redirect" title="Imperative language">imperative language</a> terms (notably <a href="/wiki/C_(programming_language)" title="C (programming language)">C</a> and <a href="/wiki/C%2B%2B" title="C++">C++</a>), where side effects are important, short-circuit operators introduce a <a href="/wiki/Sequence_point" title="Sequence point">sequence point</a>: they completely evaluate the first argument, including any <a href="/wiki/Side_effect_(computer_science)" title="Side effect (computer science)">side effects</a>, before (optionally) processing the second argument. <a href="/wiki/ALGOL_68" title="ALGOL 68">ALGOL 68</a> used <i>proceduring</i> to achieve <i>user-defined</i> short-circuit operators and procedures. </p><p>The use of short-circuit operators has been criticized as problematic: </p> <style data-mw-deduplicate="TemplateStyles:r1244412712">.mw-parser-output .templatequote{overflow:hidden;margin:1em 0;padding:0 32px}.mw-parser-output .templatequotecite{line-height:1.5em;text-align:left;margin-top:0}@media(min-width:500px){.mw-parser-output .templatequotecite{padding-left:1.6em}}</style><blockquote class="templatequote"><p>The conditional connectives — "<u>cand</u>" and "<u>cor</u>" for short — are ... less innocent than they might seem at first sight. For instance, <u>cor</u> does not distribute over <u>cand</u>: compare </p><dl><dd>(A <u>cand</u> B) <u>cor</u> C <i>with</i> (A <u>cor</u> C) <u>cand</u> (B <u>cor</u> C);</dd></dl><p> in the case ¬A ∧ C , the second expression requires B to be defined, the first one does not. Because the conditional connectives thus complicate the formal reasoning about programs, they are better avoided.</p><div class="templatequotecite">— <cite><a href="/wiki/Edsger_W._Dijkstra" title="Edsger W. Dijkstra">Edsger W. Dijkstra</a><sup id="cite_ref-1" class="reference"><a href="#cite_note-1"><span class="cite-bracket">[</span>1<span class="cite-bracket">]</span></a></sup></cite></div></blockquote> <meta property="mw:PageProp/toc" /> <div class="mw-heading mw-heading2"><h2 id="Definition">Definition</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=1" title="Edit section: Definition"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>In any programming language that implements short-circuit evaluation, the expression <code><i>x</i> and <i>y</i></code> is equivalent to the <a href="/wiki/Conditional_(programming)" class="mw-redirect" title="Conditional (programming)">conditional expression</a> <code>if <i>x</i> then <i>y</i> else <i>x</i></code>, and the expression <code><i>x</i> or <i>y</i></code> is equivalent to <code>if <i>x</i> then <i>x</i> else <i>y</i></code>. In either case, <i>x</i> is only evaluated once. </p><p>The generalized definition above accommodates loosely typed languages that have more than the two <a href="/wiki/Truth-value" class="mw-redirect" title="Truth-value">truth-values</a> <code>True</code> and <code>False</code>, where short-circuit operators may return the last evaluated subexpression. This is called "last value" in the table below. For a strictly-typed language, the expression is simplified to <code>if <i>x</i> then <i>y</i> else <b>false</b></code> and <code>if <i>x</i> then <b>true</b> else <i>y</i></code> respectively for the boolean case. </p> <div class="mw-heading mw-heading3"><h3 id="Precedence">Precedence</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=2" title="Edit section: Precedence"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Although <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">AND</code> takes <a href="/wiki/Operator_precedence" class="mw-redirect" title="Operator precedence">precedence</a> over <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">OR</code> in many languages, this is not a universal property of short-circuit evaluation. An example of the two operators taking the same precedence and being <a href="/wiki/Left-associative" class="mw-redirect" title="Left-associative">left-associative</a> with each other is <a href="/wiki/POSIX_shell" class="mw-redirect" title="POSIX shell">POSIX shell</a>'s command-list syntax.<sup id="cite_ref-2" class="reference"><a href="#cite_note-2"><span class="cite-bracket">[</span>2<span class="cite-bracket">]</span></a></sup><sup class="reference nowrap"><span title="Location: §2.9.3">: §2.9.3 </span></sup> </p><p>The following simple left-to-right evaluator enforces a precedence of <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">AND</code> over <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">OR</code> by a <code class="mw-highlight mw-highlight-lang-text mw-content-ltr" style="" dir="ltr">continue</code>: </p> <pre><b>function</b> short-circuit-eval (<i>operators</i>, <i>values</i>) <b>let</b> <i>result</i> := True <b>for each</b> (<i>op</i>, <i>val</i>) in (<i>operators</i>, <i>values</i>): <b>if</b> <i>op</i> = "AND" && <i>result</i> = False <b>continue</b> <b>else if</b> <i>op</i> = "OR" && <i>result</i> = True <b>return</b> <i>result</i> <b>else</b> <i>result</i> := <i>val</i> <b>return</b> <i>result</i> </pre> <div class="mw-heading mw-heading3"><h3 id="Formalization">Formalization</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=3" title="Edit section: Formalization"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Short-circuit logic, with or without side-effects, have been formalized based on <a href="/wiki/Hoare_logic#Conditional_rule" title="Hoare logic">Hoare's conditional</a>. A result is that non-short-circuiting operators can be defined out of short-circuit logic to have the same sequence of evaluation.<sup id="cite_ref-3" class="reference"><a href="#cite_note-3"><span class="cite-bracket">[</span>3<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="Support_in_common_programming_and_scripting_languages">Support in common programming and scripting languages</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=4" title="Edit section: Support in common programming and scripting languages"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>As you look at the table below, keep in mind that bitwise operators often do not behave exactly like logical operators, even if both arguments are of <code>0</code>, <code>1</code> or Boolean type. </p><p>Examples: </p> <ul><li>In JavaScript, each of the following 3 expressions evaluates to <code>false</code>:<br /><code>(true & true) === (true && true)</code>,<br /><code>(false | false) === (false || false)</code>,<br /><code>(1 & 2) === (1 && 2)</code>.</li> <li>In PHP, each of the following 3 expressions evaluates to <code>false</code>:<br /><code>(true & true) === (true && true)</code>,<br /><code>(0 | 0) === (0 || 0)</code>,<br /><code>(1 & 2) === (1 && 2)</code>.</li></ul> <table class="wikitable"> <caption>Boolean operators in various languages </caption> <tbody><tr> <th>Language</th> <th><a href="/wiki/Eager_evaluation" class="mw-redirect" title="Eager evaluation">Eager</a> operators</th> <th>Short-circuit operators</th> <th>Result type </th></tr> <tr> <td>Advanced Business Application Programming (<a href="/wiki/ABAP" title="ABAP">ABAP</a>) </td> <td><i>none</i> </td> <td><code>and</code>, <code>or</code> </td> <td>Boolean<sup id="cite_ref-abap-apl_4-0" class="reference"><a href="#cite_note-abap-apl-4"><span class="cite-bracket">[</span>a<span class="cite-bracket">]</span></a></sup> </td></tr> <tr> <td><a href="/wiki/Ada_(programming_language)" title="Ada (programming language)">Ada</a> </td> <td><code>and</code>, <code>or</code> </td> <td><code>and then</code>, <code>or else</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/ALGOL_68" title="ALGOL 68">ALGOL 68</a> </td> <td>and, &, ∧ ; or, ∨ </td> <td style="background: #FED; color:black; vertical-align: middle; text-align: center;" class="depends table-depends">andf , orf <i>(both user defined)</i> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/APL_(programming_language)" title="APL (programming language)">APL</a> </td> <td><code>∧</code>, <code>∨</code>, <code>⍲</code> (nand), <code>⍱</code> (nor), etc. </td> <td><code>:AndIf</code>, <code>:OrIf</code> </td> <td>Boolean<sup id="cite_ref-abap-apl_4-1" class="reference"><a href="#cite_note-abap-apl-4"><span class="cite-bracket">[</span>a<span class="cite-bracket">]</span></a></sup> </td></tr> <tr> <td><a href="/wiki/Awk" class="mw-redirect" title="Awk">awk</a> </td> <td><i>none</i> </td> <td><code>&&</code>, <code>||</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Bash_(Unix_shell)" title="Bash (Unix shell)">Bash</a> </td> <td><i>none</i> </td> <td><code>&&</code>, <code>||</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/C_(programming_language)" title="C (programming language)">C</a>, <a href="/wiki/Objective-C" title="Objective-C">Objective-C</a> </td> <td><code>&</code>, <code>|</code><sup id="cite_ref-bitwise_c_6-0" class="reference"><a href="#cite_note-bitwise_c-6"><span class="cite-bracket">[</span>b<span class="cite-bracket">]</span></a></sup> </td> <td><code>&&</code>, <code>||</code>, <code>?</code><sup id="cite_ref-7" class="reference"><a href="#cite_note-7"><span class="cite-bracket">[</span>5<span class="cite-bracket">]</span></a></sup> </td> <td>int (<code>&</code>, <code>|</code>, <code>&&</code>,<code>||</code>), opnd-dependent (<code>?</code>) </td></tr> <tr> <td><a href="/wiki/C%2B%2B" title="C++">C++</a><sup id="cite_ref-cpp_8-0" class="reference"><a href="#cite_note-cpp-8"><span class="cite-bracket">[</span>c<span class="cite-bracket">]</span></a></sup> </td> <td><i>none</i> </td> <td><code>&&</code>, <code>||</code>, <code>?</code><sup id="cite_ref-9" class="reference"><a href="#cite_note-9"><span class="cite-bracket">[</span>6<span class="cite-bracket">]</span></a></sup> </td> <td>Boolean (<code>&&</code>,<code>||</code>), opnd-dependent (<code>?</code>) </td></tr> <tr> <td><a href="/wiki/C_Sharp_(programming_language)" title="C Sharp (programming language)">C#</a> </td> <td><code>&</code>, <code>|</code> </td> <td><code>&&</code>, <code>||</code>, <code>?</code>, <code>??</code> </td> <td>Boolean (<code>&&</code>,<code>||</code>), opnd-dependent (<code>?</code>, <code>??</code>) </td></tr> <tr> <td><a href="/wiki/ColdFusion_Markup_Language" title="ColdFusion Markup Language">ColdFusion Markup Language</a> (CFML) </td> <td><i>none</i> </td> <td><code>AND</code>, <code>OR</code>, <code>&&</code>, <code>||</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/D_(programming_language)" title="D (programming language)">D</a><sup id="cite_ref-d_10-0" class="reference"><a href="#cite_note-d-10"><span class="cite-bracket">[</span>d<span class="cite-bracket">]</span></a></sup> </td> <td><code>&</code>, <code>|</code> </td> <td><code>&&</code>, <code>||</code>, <code>?</code> </td> <td>Boolean (<code>&&</code>,<code>||</code>), opnd-dependent (<code>?</code>) </td></tr> <tr> <td><a href="/wiki/Eiffel_(programming_language)" title="Eiffel (programming language)">Eiffel</a> </td> <td><code>and</code>, <code>or</code> </td> <td><code>and then</code>, <code>or else</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Erlang_(programming_language)" title="Erlang (programming language)">Erlang</a> </td> <td><code>and</code>, <code>or</code> </td> <td><code>andalso</code>, <code>orelse</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Fortran" title="Fortran">Fortran</a><sup id="cite_ref-fortran_11-0" class="reference"><a href="#cite_note-fortran-11"><span class="cite-bracket">[</span>e<span class="cite-bracket">]</span></a></sup> </td> <td><code>.and.</code>, <code>.or.</code> </td> <td><code>.and.</code>, <code>.or.</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Go_(programming_language)" title="Go (programming language)">Go</a>, <a href="/wiki/Haskell_(programming_language)" class="mw-redirect" title="Haskell (programming language)">Haskell</a>, <a href="/wiki/OCaml" title="OCaml">OCaml</a> </td> <td><i>none</i> </td> <td><code>&&</code>, <code>||</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>, <a href="/wiki/MATLAB" title="MATLAB">MATLAB</a>, <a href="/wiki/R_(programming_language)" title="R (programming language)">R</a>, <a href="/wiki/Swift_(programming_language)" title="Swift (programming language)">Swift</a> </td> <td><code>&</code>, <code>|</code> </td> <td><code>&&</code>, <code>||</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/JavaScript" title="JavaScript">JavaScript</a> </td> <td><i>none</i> </td> <td><code>&&</code>, <code>&&=</code>, <code>||</code>, <code>||=</code> </td> <td>Last value </td></tr> <tr> <td><a href="/wiki/Julia_(programming_language)" title="Julia (programming language)">Julia</a> </td> <td><i>none</i> </td> <td><code>&&</code>, <code>||</code> </td> <td>Last value </td></tr> <tr> <td><a href="/wiki/Lasso_(programming_language)" title="Lasso (programming language)">Lasso</a> </td> <td><i>none</i> </td> <td><code>and</code>, <code>or</code>, <code>&&</code>, <code>||</code> </td> <td>Last value </td></tr> <tr> <td><a href="/wiki/Kotlin_(programming_language)" title="Kotlin (programming language)">Kotlin</a> </td> <td><code>and</code>, <code>or</code> </td> <td><code>&&</code>, <code>||</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a>, <a href="/wiki/Lua_(programming_language)" title="Lua (programming language)">Lua</a>, <a href="/wiki/Scheme_(programming_language)" title="Scheme (programming language)">Scheme</a> </td> <td><i>none</i> </td> <td><code>and</code>, <code>or</code> </td> <td>Last value </td></tr> <tr> <td><a href="/wiki/MUMPS" title="MUMPS">MUMPS</a> (M) </td> <td><code>&</code>, <code>!</code> </td> <td><i>none</i> </td> <td>Numeric </td></tr> <tr> <td><a href="/wiki/Modula-2" title="Modula-2">Modula-2</a> </td> <td><i>none</i> </td> <td><code>AND</code>, <code>OR</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Oberon_(programming_language)" title="Oberon (programming language)">Oberon</a> </td> <td><i>none</i> </td> <td><code>&</code>, <code>OR</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/OCaml" title="OCaml">OCaml</a> </td> <td><code>land</code>, <code>lor</code><sup id="cite_ref-12" class="reference"><a href="#cite_note-12"><span class="cite-bracket">[</span>7<span class="cite-bracket">]</span></a></sup> </td> <td><code>&&</code>, <code>||</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Pascal_(programming_language)" title="Pascal (programming language)">Pascal</a> </td> <td><code>and</code>, <code>or</code><sup id="cite_ref-pascal-1_13-0" class="reference"><a href="#cite_note-pascal-1-13"><span class="cite-bracket">[</span>f<span class="cite-bracket">]</span></a></sup><sup id="cite_ref-delphi_14-0" class="reference"><a href="#cite_note-delphi-14"><span class="cite-bracket">[</span>g<span class="cite-bracket">]</span></a></sup> </td> <td><code>and_then</code>, <code>or_else</code><sup id="cite_ref-delphi_14-1" class="reference"><a href="#cite_note-delphi-14"><span class="cite-bracket">[</span>g<span class="cite-bracket">]</span></a></sup> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Perl" title="Perl">Perl</a> </td> <td><code>&</code>, <code>|</code> </td> <td><code>&&</code>, <code>and</code>, <code>||</code>, <code>or</code> </td> <td>Last value </td></tr> <tr> <td><a href="/wiki/PHP" title="PHP">PHP</a> </td> <td><i>none</i> </td> <td><code>&&</code>, <code>and</code>, <code>||</code>, <code>or</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/POSIX_shell" class="mw-redirect" title="POSIX shell">POSIX shell</a> (command list) </td> <td><i>none</i> </td> <td><code>&&</code>, <code>||</code> </td> <td>Last value (exit) </td></tr> <tr> <td><a href="/wiki/PowerShell" title="PowerShell">PowerShell</a> Scripting Language </td> <td><i>none</i> </td> <td><code>-and</code>, <code>-or</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Python_(programming_language)" title="Python (programming language)">Python</a> </td> <td><code>&</code>, <code>|</code> </td> <td><code>and</code>, <code>or</code> </td> <td>Last value </td></tr> <tr> <td><a href="/wiki/Ruby_(programming_language)" title="Ruby (programming language)">Ruby</a> </td> <td><code>&</code>, <code>|</code> </td> <td><code>&&</code>, <code>and</code>, <code>||</code>, <code>or</code><sup id="cite_ref-15" class="reference"><a href="#cite_note-15"><span class="cite-bracket">[</span>8<span class="cite-bracket">]</span></a></sup> </td> <td>Last value </td></tr> <tr> <td><a href="/wiki/Rust_(programming_language)" title="Rust (programming language)">Rust</a> </td> <td><code>&</code>, <code>|</code> </td> <td><code>&&</code>, <code>||</code><sup id="cite_ref-16" class="reference"><a href="#cite_note-16"><span class="cite-bracket">[</span>9<span class="cite-bracket">]</span></a></sup> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Smalltalk" title="Smalltalk">Smalltalk</a> </td> <td><code>&</code>, <code>|</code> </td> <td><code>and:</code>, <code>or:</code><sup id="cite_ref-smalltalk_17-0" class="reference"><a href="#cite_note-smalltalk-17"><span class="cite-bracket">[</span>h<span class="cite-bracket">]</span></a></sup> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Standard_ML" title="Standard ML">Standard ML</a> </td> <td style="background: var(--background-color-interactive, #EEE); color: var(--color-base, black); vertical-align: middle; white-space: nowrap; text-align: center;" class="table-Unknown">Unknown </td> <td><code>andalso</code>, <code>orelse</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/TTCN-3" title="TTCN-3">TTCN-3</a> </td> <td><i>none</i> </td> <td><code>and</code>, <code>or</code><sup id="cite_ref-18" class="reference"><a href="#cite_note-18"><span class="cite-bracket">[</span>10<span class="cite-bracket">]</span></a></sup> </td> <td>Boolean </td></tr> <tr> <td>Beckhoff TwinCAT® (<a href="/wiki/IEC_61131-3" title="IEC 61131-3">IEC 61131-3</a>)<sup id="cite_ref-twincat_19-0" class="reference"><a href="#cite_note-twincat-19"><span class="cite-bracket">[</span>i<span class="cite-bracket">]</span></a></sup> </td> <td><code>AND</code>, <code>OR</code> </td> <td><code>AND_THEN</code>,<sup id="cite_ref-20" class="reference"><a href="#cite_note-20"><span class="cite-bracket">[</span>11<span class="cite-bracket">]</span></a></sup> <code>OR_ELSE</code><sup id="cite_ref-21" class="reference"><a href="#cite_note-21"><span class="cite-bracket">[</span>12<span class="cite-bracket">]</span></a></sup> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Visual_Basic_.NET" class="mw-redirect" title="Visual Basic .NET">Visual Basic .NET</a> </td> <td><code>And</code>, <code>Or</code> </td> <td><code>AndAlso</code>, <code>OrElse</code> </td> <td>Boolean </td></tr> <tr> <td><a href="/wiki/Visual_Basic" title="Visual Basic">Visual Basic</a>, <a href="/wiki/Visual_Basic_for_Applications" title="Visual Basic for Applications">Visual Basic for Applications</a> (VBA) </td> <td><code>And</code>, <code>Or</code> </td> <td><code>Select Case</code><sup id="cite_ref-basic_22-0" class="reference"><a href="#cite_note-basic-22"><span class="cite-bracket">[</span>j<span class="cite-bracket">]</span></a></sup> </td> <td>Numeric </td></tr> <tr> <td><a href="/wiki/Wolfram_Language" title="Wolfram Language">Wolfram Language</a> </td> <td><code>And @@ {...}</code>, <code>Or @@ {...}</code> </td> <td><code>And</code>, <code>Or</code>, <code>&&</code>, <code>||</code> </td> <td>Boolean </td></tr> <tr> <td>ZTT </td> <td><code>&</code>, <code>|</code> </td> <td><i>none</i> </td> <td>Boolean </td></tr></tbody></table> <style data-mw-deduplicate="TemplateStyles:r1239543626">.mw-parser-output .reflist{margin-bottom:0.5em;list-style-type:decimal}@media screen{.mw-parser-output .reflist{font-size:90%}}.mw-parser-output .reflist .references{font-size:100%;margin-bottom:0;list-style-type:inherit}.mw-parser-output .reflist-columns-2{column-width:30em}.mw-parser-output .reflist-columns-3{column-width:25em}.mw-parser-output .reflist-columns{margin-top:0.3em}.mw-parser-output .reflist-columns ol{margin-top:0}.mw-parser-output .reflist-columns li{page-break-inside:avoid;break-inside:avoid-column}.mw-parser-output .reflist-upper-alpha{list-style-type:upper-alpha}.mw-parser-output .reflist-upper-roman{list-style-type:upper-roman}.mw-parser-output .reflist-lower-alpha{list-style-type:lower-alpha}.mw-parser-output .reflist-lower-greek{list-style-type:lower-greek}.mw-parser-output .reflist-lower-roman{list-style-type:lower-roman}</style><div class="reflist reflist-lower-alpha"> <div class="mw-references-wrap"><ol class="references"> <li id="cite_note-abap-apl-4"><span class="mw-cite-backlink">^ <a href="#cite_ref-abap-apl_4-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-abap-apl_4-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text">ABAP and APL have no distinct boolean type.</span> </li> <li id="cite_note-bitwise_c-6"><span class="mw-cite-backlink"><b><a href="#cite_ref-bitwise_c_6-0">^</a></b></span> <span class="reference-text">The bitwise operators behave like boolean operators when both arguments are of type <code>bool</code> or take only the values <code>0</code> or <code>1</code>.<sup id="cite_ref-5" class="reference"><a href="#cite_note-5"><span class="cite-bracket">[</span>4<span class="cite-bracket">]</span></a></sup></span> </li> <li id="cite_note-cpp-8"><span class="mw-cite-backlink"><b><a href="#cite_ref-cpp_8-0">^</a></b></span> <span class="reference-text">When <a href="/wiki/Operator_overloading" title="Operator overloading">overloaded</a>, the operators <code>&&</code> and <code>||</code> are eager and can return any type.</span> </li> <li id="cite_note-d-10"><span class="mw-cite-backlink"><b><a href="#cite_ref-d_10-0">^</a></b></span> <span class="reference-text">This only applies to runtime-evaluated expressions, <code>static if</code> and <code>static assert</code>. Expressions in static initializers or manifest constants use eager evaluation.</span> </li> <li id="cite_note-fortran-11"><span class="mw-cite-backlink"><b><a href="#cite_ref-fortran_11-0">^</a></b></span> <span class="reference-text">Fortran operators are neither short-circuit nor eager: the language specification allows the <a href="/wiki/Compiler" title="Compiler">compiler</a> to select the method for optimization.</span> </li> <li id="cite_note-pascal-1-13"><span class="mw-cite-backlink"><b><a href="#cite_ref-pascal-1_13-0">^</a></b></span> <span class="reference-text"><a href="/wiki/Pascal_(programming_language)#ISO/IEC_10206:1990_Extended_Pascal" title="Pascal (programming language)">ISO/IEC 10206:1990 Extended Pascal</a> allows, but does not require, short-circuiting.</span> </li> <li id="cite_note-delphi-14"><span class="mw-cite-backlink">^ <a href="#cite_ref-delphi_14-0"><sup><i><b>a</b></i></sup></a> <a href="#cite_ref-delphi_14-1"><sup><i><b>b</b></i></sup></a></span> <span class="reference-text"><a href="/wiki/Delphi_(software)" title="Delphi (software)">Delphi</a> and <a href="/wiki/Free_Pascal" title="Free Pascal">Free Pascal</a> default to short circuit evaluation. This may be changed by <a href="/wiki/Compiler" title="Compiler">compiler</a> options but does not seem to be used widely.</span> </li> <li id="cite_note-smalltalk-17"><span class="mw-cite-backlink"><b><a href="#cite_ref-smalltalk_17-0">^</a></b></span> <span class="reference-text">Smalltalk uses short-circuit semantics as long as the argument to <code>and:</code> is a block (e.g., <code>false and: [Transcript show: 'Wont see me']</code>).</span> </li> <li id="cite_note-twincat-19"><span class="mw-cite-backlink"><b><a href="#cite_ref-twincat_19-0">^</a></b></span> <span class="reference-text">The norm <a href="/wiki/IEC_61131-3" title="IEC 61131-3">IEC 61131-3</a> doesn't actually define if <code>AND</code> and <code>OR</code> use short-circuit evaluation and it doesn't define the operators <code>AND_THEN</code> and <code>OR_ELSE</code>. The entries in the table show how it works for Beckhoff TwinCAT®.</span> </li> <li id="cite_note-basic-22"><span class="mw-cite-backlink"><b><a href="#cite_ref-basic_22-0">^</a></b></span> <span class="reference-text"><a href="/wiki/BASIC" title="BASIC">BASIC</a> languages that supported CASE statements did so by using the conditional evaluation system, rather than as jump tables limited to fixed labels.</span> </li> </ol></div></div> <div class="mw-heading mw-heading2"><h2 id="Common_use">Common use</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=5" title="Edit section: Common use"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Avoiding_undesired_side_effects_of_the_second_argument">Avoiding undesired side effects of the second argument</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=6" title="Edit section: Avoiding undesired side effects of the second argument"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Usual example, using a <a href="/wiki/C_(programming_language)" title="C (programming language)">C-based</a> language: </p> <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">denom</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">denom</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">num</span><span class="w"> </span><span class="o">/</span><span class="w"> </span><span class="n">denom</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="p">...</span><span class="w"> </span><span class="c1">// ensures that calculating num/denom never results in divide-by-zero error </span> <span class="p">}</span> </pre></div> <p>Consider the following example: </p> <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">a</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">0</span><span class="p">;</span> <span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">a</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="mi">0</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">myfunc</span><span class="p">(</span><span class="n">b</span><span class="p">))</span> <span class="p">{</span> <span class="w"> </span><span class="n">do_something</span><span class="p">();</span> <span class="p">}</span> </pre></div> <p>In this example, short-circuit evaluation guarantees that <code>myfunc(b)</code> is never called. This is because <code>a != 0</code> evaluates to <i>false</i>. This feature permits two useful programming constructs. </p> <ol><li>If the first sub-expression checks whether an expensive computation is needed and the check evaluates to <i>false</i>, one can eliminate expensive computation in the second argument.</li> <li>It permits a construct where the first expression guarantees a condition without which the second expression may cause a <a href="/wiki/Run-time_error" class="mw-redirect" title="Run-time error">run-time error</a>.</li></ol> <p>Both are illustrated in the following C snippet where minimal evaluation prevents both null pointer dereference and excess memory fetches: </p> <div class="mw-highlight mw-highlight-lang-cpp mw-content-ltr" dir="ltr"><pre><span></span><span class="kt">bool</span><span class="w"> </span><span class="nf">is_first_char_valid_alpha_unsafe</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">p</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">isalpha</span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span><span class="w"> </span><span class="c1">// SEGFAULT highly possible with p == NULL</span> <span class="p">}</span> <span class="kt">bool</span><span class="w"> </span><span class="nf">is_first_char_valid_alpha</span><span class="p">(</span><span class="k">const</span><span class="w"> </span><span class="kt">char</span><span class="w"> </span><span class="o">*</span><span class="n">p</span><span class="p">)</span> <span class="p">{</span> <span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">p</span><span class="w"> </span><span class="o">!=</span><span class="w"> </span><span class="nb">NULL</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">isalpha</span><span class="p">(</span><span class="n">p</span><span class="p">[</span><span class="mi">0</span><span class="p">]);</span><span class="w"> </span><span class="c1">// 1) no unneeded isalpha() execution with p == NULL, 2) no SEGFAULT risk</span> <span class="p">}</span> </pre></div> <div class="mw-heading mw-heading3"><h3 id="Idiomatic_conditional_construct">Idiomatic conditional construct</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=7" title="Edit section: Idiomatic conditional construct"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Since minimal evaluation is part of an operator's semantic definition and not an optional <a href="/wiki/Compiler_optimization" class="mw-redirect" title="Compiler optimization">optimization</a>, a number of coding idioms rely on it as a succinct conditional construct. Examples include: </p><p><a href="/wiki/Perl" title="Perl">Perl</a> idioms: </p> <div class="mw-highlight mw-highlight-lang-perl mw-content-ltr" dir="ltr"><pre><span></span><span class="n">some_condition</span><span class="w"> </span><span class="ow">or</span><span class="w"> </span><span class="nb">die</span><span class="p">;</span><span class="w"> </span><span class="c1"># Abort execution if some_condition is false</span> <span class="n">some_condition</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="nb">die</span><span class="p">;</span><span class="w"> </span><span class="c1"># Abort execution if some_condition is true</span> </pre></div> <p><a href="/wiki/POSIX_shell" class="mw-redirect" title="POSIX shell">POSIX shell</a> idioms:<sup id="cite_ref-23" class="reference"><a href="#cite_note-23"><span class="cite-bracket">[</span>13<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-highlight mw-highlight-lang-bash mw-content-ltr" dir="ltr"><pre><span></span>modprobe<span class="w"> </span>-q<span class="w"> </span>some_module<span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"some_module installed"</span><span class="w"> </span><span class="o">||</span><span class="w"> </span><span class="nb">echo</span><span class="w"> </span><span class="s2">"some_module not installed"</span> </pre></div> <p>This idiom presumes that <code>echo</code> cannot fail. </p> <div class="mw-heading mw-heading2"><h2 id="Possible_problems">Possible problems</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=8" title="Edit section: Possible problems"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <div class="mw-heading mw-heading3"><h3 id="Untested_second_condition_leads_to_unperformed_side_effect">Untested second condition leads to unperformed side effect</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=9" title="Edit section: Untested second condition leads to unperformed side effect"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Despite these benefits, minimal evaluation may cause problems for programmers who do not realize (or forget) it is happening. For example, in the code </p> <div class="mw-highlight mw-highlight-lang-c mw-content-ltr" dir="ltr"><pre><span></span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">expressionA</span><span class="w"> </span><span class="o">&&</span><span class="w"> </span><span class="n">myfunc</span><span class="p">(</span><span class="n">b</span><span class="p">))</span><span class="w"> </span><span class="p">{</span> <span class="w"> </span><span class="n">do_something</span><span class="p">();</span> <span class="p">}</span> </pre></div> <p>if <code>myfunc(b)</code> is supposed to perform some required operation regardless of whether <code>do_something()</code> is executed, such as allocating system resources, and <code>expressionA</code> evaluates as false, then <code>myfunc(b)</code> will not execute, which could cause problems. Some programming languages, such as <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>, have two operators, one that employs minimal evaluation and one that does not, to avoid this problem. </p><p>Problems with unperformed side effect statements can be easily solved with proper programming style, i.e., not using side effects in boolean statements, as using values with side effects in evaluations tends to generally make the code opaque and error-prone.<sup id="cite_ref-24" class="reference"><a href="#cite_note-24"><span class="cite-bracket">[</span>14<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading3"><h3 id="Reduced_efficiency_due_to_constraining_optimizations">Reduced efficiency due to constraining optimizations</h3><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=10" title="Edit section: Reduced efficiency due to constraining optimizations"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <p>Short-circuiting can lead to errors in <a href="/wiki/Branch_prediction" class="mw-redirect" title="Branch prediction">branch prediction</a> on modern <a href="/wiki/Central_processing_unit" title="Central processing unit">central processing units</a> (CPUs), and dramatically reduce performance. A notable example is highly optimized ray with axis aligned box intersection code in <a href="/wiki/Ray_tracing_(physics)" title="Ray tracing (physics)">ray tracing</a>.<sup class="noprint Inline-Template" style="margin-left:0.1em; white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Please_clarify" title="Wikipedia:Please clarify"><span title="The text near this tag may need clarification or removal of jargon. (November 2010)">clarification needed</span></a></i>]</sup> Some compilers can detect such cases and emit faster code, but programming language semantics may constrain such optimizations.<sup class="noprint Inline-Template Template-Fact" style="white-space:nowrap;">[<i><a href="/wiki/Wikipedia:Citation_needed" title="Wikipedia:Citation needed"><span title="This claim needs references to reliable sources. (October 2016)">citation needed</span></a></i>]</sup> </p><p>An example of a compiler unable to optimize for such a case is <a href="/wiki/Java_(programming_language)" title="Java (programming language)">Java</a>'s <a href="/wiki/HotSpot_(virtual_machine)" title="HotSpot (virtual machine)">Hotspot virtual machine</a> (VM) as of 2012.<sup id="cite_ref-25" class="reference"><a href="#cite_note-25"><span class="cite-bracket">[</span>15<span class="cite-bracket">]</span></a></sup> </p> <div class="mw-heading mw-heading2"><h2 id="See_also">See also</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=11" title="Edit section: See also"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <ul><li><a href="/wiki/Don%27t-care_term" title="Don't-care term">Don't-care term</a></li></ul> <div class="mw-heading mw-heading2"><h2 id="References">References</h2><span class="mw-editsection"><span class="mw-editsection-bracket">[</span><a href="/w/index.php?title=Short-circuit_evaluation&action=edit&section=12" title="Edit section: References"><span>edit</span></a><span class="mw-editsection-bracket">]</span></span></div> <link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239543626"><div class="reflist"> <div class="mw-references-wrap mw-references-columns"><ol class="references"> <li id="cite_note-1"><span class="mw-cite-backlink"><b><a href="#cite_ref-1">^</a></b></span> <span class="reference-text"><a href="/wiki/Edsger_W._Dijkstra" title="Edsger W. Dijkstra">Edsger W. Dijkstra</a> "On a somewhat disappointing correspondence", EWD1009-0, 25 May 1987 <a rel="nofollow" class="external text" href="http://www.cs.utexas.edu/users/EWD/ewd10xx/EWD1009.PDF">full text</a></span> </li> <li id="cite_note-2"><span class="mw-cite-backlink"><b><a href="#cite_ref-2">^</a></b></span> <span class="reference-text"><style data-mw-deduplicate="TemplateStyles:r1238218222">.mw-parser-output cite.citation{font-style:inherit;word-wrap:break-word}.mw-parser-output .citation q{quotes:"\"""\"""'""'"}.mw-parser-output .citation:target{background-color:rgba(0,127,255,0.133)}.mw-parser-output .id-lock-free.id-lock-free a{background:url("//upload.wikimedia.org/wikipedia/commons/6/65/Lock-green.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-limited.id-lock-limited a,.mw-parser-output .id-lock-registration.id-lock-registration a{background:url("//upload.wikimedia.org/wikipedia/commons/d/d6/Lock-gray-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .id-lock-subscription.id-lock-subscription a{background:url("//upload.wikimedia.org/wikipedia/commons/a/aa/Lock-red-alt-2.svg")right 0.1em center/9px no-repeat}.mw-parser-output .cs1-ws-icon a{background:url("//upload.wikimedia.org/wikipedia/commons/4/4c/Wikisource-logo.svg")right 0.1em center/12px no-repeat}body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-free a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-limited a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-registration a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .id-lock-subscription a,body:not(.skin-timeless):not(.skin-minerva) .mw-parser-output .cs1-ws-icon a{background-size:contain;padding:0 1em 0 0}.mw-parser-output .cs1-code{color:inherit;background:inherit;border:none;padding:inherit}.mw-parser-output .cs1-hidden-error{display:none;color:var(--color-error,#d33)}.mw-parser-output .cs1-visible-error{color:var(--color-error,#d33)}.mw-parser-output .cs1-maint{display:none;color:#085;margin-left:0.3em}.mw-parser-output .cs1-kern-left{padding-left:0.2em}.mw-parser-output .cs1-kern-right{padding-right:0.2em}.mw-parser-output .citation .mw-selflink{font-weight:inherit}@media screen{.mw-parser-output .cs1-format{font-size:95%}html.skin-theme-clientpref-night .mw-parser-output .cs1-maint{color:#18911f}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .cs1-maint{color:#18911f}}</style><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://pubs.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html">"Shell Command Language"</a>. <i>pubs.opengroup.org</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=pubs.opengroup.org&rft.atitle=Shell+Command+Language&rft_id=https%3A%2F%2Fpubs.opengroup.org%2Fonlinepubs%2F009695399%2Futilities%2Fxcu_chap02.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AShort-circuit+evaluation" class="Z3988"></span></span> </li> <li id="cite_note-3"><span class="mw-cite-backlink"><b><a href="#cite_ref-3">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFBergstraPonseStaudt2010" class="citation arxiv cs1">Bergstra, Jan A.; Ponse, A.; Staudt, D.J.C. (2010). "Short-circuit logic". <a href="/wiki/ArXiv_(identifier)" class="mw-redirect" title="ArXiv (identifier)">arXiv</a>:<span class="id-lock-free" title="Freely accessible"><a rel="nofollow" class="external text" href="https://arxiv.org/abs/1010.3674">1010.3674</a></span> [<a rel="nofollow" class="external text" href="https://arxiv.org/archive/cs.LO">cs.LO</a>].</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=preprint&rft.jtitle=arXiv&rft.atitle=Short-circuit+logic&rft.date=2010&rft_id=info%3Aarxiv%2F1010.3674&rft.aulast=Bergstra&rft.aufirst=Jan+A.&rft.au=Ponse%2C+A.&rft.au=Staudt%2C+D.J.C.&rfr_id=info%3Asid%2Fen.wikipedia.org%3AShort-circuit+evaluation" class="Z3988"></span></span> </li> <li id="cite_note-5"><span class="mw-cite-backlink"><b><a href="#cite_ref-5">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf">ISO/IEC 9899 standard, sections 6.2.5, 6.3.1.2, 6.5 and 7.16.</a></span> </li> <li id="cite_note-7"><span class="mw-cite-backlink"><b><a href="#cite_ref-7">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf">ISO/IEC 9899 standard, section 6.5.13</a></span> </li> <li id="cite_note-9"><span class="mw-cite-backlink"><b><a href="#cite_ref-9">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2010/n3092.pdf">ISO/IEC IS 14882 draft.</a></span> </li> <li id="cite_note-12"><span class="mw-cite-backlink"><b><a href="#cite_ref-12">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://v2.ocaml.org/manual/expr.html#ss:expr-operators">"OCaml - the OCaml language"</a>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=OCaml+-+the+OCaml+language&rft_id=https%3A%2F%2Fv2.ocaml.org%2Fmanual%2Fexpr.html%23ss%3Aexpr-operators&rfr_id=info%3Asid%2Fen.wikipedia.org%3AShort-circuit+evaluation" class="Z3988"></span></span> </li> <li id="cite_note-15"><span class="mw-cite-backlink"><b><a href="#cite_ref-15">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://docs.ruby-lang.org/en/3.3/syntax/operators_rdoc.html#label-Logical+Operators">"operators - Documentation for Ruby 3.3"</a>. <i>docs.ruby-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2024-04-02</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=docs.ruby-lang.org&rft.atitle=operators+-+Documentation+for+Ruby+3.3&rft_id=https%3A%2F%2Fdocs.ruby-lang.org%2Fen%2F3.3%2Fsyntax%2Foperators_rdoc.html%23label-Logical%2BOperators&rfr_id=info%3Asid%2Fen.wikipedia.org%3AShort-circuit+evaluation" class="Z3988"></span></span> </li> <li id="cite_note-16"><span class="mw-cite-backlink"><b><a href="#cite_ref-16">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://doc.rust-lang.org/std/ops/index.html">"std::ops - Rust"</a>. <i>doc.rust-lang.org</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2019-02-12</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=doc.rust-lang.org&rft.atitle=std%3A%3Aops+-+Rust&rft_id=https%3A%2F%2Fdoc.rust-lang.org%2Fstd%2Fops%2Findex.html&rfr_id=info%3Asid%2Fen.wikipedia.org%3AShort-circuit+evaluation" class="Z3988"></span></span> </li> <li id="cite_note-18"><span class="mw-cite-backlink"><b><a href="#cite_ref-18">^</a></b></span> <span class="reference-text"><a rel="nofollow" class="external text" href="https://www.etsi.org/deliver/etsi_es/201800_201899/20187301/04.10.01_60/es_20187301v041001p.pdf">ETSI ES 201 873-1 V4.10.1, section 7.1.4</a></span> </li> <li id="cite_note-20"><span class="mw-cite-backlink"><b><a href="#cite_ref-20">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/2528923787.html&id=">"Beckhoff Information System - English"</a>. <i>infosys.beckhoff.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-08-16</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=infosys.beckhoff.com&rft.atitle=Beckhoff+Information+System+-+English&rft_id=https%3A%2F%2Finfosys.beckhoff.com%2Fenglish.php%3Fcontent%3D..%2Fcontent%2F1033%2Ftc3_plc_intro%2F2528923787.html%26id%3D&rfr_id=info%3Asid%2Fen.wikipedia.org%3AShort-circuit+evaluation" class="Z3988"></span></span> </li> <li id="cite_note-21"><span class="mw-cite-backlink"><b><a href="#cite_ref-21">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://infosys.beckhoff.com/english.php?content=../content/1033/tc3_plc_intro/2528923787.html&id=">"Beckhoff Information System - English"</a>. <i>infosys.beckhoff.com</i><span class="reference-accessdate">. Retrieved <span class="nowrap">2021-08-16</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=infosys.beckhoff.com&rft.atitle=Beckhoff+Information+System+-+English&rft_id=https%3A%2F%2Finfosys.beckhoff.com%2Fenglish.php%3Fcontent%3D..%2Fcontent%2F1033%2Ftc3_plc_intro%2F2528923787.html%26id%3D&rfr_id=info%3Asid%2Fen.wikipedia.org%3AShort-circuit+evaluation" class="Z3988"></span></span> </li> <li id="cite_note-23"><span class="mw-cite-backlink"><b><a href="#cite_ref-23">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="https://unix.stackexchange.com/questions/190543/what-does-mean-in-bash">"What does || mean in bash?"</a>. stackexchange.com<span class="reference-accessdate">. Retrieved <span class="nowrap">2019-01-09</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=What+does+%7C%7C+mean+in+bash%3F&rft.pub=stackexchange.com&rft_id=https%3A%2F%2Funix.stackexchange.com%2Fquestions%2F190543%2Fwhat-does-mean-in-bash&rfr_id=info%3Asid%2Fen.wikipedia.org%3AShort-circuit+evaluation" class="Z3988"></span></span> </li> <li id="cite_note-24"><span class="mw-cite-backlink"><b><a href="#cite_ref-24">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite class="citation web cs1"><a rel="nofollow" class="external text" href="http://www.itu.dk/people/sestoft/papers/SondergaardSestoft1990.pdf">"Referential Transparency, Definiteness and Unfoldability"</a> <span class="cs1-format">(PDF)</span>. Itu.dk<span class="reference-accessdate">. Retrieved <span class="nowrap">2013-08-24</span></span>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Abook&rft.genre=unknown&rft.btitle=Referential+Transparency%2C+Definiteness+and+Unfoldability&rft.pub=Itu.dk&rft_id=http%3A%2F%2Fwww.itu.dk%2Fpeople%2Fsestoft%2Fpapers%2FSondergaardSestoft1990.pdf&rfr_id=info%3Asid%2Fen.wikipedia.org%3AShort-circuit+evaluation" class="Z3988"></span></span> </li> <li id="cite_note-25"><span class="mw-cite-backlink"><b><a href="#cite_ref-25">^</a></b></span> <span class="reference-text"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1238218222"><cite id="CITEREFWasserman2012" class="citation web cs1">Wasserman, Louis (11 July 2012). <a rel="nofollow" class="external text" href="https://stackoverflow.com/a/11412121">"Java: What are the cases in which it is better to use unconditional AND (& instead of &&)"</a>. <i>Stack Overflow</i>.</cite><span title="ctx_ver=Z39.88-2004&rft_val_fmt=info%3Aofi%2Ffmt%3Akev%3Amtx%3Ajournal&rft.genre=unknown&rft.jtitle=Stack+Overflow&rft.atitle=Java%3A+What+are+the+cases+in+which+it+is+better+to+use+unconditional+AND+%28%26+instead+of+%26%26%29&rft.date=2012-07-11&rft.aulast=Wasserman&rft.aufirst=Louis&rft_id=https%3A%2F%2Fstackoverflow.com%2Fa%2F11412121&rfr_id=info%3Asid%2Fen.wikipedia.org%3AShort-circuit+evaluation" class="Z3988"></span></span> </li> </ol></div></div> <div class="navbox-styles"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><style data-mw-deduplicate="TemplateStyles:r1236075235">.mw-parser-output .navbox{box-sizing:border-box;border:1px solid #a2a9b1;width:100%;clear:both;font-size:88%;text-align:center;padding:1px;margin:1em auto 0}.mw-parser-output .navbox .navbox{margin-top:0}.mw-parser-output .navbox+.navbox,.mw-parser-output .navbox+.navbox-styles+.navbox{margin-top:-1px}.mw-parser-output .navbox-inner,.mw-parser-output .navbox-subgroup{width:100%}.mw-parser-output .navbox-group,.mw-parser-output .navbox-title,.mw-parser-output .navbox-abovebelow{padding:0.25em 1em;line-height:1.5em;text-align:center}.mw-parser-output .navbox-group{white-space:nowrap;text-align:right}.mw-parser-output .navbox,.mw-parser-output .navbox-subgroup{background-color:#fdfdfd}.mw-parser-output .navbox-list{line-height:1.5em;border-color:#fdfdfd}.mw-parser-output .navbox-list-with-group{text-align:left;border-left-width:2px;border-left-style:solid}.mw-parser-output tr+tr>.navbox-abovebelow,.mw-parser-output tr+tr>.navbox-group,.mw-parser-output tr+tr>.navbox-image,.mw-parser-output tr+tr>.navbox-list{border-top:2px solid #fdfdfd}.mw-parser-output .navbox-title{background-color:#ccf}.mw-parser-output .navbox-abovebelow,.mw-parser-output .navbox-group,.mw-parser-output .navbox-subgroup .navbox-title{background-color:#ddf}.mw-parser-output .navbox-subgroup .navbox-group,.mw-parser-output .navbox-subgroup .navbox-abovebelow{background-color:#e6e6ff}.mw-parser-output .navbox-even{background-color:#f7f7f7}.mw-parser-output .navbox-odd{background-color:transparent}.mw-parser-output .navbox .hlist td dl,.mw-parser-output .navbox .hlist td ol,.mw-parser-output .navbox .hlist td ul,.mw-parser-output .navbox td.hlist dl,.mw-parser-output .navbox td.hlist ol,.mw-parser-output .navbox td.hlist ul{padding:0.125em 0}.mw-parser-output .navbox .navbar{display:block;font-size:100%}.mw-parser-output .navbox-title .navbar{float:left;text-align:left;margin-right:0.5em}body.skin--responsive .mw-parser-output .navbox-image img{max-width:none!important}@media print{body.ns-0 .mw-parser-output .navbox{display:none!important}}</style></div><div role="navigation" class="navbox" aria-labelledby="John_McCarthy" style="padding:3px"><table class="nowraplinks hlist mw-collapsible autocollapse navbox-inner" style="border-spacing:0;background:transparent;color:inherit"><tbody><tr><th scope="col" class="navbox-title" colspan="2"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1129693374"><link rel="mw-deduplicated-inline-style" href="mw-data:TemplateStyles:r1239400231"><div class="navbar plainlinks hlist navbar-mini"><ul><li class="nv-view"><a href="/wiki/Template:John_McCarthy" title="Template:John McCarthy"><abbr title="View this template">v</abbr></a></li><li class="nv-talk"><a href="/wiki/Template_talk:John_McCarthy" title="Template talk:John McCarthy"><abbr title="Discuss this template">t</abbr></a></li><li class="nv-edit"><a href="/wiki/Special:EditPage/Template:John_McCarthy" title="Special:EditPage/Template:John McCarthy"><abbr title="Edit this template">e</abbr></a></li></ul></div><div id="John_McCarthy" style="font-size:114%;margin:0 4em"><a href="/wiki/John_McCarthy_(computer_scientist)" title="John McCarthy (computer scientist)">John McCarthy</a></div></th></tr><tr><td colspan="2" class="navbox-list navbox-odd" style="width:100%;padding:0"><div style="padding:0 0.25em"> <ul><li><a href="/wiki/Artificial_intelligence" title="Artificial intelligence">Artificial intelligence</a></li> <li><a href="/wiki/Circumscription_(logic)" title="Circumscription (logic)">Circumscription</a></li> <li><a href="/wiki/Dartmouth_workshop" title="Dartmouth workshop">Dartmouth workshop</a></li> <li><a href="/wiki/Frame_problem" title="Frame problem">Frame problem</a></li> <li><a href="/wiki/Garbage_collection_(computer_science)" title="Garbage collection (computer science)">Garbage collection</a></li> <li><a href="/wiki/Lisp_(programming_language)" title="Lisp (programming language)">Lisp</a></li> <li><a href="/wiki/ALGOL_60" title="ALGOL 60">ALGOL 60</a></li> <li><a class="mw-selflink selflink">McCarthy evaluation</a></li> <li><a href="/wiki/McCarthy_Formalism" title="McCarthy Formalism">McCarthy Formalism</a></li> <li><a href="/wiki/McCarthy_91_function" title="McCarthy 91 function">McCarthy 91 function</a></li> <li><a href="/wiki/Situation_calculus" title="Situation calculus">Situation calculus</a></li> <li><a href="/wiki/Space_fountain" title="Space fountain">Space fountain</a></li></ul> </div></td></tr></tbody></table></div> <!-- NewPP limit report Parsed by mw‐web.eqiad.main‐5dc468848‐pbj4m Cached time: 20241122140800 Cache expiry: 2592000 Reduced expiry: false Complications: [vary‐revision‐sha1, show‐toc] CPU time usage: 0.514 seconds Real time usage: 1.126 seconds Preprocessor visited node count: 2585/1000000 Post‐expand include size: 41126/2097152 bytes Template argument size: 4376/2097152 bytes Highest expansion depth: 16/100 Expensive parser function count: 16/500 Unstrip recursion depth: 1/20 Unstrip post‐expand size: 68175/5000000 bytes Lua time usage: 0.305/10.000 seconds Lua memory usage: 7062345/52428800 bytes Number of Wikibase entities loaded: 0/400 --> <!-- Transclusion expansion time report (%,ms,calls,template) 100.00% 1042.517 1 -total 16.51% 172.101 2 Template:Reflist 13.03% 135.792 9 Template:Cite_web 8.68% 90.458 1 Template:Evaluation_strategy 8.30% 86.559 1 Template:Sidebar 7.53% 78.513 1 Template:Short_description 6.58% 68.584 1 Template:More_citations_needed 6.04% 62.976 1 Template:Ambox 4.70% 48.963 2 Template:Pagetype 3.33% 34.726 1 Template:John_McCarthy --> <!-- Saved in parser cache with key enwiki:pcache:idhash:704018-0!canonical and timestamp 20241122140800 and revision id 1221229846. Rendering was triggered because: page-view --> </div><!--esi <esi:include src="/esitest-fa8a495983347898/content" /> --><noscript><img src="https://login.wikimedia.org/wiki/Special:CentralAutoLogin/start?type=1x1" alt="" width="1" height="1" style="border: none; position: absolute;"></noscript> <div class="printfooter" data-nosnippet="">Retrieved from "<a dir="ltr" href="https://en.wikipedia.org/w/index.php?title=Short-circuit_evaluation&oldid=1221229846">https://en.wikipedia.org/w/index.php?title=Short-circuit_evaluation&oldid=1221229846</a>"</div></div> <div id="catlinks" class="catlinks" data-mw="interface"><div id="mw-normal-catlinks" class="mw-normal-catlinks"><a href="/wiki/Help:Category" title="Help:Category">Categories</a>: <ul><li><a href="/wiki/Category:Compiler_optimizations" title="Category:Compiler optimizations">Compiler optimizations</a></li><li><a href="/wiki/Category:Conditional_constructs" title="Category:Conditional constructs">Conditional constructs</a></li><li><a href="/wiki/Category:Evaluation_strategy" title="Category:Evaluation strategy">Evaluation strategy</a></li><li><a href="/wiki/Category:Implementation_of_functional_programming_languages" title="Category:Implementation of functional programming languages">Implementation of functional programming languages</a></li></ul></div><div id="mw-hidden-catlinks" class="mw-hidden-catlinks mw-hidden-cats-hidden">Hidden categories: <ul><li><a href="/wiki/Category:Articles_with_short_description" title="Category:Articles with short description">Articles with short description</a></li><li><a href="/wiki/Category:Short_description_is_different_from_Wikidata" title="Category:Short description is different from Wikidata">Short description is different from Wikidata</a></li><li><a href="/wiki/Category:Articles_needing_additional_references_from_August_2013" title="Category:Articles needing additional references from August 2013">Articles needing additional references from August 2013</a></li><li><a href="/wiki/Category:All_articles_needing_additional_references" title="Category:All articles needing additional references">All articles needing additional references</a></li><li><a href="/wiki/Category:Wikipedia_articles_needing_clarification_from_November_2010" title="Category:Wikipedia articles needing clarification from November 2010">Wikipedia articles needing clarification from November 2010</a></li><li><a href="/wiki/Category:All_articles_with_unsourced_statements" title="Category:All articles with unsourced statements">All articles with unsourced statements</a></li><li><a href="/wiki/Category:Articles_with_unsourced_statements_from_October_2016" title="Category:Articles with unsourced statements from October 2016">Articles with unsourced statements from October 2016</a></li><li><a href="/wiki/Category:Articles_with_example_C_code" title="Category:Articles with example C code">Articles with example C code</a></li><li><a href="/wiki/Category:Articles_with_example_Perl_code" title="Category:Articles with example Perl code">Articles with example Perl code</a></li></ul></div></div> </div> </main> </div> <div class="mw-footer-container"> <footer id="footer" class="mw-footer" > <ul id="footer-info"> <li id="footer-info-lastmod"> This page was last edited on 28 April 2024, at 17:34<span class="anonymous-show"> (UTC)</span>.</li> <li id="footer-info-copyright">Text is available under the <a href="/wiki/Wikipedia:Text_of_the_Creative_Commons_Attribution-ShareAlike_4.0_International_License" title="Wikipedia:Text of the Creative Commons Attribution-ShareAlike 4.0 International License">Creative Commons Attribution-ShareAlike 4.0 License</a>; additional terms may apply. By using this site, you agree to the <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Terms_of_Use" class="extiw" title="foundation:Special:MyLanguage/Policy:Terms of Use">Terms of Use</a> and <a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy" class="extiw" title="foundation:Special:MyLanguage/Policy:Privacy policy">Privacy Policy</a>. Wikipedia® is a registered trademark of the <a rel="nofollow" class="external text" href="https://wikimediafoundation.org/">Wikimedia Foundation, Inc.</a>, a non-profit organization.</li> </ul> <ul id="footer-places"> <li id="footer-places-privacy"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Privacy_policy">Privacy policy</a></li> <li id="footer-places-about"><a href="/wiki/Wikipedia:About">About Wikipedia</a></li> <li id="footer-places-disclaimers"><a href="/wiki/Wikipedia:General_disclaimer">Disclaimers</a></li> <li id="footer-places-contact"><a href="//en.wikipedia.org/wiki/Wikipedia:Contact_us">Contact Wikipedia</a></li> <li id="footer-places-wm-codeofconduct"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Universal_Code_of_Conduct">Code of Conduct</a></li> <li id="footer-places-developers"><a href="https://developer.wikimedia.org">Developers</a></li> <li id="footer-places-statslink"><a href="https://stats.wikimedia.org/#/en.wikipedia.org">Statistics</a></li> <li id="footer-places-cookiestatement"><a href="https://foundation.wikimedia.org/wiki/Special:MyLanguage/Policy:Cookie_statement">Cookie statement</a></li> <li id="footer-places-mobileview"><a href="//en.m.wikipedia.org/w/index.php?title=Short-circuit_evaluation&mobileaction=toggle_view_mobile" class="noprint stopMobileRedirectToggle">Mobile view</a></li> </ul> <ul id="footer-icons" class="noprint"> <li id="footer-copyrightico"><a href="https://wikimediafoundation.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/static/images/footer/wikimedia-button.svg" width="84" height="29" alt="Wikimedia Foundation" loading="lazy"></a></li> <li id="footer-poweredbyico"><a href="https://www.mediawiki.org/" class="cdx-button cdx-button--fake-button cdx-button--size-large cdx-button--fake-button--enabled"><img src="/w/resources/assets/poweredby_mediawiki.svg" alt="Powered by MediaWiki" width="88" height="31" loading="lazy"></a></li> </ul> </footer> </div> </div> </div> <div class="vector-settings" id="p-dock-bottom"> <ul></ul> </div><script>(RLQ=window.RLQ||[]).push(function(){mw.config.set({"wgHostname":"mw-web.codfw.main-f69cdc8f6-w49w4","wgBackendResponseTime":174,"wgPageParseReport":{"limitreport":{"cputime":"0.514","walltime":"1.126","ppvisitednodes":{"value":2585,"limit":1000000},"postexpandincludesize":{"value":41126,"limit":2097152},"templateargumentsize":{"value":4376,"limit":2097152},"expansiondepth":{"value":16,"limit":100},"expensivefunctioncount":{"value":16,"limit":500},"unstrip-depth":{"value":1,"limit":20},"unstrip-size":{"value":68175,"limit":5000000},"entityaccesscount":{"value":0,"limit":400},"timingprofile":["100.00% 1042.517 1 -total"," 16.51% 172.101 2 Template:Reflist"," 13.03% 135.792 9 Template:Cite_web"," 8.68% 90.458 1 Template:Evaluation_strategy"," 8.30% 86.559 1 Template:Sidebar"," 7.53% 78.513 1 Template:Short_description"," 6.58% 68.584 1 Template:More_citations_needed"," 6.04% 62.976 1 Template:Ambox"," 4.70% 48.963 2 Template:Pagetype"," 3.33% 34.726 1 Template:John_McCarthy"]},"scribunto":{"limitreport-timeusage":{"value":"0.305","limit":"10.000"},"limitreport-memusage":{"value":7062345,"limit":52428800}},"cachereport":{"origin":"mw-web.eqiad.main-5dc468848-pbj4m","timestamp":"20241122140800","ttl":2592000,"transientcontent":false}}});});</script> <script type="application/ld+json">{"@context":"https:\/\/schema.org","@type":"Article","name":"Short-circuit evaluation","url":"https:\/\/en.wikipedia.org\/wiki\/Short-circuit_evaluation","sameAs":"http:\/\/www.wikidata.org\/entity\/Q605499","mainEntity":"http:\/\/www.wikidata.org\/entity\/Q605499","author":{"@type":"Organization","name":"Contributors to Wikimedia projects"},"publisher":{"@type":"Organization","name":"Wikimedia Foundation, Inc.","logo":{"@type":"ImageObject","url":"https:\/\/www.wikimedia.org\/static\/images\/wmf-hor-googpub.png"}},"datePublished":"2004-06-04T19:31:10Z","dateModified":"2024-04-28T17:34:02Z","headline":"type of semantics in some programming languages"}</script> </body> </html>