Iedereen is vast wel eens tegen het volgende probleem aangelopen: zolang de uitvoer van een langdurende functie een bepaald resultaat oplevert, moet er iets met die waarde gebeuren.
Op deze manier roep je de functie natuurlijk 2 maal aan, wat natuurlijk onnodig is.
Een andere optie is:
Op deze manier roep je per keer de functie maar 1 maal aan, maar dit heeft als nadeel dat je dezelfde regel code 2 maal moet gebruiken, 1 maal voor de while, en 1 maal erin.
Wat je eigenlijk wilt hebben is dat je beide kunt combineren. Omdat ik in de Help niets kon vinden, ben ik zelf aan het programmeren geslagen. De uitkomst was uiteindelijk zo simpel en doeltreffend, dat ik het niet kon laten om het met jullie te delen
De vraag die mij nu bezig houdt is of ik het wiel opnieuw heb uitgevonden. zijn er andere constructies die eenzelfde resultaat hebben, of kan Delphi dit misschien van zichzelf?
Delphi:
1
2
3
4
| while langdurigefunctie(veelparameters)>0 do begin iets_met(langdurigefunctie(veelparameters)); end; |
Op deze manier roep je de functie natuurlijk 2 maal aan, wat natuurlijk onnodig is.
Een andere optie is:
Delphi:
1
2
3
4
5
6
| temp:=langdurigefunctie(veelparameters); while temp>0 do begin iets_met(temp); temp:=langdurigefunctie(veelparameters); end; |
Op deze manier roep je per keer de functie maar 1 maal aan, maar dit heeft als nadeel dat je dezelfde regel code 2 maal moet gebruiken, 1 maal voor de while, en 1 maal erin.
Wat je eigenlijk wilt hebben is dat je beide kunt combineren. Omdat ik in de Help niets kon vinden, ben ik zelf aan het programmeren geslagen. De uitkomst was uiteindelijk zo simpel en doeltreffend, dat ik het niet kon laten om het met jullie te delen
Delphi:
1
2
3
4
5
6
7
8
| function assign(var v:integer; f:integer):integer; begin v:=f; result:=f; end; while assign(temp,langdurigefunctie(veelparameters))>0 do iets_met(temp); |
De vraag die mij nu bezig houdt is of ik het wiel opnieuw heb uitgevonden. zijn er andere constructies die eenzelfde resultaat hebben, of kan Delphi dit misschien van zichzelf?
- This line is intentionally left blank -