Tillegg til kompendiet

Dette skrivet beskriver endringer til kompendiet oppdaget i l?pet av semesteret.

Metodene RuntimeValue.toString og Runtime.showInfo

Disse to metodene skal brukes til ? skrive ut verdier; den f?rste skal brukes n?r programmeren kaller p? print-funksjonen (som skal skrives i del 4) og den andre ved sporing (?tracing?). De vil nesten alltid oppf?fre seg likt; den eneste forskjellen er for string-verdier: de skal ha med anf?rselstegn i Runtine.showInfo men ikke for Runtime.toString.

public String showInfo() {
    return showInfo(new ArrayList<RuntimeValue>(), false);
} 

@Override 
public String toString() { 
    return showInfo(new ArrayList<RuntimeValue>(), true); 
} 

Derfor er begge implementert med et kall p? samme metode: showInfo med to parametre. Siste parameter angir om verdien skal brukes til print-funksjonen eller ikke. (F?rste parameter blir forklart litt senere.)

abstract protected String showInfo(ArrayList<RuntimeValue> inUse,
    boolean toPrint); 

N?r dere skal lage nye RuntimeXxxValue-klasser, trenger dere ikke ta hensyn til parameteren inUse. Se for eksempel p? klassen RuntimeBoolValue:

@Override
protected String showInfo(ArrayList<RuntimeValue> inUse, boolean toPrint) {
    return (boolValue ? "True" : "False");
}

eller RuntimeNoneValue:

@Override
protected String showInfo(ArrayList<RuntimeValue> inUse, boolean toPrint) {
    return "None";
}

Dere finner begge to i prekoden.

Bakgrunn (for spesielt interesserte)

Hvorfor benytter referanseinterpreten denne litt kompliserte l?sningen med parameteren inUse? Grunnen er at det er mulig ? lage en rekursiv liste i Asp, for eksempel slik:

a = [ 1, 2 ]
a[1] = a

og tilsvarende for ordb?ker. N?r interpreten skal skrive ut en slik liste eller ordbok uten ? sjekke om den er rekursiv, vil interpreten krasje. Det m? vi unng?.

Men, det er alts? kun ved utskrift av lister og ordb?ker vi trenger ? ta hensyn til dette, og som sagt er dette ikke noe som forventes av deres l?sning. Derfor kan dere trygt ignorere parameteren inUse i deres implementasjon.

Av Dag Langmyhr
Publisert 22. okt. 2020 18:21 - Sist endret 22. okt. 2020 18:21