2011/8/2 Jürgen Hestermann <[email protected]>: > And it also saves the program from > calculating array indices and other references in these expressions multiple > times so it speeds up the code too.
I didn't know that, but indeed it does. > I.e., if you have an expression like > this: > > ----------------------------------------------------------------------- > AusdehnungInMeter := > (Qarray[QuaderNr]^.Teilung[R].Feldgrenzen[length(Qarray[QuaderNr]^.Teilung[R].Einteilungen)+1] > - > > Qarray[QuaderNr]^.Teilung[R].Feldgrenzen[1]) * > > EinheitAuswahl[Uebergabe^.Einheit.Koord[R]].Faktor; > ----------------------------------------------------------------------- > > it is much easier to read (and calculate) in a with statement: > > ----------------------------------------------------------------------- > with Uebergabe^, Qarray[QuaderNr]^.Teilung[R] do > AusdehnungInMeter := (Feldgrenzen[length(Einteilungen)+1] - > Feldgrenzen[1]) * > > EinheitAuswahl[Einheit.Koord[R]].Faktor; > ----------------------------------------------------------------------- > In case Qarray[QuaderNr]^.Teilung[R] is an object I usually do: tmp := Qarray[QuaderNr]^.Teilung[R]; AusdehnungInMeter := (tmp.Feldgrenzen[length(tmp.Einteilungen)+1] - tmp.Feldgrenzen[1]) * EinheitAuswahl[Uebergabe^.Einheit.Koord[R]].Faktor; It results in a similar code than using "with", because from what I see "with" creates an implicit local var or uses a register to store the address. For records one could use tmp as a pointer to the record, and then refer to tmp^. -- cobines -- _______________________________________________ Lazarus mailing list [email protected] http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus
