Rövidzáras kifejezés-kiértékelés

A Programozás Wiki wikiből

A rövidzáras kifejezés-kiértékelés egy számos programozási nyelvben jelenlévő, a logikai kifejezések kiértékelésében szerepet játszó módszer, amelynek lényegét azt képezi, hogy az összetett kifejezések kiértékelését csakis addig és olyan mélységben végezzük el, ameddig az feltétlenül szükséges ahhoz, hogy az adott kifejezés értéke, eredménye eldönthető legyen. Ezzel összefüggésben a kiértékelés során a teljes kifejezés azon részei - alkifejezései és operandusai - amelyek a végeredményt adott esetben már nem tudnák befolyásolni, megváltoztatni, nem kerülnek kiértékelésre és végrehajtásra.

A rövidzáras kiértékelés előnye, hogy gyorsabbá teheti összetett és nagy műveletigényű kifejezések kiértékelését. Hátránya, hogy - mivel a függvényben szereplő operandusok és alkifejezések értékétől teszi függővé azt, hogy a kiértékelés során pontosan milyen műveletek kerülnek ténylegesen elvégzésre - megnehezíti a kiértékelés során és részeként meghívott függvények vagy író jellegű operátorok esetén az elvégzett adatmódosítások körének meghatározását pusztán a kód áttekintése alapján.

A módszer alapját az képezi, hogy bizonyos több-operandusos logikai műveletek eredménye már az első operandusuk alapján egyértelműen eldönthető. Pl.

  • Logikai VAGY művelet esetében ha az első operandus IGAZ, a művelet eredménye is mindenképpen IGAZ lesz, függetlenül a második operandus értékétől
  • Logikai ÉS művelet esetében ha az első operandus HAMIS, a művelet eredménye is mindenképpen HAMIS lesz, függetlenül a második operandus értékétől

Alkalmazása vezérlési szerkezetként[szerkesztés]

A rövidzáras kifejezés-kiértékelést a program működésének gyorsítása mellett rejtett feltételes elágaztatásra is fel lehet használni. Ezen kívül különösen hasznos lehet olyan halmozott feltételek egyetlen feltételbe történő összefűzésére, amelyek érvényessége csak progresszív módon garantált. Például az
if (length(array)>0) then if (array[1]<>0) then x;
halmozott feltételes elágazás rövidzáras kifejezés-kiértékelés esetében biztonságosan összevonható egyetlen
if ((length(array)>0) and (array[1]<>0)) then x;
elágazássá; erre azonban a teljes logikai kifejezés-kiértékelés esetében nincs mód, ott ugyanis a második részfeltétel is mindenképpen kiértékelésre kerül az első eredményétől függetlenül, ami azonban a példában üres tömb esetén kivételt vagy futásidejű hibát okoz. Ez utóbbi rövidzáras kifejezés-kiértékelés esetében nem következik be, hiszen a második részfeltétel csakis akkor kerül kiértékelésre, ha az első igaznak bizonyult, azaz a tömb nem volt üres.