Ivrig evaluering
Inden for programmering er ivrig evaluering (eller grådig evaluering) en strategi som de fleste traditionelle programmeringssprog anvender. Ved ivrig evaluering bliver udtryk evalueret så snart de bliver bundet til en variabel. Ivrig evaluering står i modsætning til doven evaluering hvor udtryk først bliver evalueret når et udtryk som afhænger af dens værdi bliver evalueret. Et eksempel på et sprog som benytter doven evaluering er Haskell. I imperative sprog bruges ivrig evaluering næsten udelukkende, nogle gange med undtagelse af enkelte logiske operatorer.
Fordel ved anvendelse af ivrig evaluering
[redigér | rediger kildetekst]En fordel ved ivrig evaluering er at programmøren kan diktere rækkefølgen for udførelsen af programmets dele. Det kan have en betydning når underudtryk har sideeffekter såsom filoperationer, hvor programmets videre udførsel afhænger af at de er foretaget på det rigtige tidspunkt.
Ulempe ved anvendelse af ivrig evaluering
[redigér | rediger kildetekst]En ulempe ved ivrig evaluering er at det tvinger beregningen af udtryk som måske aldrig bliver brugt til noget, eller som måske først skal bruges senere i programmets udførsel, hvilket kan spærre for den umiddelbare beregning af et udtryk som skal bruges før.
Programmeringseksempel 1
[redigér | rediger kildetekst]Et eksempel på dette, skrevet i programmeringssproget Python:
# Beregner det n'te Fibonacci-tal
def fibonacci(n):
if n == 0:
return 0
elif n == 1:
return 1
else:
return fibonacci(n-1) + fibonacci(n-2)
# Udskriver x, smider y væk
def udskriv_svar(x, y):
print("Svaret er " + str(x))
udskriv_svar(42, fibonacci(33))
Programmeringseksempel 2
[redigér | rediger kildetekst]Et eksempel på en doven operator, i programmeringssproget PHP, hvor udtrykket på højresiden af ||-operatoren kun bliver udført hvis det er nødvendigt. I dette tilfælde afslutter programmet uden at die("Panda er trist.") bliver kørt.
<?php
$er_panda_glad = true;
$er_panda_glad || die("Panda er trist.");
?>
Bemærkning
[redigér | rediger kildetekst]Det er værd at bemærke at mange moderne compilere kan både eliminere kode som ikke har nogen virkning og planlægge udførslen af instruktioner for bedre at anvende processorens ressourcer.