„Rövidzáras kifejezés-kiértékelés” változatai közötti eltérés

Innen: Programozás Wiki
Ugrás a navigációhozUgrás a kereséshez
(kódot külön sorba (olvashatóság))
1. sor: 1. sor:
A rövidzáras kifejezés-kiértékelés egy számos [[programozási nyelv|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 mindig csak az eredmény biztos eldöntésének szintjéig kerülnek kiértékelésre - ezáltal potenciálisan jelentős feldolgozási időt megspórolva, ugyanakkor a végrehajtott műveletek sorát és halmazát feltételes elágazás nélkül is változóvá téve.  
+
A rövidzáras kifejezés-kiértékelés egy számos [[programozási nyelv|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 módszer alapját az képezi, hogy bizonyos több-[[operandus|operandusos]] logikai műveletek eredménye már az első operandusuk alapján egyértelműen eldönthető. Például ha két egymással ÉS logikai kapcsolatban lévő operandus közül az elsőről kiderül, hogy az 'hamis', a második operandust már nem érdemes kiértékelni, mert az őket befoglaló (rész)kifejezés értéke mindenképpen 'hamis' lesz. Hasonló módon logikai VAGY kapcsolat esetében ha az első operandus 'igaz', a második operandus kiértékelése már nem szükséges a (rész)kifejezés eredményének megállapításához, mert az mindenképpen 'igaz' lesz.
+
A lusta 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-[[operandus|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
  
 
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ágazás|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 <br>
 
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ágazás|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 <br>

A lap 2012. május 23., 01:15-kori változata

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 lusta 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

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.