Ligt eraan wat je doet in je loop.
Delphi:
1
2
3
4
5
6
7
| procedure TSomeObject.InitArray();
var Col, Row: Integer;
begin
for Col := 9 downto 0 do
for Row := 9 downto 0 do
SomeArray[Col][Row] = (Col + 1) * (Row + 1);
end; |
Ik zie echt niet in hoe je daarbij niet kunt overzien wat het doet?
Je kunt het herschrijven naar
Delphi:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
| procedure TSomeObject.InitArray();
procedure InitArrayCell(const Col, Row: Integer);
begin
SomeArray[Col][Row] := (Col + 1) * (Row + 1);
end;
procedure InitArrayRow(const Col: Integer);
var Row: Integer;
begin
for Row := 9 downto 0 do
InitArrayCell(Col, Row);
end;
var Col: Integer;
begin
for Col := 9 downto 0 do
InitArrayRow(Col);
end; |
maar dat voegt totaal niets toe. Ja, als je per regel code betaald wordt.
Als je zoiets simpels als generiek en herbruikbaar wilt maken dan sla je imo veel te ver door. Voor jouw "met een klein beetje extra code een specifieke sectie uit een dimensie opvragen, bijvoorbeeld de tafel van 5" moet je ten eerste al 4x zoveel code schrijven om het uberhaupt mogelijk te maken, en dan nog zit je met het verschil tussen
Delphi:
1
2
3
4
5
6
7
| var i: Integer;
for i := 1 to 10 do
Write(SomeObject.SomeArray[5 - 1][i -1]; // arrays zijn 0-based.
// vs.
Write(SomeObject.getTafel(5)); |
Ik ben het met je eens dat, als je dan toch alles met objecten doet enzo, getTafel(const tafel: Integer) een stuk mooier is als zelf de interne data doorlopen, maar wat denk je dat getTafel nu helemaal doet?
We kregen les in Java. Opdracht: Teken een circel op het scherm, die random van kleur veranderd als je op een knopje drukt. Ik snapte het doel van de les wel (OO leren programmeren, die circel was bijzaak), maar als je dat met minder dan 5 klasses (je form, class Vorm, class Rondje extends Vorm en ik geloof dat actionlisteners ook aparte klasses waren ofzo) deed dan kreeeg je een onvoldoende bij wijze van spreken. Voor het tekenen van 1 $#* circel

Daar kom je later, na school, echt niet meer mee weg. Dan komt je baas vragen waarom je voor het tekenen van 1 circeltje een uur nodig hebt en 5 extra bestanden in moet checken in SVN.
Overigens heb je zowel op de eerste als op de 2e manier een loop in een loop, maar juist bij de 2e manier is dat heel slecht te zien. Bij die eerste (zonder extra procedures) let ik over een half ajar heel goed op als ik de assignment van de array aanpas, bij de 2e weet ik dan echt niet meer zo dat dat een inner loop is en ik die dus klein moet houden. Ik kan me zo voorstellen dat ik over een half jaar wat dure database calls in InitArrayCell zou kunnen zetten.
[
Voor 3% gewijzigd door
Paul op 01-02-2007 19:41
]