| Autor |
Beitrag |
Starido
Hält's aus hier
Beiträge: 8
|
Verfasst: Sa 24.04.10 13:27
Moinmoin Community habe hier eine kleine Frage, bin noch Anfänger.
Mein eigenes kleines Programm hat die 10.000 Zeilen überboten und nun leidet die Übersicht,
ich habe mich nun entschlossen den Quelltext der einzelnen Button.Clicks in kleinere private proceduren zu packen um noch ein wenig die Übersicht zu behalten.
Beim einen Button zum Beispiel habe ich nun aus 2.000 Zeilen 5 gemacht, sprich die 5 einzelnen proceduren.
Die Frage beeinflusst das i-wie die Flüssigkeit des Programms sollte ich es weiter so machen sprich weiter viele private prozeduren zu erstellen, oder hat es sonst i-welche Risiken?
Es handelt sich beim Programm um ein/e Spiel/Funktion mit sehr vielen repeat/until,if then Funktionen
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| private procedure Menuwechsel; procedure Motorenreperatur; procedure Wetterwechsel; procedure Startreifen; procedure KITanken; ....
procedure THomeF1Manager.AktionClick(Sender: TObject); begin Menuwechsel; Motorenwechsel; Wetterwechsel; Startreifen; KITanken; end; |
mfg Fabian (Starido)
Moderiert von Gausi: Delphi-Tags hinzugefügt
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 24.04.10 13:43
Hallo und  in der Entwickler-Ecke
Was du da vorhast, ist höchstwahrscheinlich eine sehr gute Idee.
Es gibt sogar Leute, die die Ansicht vertreten, dass eine Funktion oder Prozedur nie länger als eine Bildschirmseite sein sollte. Wenn doch, sollte man den Code in Teilfunktionen aufsplitten. Ganz so eng sehe ich das nicht, aber eine Procedure mit 2000 Zeilen ist dann doch etwas zu lang für meinen Geschmack. Und wenn die Aufteilung problemlos möglich ist, dann sollte man das auch tun.
Bei einem Funktionsaufruf gibt es zwar afaik einen kleinen Overhead, der aber in fast allen Fällen zu vernachlässigen ist.
_________________ We are, we were and will not be.
|
|
Jakob_Ullmann
      
Beiträge: 1747
Erhaltene Danke: 15
Win 7, *Ubuntu GNU/Linux*
*Anjuta* (C, C++, Python), Geany (Vala), Lazarus (Pascal), Eclipse (Java)
|
Verfasst: Sa 24.04.10 15:06
Ansonsten gibt es dafür aber auch in Delphi das Schlüsselwort inline:
Delphi-Quelltext 1:
| function Irgendwas: Integer; inline; |
bei der Deklaration sollte jegliche Performance-Probleme beheben.
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 24.04.10 15:13
Ja, aber das sollte man hier wohl kaum anwenden. 
_________________ We are, we were and will not be.
|
|
Starido 
Hält's aus hier
Beiträge: 8
|
Verfasst: Sa 24.04.10 15:39
Danke für die schnelle Antwort ergibt sich mir nurnoch ein Problem, dadurch das mein Programm immer größer wurde dauert es nun an die 30 Minuten bis die Schleife einmal durchläuft, gibt es da Tricks wie man das verkürzen könnte auf 10 Minuten wenigstens?
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 24.04.10 15:44
Das kommt ganz darauf an, was da passiert. Für viele Probleme gibt es schnelle und langsame Algorithmen. Und auch beim Code selbst kann man oft was drehen. Wenn du z.B. viele Application.ProcessMessages in deinem Schleifencode hast, ist das sehr oft eine starke Bremse, oder ungeschickt implementiertes Leeren von großen "TStringList" , oder ...
_________________ We are, we were and will not be.
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Sa 24.04.10 15:44
Wir können dir da ohne Code nicht helfen.  Aber ich denke bei der erdrückenden Menge Code würde eine Prozedur reichen.
_________________ Die Lösung ist nicht siebzehn.
|
|
Starido 
Hält's aus hier
Beiträge: 8
|
Verfasst: Sa 24.04.10 15:54
Also es sind c.a 200 if then bedingungen in jeder repeat until schleife die von 1.000.000 bis 0 (Integer)(Extended) geht drin davon hatte ich erst 3 jetzt 2 drin
Das klingt selbst für mich schon sehr bremsend.
der quelltext wäre hier zu posten viel zu lang.
Das Problem ich bekomme es im moment nicht kürzer da sich die anweisung zwar jeweils 20 mal wiederholen und nur die variablen sich ändern, wovon auch c.a. 100 in den jeweiligen schleifen drin sind.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 24.04.10 15:59
Mindestens einen Ausschnitt brauchen wir schon.
Aber nach deiner Beschreibung denke ich einmal:
- Arrays
- Keine direkte Arbeit mit der VCL
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Starido 
Hält's aus hier
Beiträge: 8
|
Verfasst: Sa 24.04.10 16:03
Dies der größte Teil, der 20 mal in der einen Schleife steht jeweils nur die Zahl hinter den Variablen geändert
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85: 86: 87: 88: 89: 90: 91: 92: 93: 94: 95: 96: 97: 98: 99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110:
| x:=1000000; repeat x:=x-1; ...
if ZU3 = X then begin if Aktion.Caption = 'Rennen!' then begin if Z3 = 1 then begin EgMemo.Lines.Add('Motorschaden'); Renninfo.Lines.Add(''+(F3)+' hat einen Motorschaden'); DNF3:=1; M3:=5000; end; if DNF3 = 0 then begin if ZF3 > 5 then begin ReMemo.Lines.Add(''+(F3)+''); Tankstops.Lines.Add(''+floattostr(TA3)+''); if XY = 0 then begin XY:=XY+1; ZX:=ZU3; EgMemo.Lines.Add(''+floattostr(ZU3)+''); end else begin ZE3:=ZX-ZU3; ZE3:=ZE3/1000; EgMemo.Lines.Add('+'+floattostr(ZE3)+''); end; if RV2=0 then begin Reifen.Lines.Add('B'); end; if RV2=1 then begin Reifen.Lines.Add('M'); end; end; if ZF3 = 0 then begin Renninfo.Lines.Add('Runde '+floattostr(RU)+' - '+(F3)+' bleibt im Kiesbett stecken, das Rennen ist für ihn beendet'); DNF3:=1; ZF3:=100; end; if ZF3 = 1 then begin Renninfo.Lines.Add('Runde '+floattostr(RU)+' - '+(F3)+' kollidiert, sein Frontflügel ist ab'); ZU3:=ZU3-25000; TA3:=TA3+1; ZF3:=100; end; if ZF3 = 2 then begin Renninfo.Lines.Add('Runde '+floattostr(RU)+' - '+(F3)+' hat sich gedreht'); ZU3:=ZU3-5000; ZF3:=100; end; if ZF3 = 3 then begin Renninfo.Lines.Add('Runde '+floattostr(RU)+' - '+(F3)+' berührt seinen Vordermann, beide rutschen von der Strecke'); ZU3:=ZU3-2500; ZF3:=100; end; if ZF3 > 3 then begin if ZF3 < 6 then begin Renninfo.Lines.Add('Runde '+floattostr(RU)+' - '+(F3)+' war kurz neben der Strecke'); ZU3:=ZU3-1000; ZF3:=100; end; end; if Y=1 then begin P3:=P3+PR1; GS3:=GS3+1; end; if Y=2 then begin P3:=P3+PR2; if ZU3 > 10 then begin if TeamS = 1 then begin DominS:=DominS+1; end; end; end; if Y=3 then begin P3:=P3+PR3; end; if Y=4 then begin P3:=P3+PR4; end; if Y=5 then begin P3:=P3+PR5; end; if Y=6 then begin P3:=P3+PR6; end; if Y=7 then begin P3:=P3+PR7; end; if Y=8 then begin P3:=P3+PR8; end; if Y=9 then begin P3:=P3+PR9; end; if Y=10 then begin P3:=P3+PR10; end; if Aktion.Visible = False then begin if Y < 11 then begin STR3:=STR3+11-Y; end; end; Y:=Y+1; end; end; end; ...
until x=0 |
Moderiert von Gausi: Delphi-Tags hinzugefügt
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 24.04.10 16:03
Da stellt sich dann die Frage: Muss das 1.000.000 bis 0 wirklich sein? Was willst du damit erreichen? Was soll dein Code machen? Dann kann man evtl. darüber nachdenken, wie man das mit anderen Mitteln erreicht.
Primitives Beispiel: Zahlen sortieren. Man kann alle Permutationen durchprobieren, bis die Zahlen sortiert sind (ich nenne das Verfahren einfach mal "optimiertes Bogosort"  ). Daran rechnet dein Programm dann meinetwegen zwei Stunden. Nimmst du Bubblesort, dauert das noch 5 Minuten. Und wenn du Quicksort nimmst, sind die Zahlen in Nullkommanix sortiert (meistens jedenfalls).
_________________ We are, we were and will not be.
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Sa 24.04.10 16:03
Wie sind denn deine if-Abfragen aufgebaut?
Edit: okay, ich schaus mir grad an
1. Ich würde keine Schleife von 10000000 bis 0 durchzählen, sondern mir ein privates Feld FRaceStopped definieren und dann mit while not FRaceStopped arbeiten. Sobald der User das Rennen beenden will, setzt du FRaceStopped auf true.
2. Was bedeuten deine Variablen? Benutze am beste etwas längere Namen, die dafür aussagekräftiger sind (oder Kommentare)
3. Kann man PR3..PR10 nicht durch ein Array ausdrücken?
4. Und hier:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7:
| if Y=3 then begin P3:=P3+PR3; end; if Y=4 then begin P3:=P3+PR4; [...] end; |
kannst du auch mit case arbeiten!
5. Benutze doch für jeden Wagen ein eigenes Objekt. Dann kannst du mit einem array of car arbeiten.
Beispiel:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| type TParts = set of (pFrontflügel, pMotor...); class TCar = class private FSpeed : Word; FDead : Boolean; FParts : TParts; [...] end; |
_________________ Die Lösung ist nicht siebzehn.
Zuletzt bearbeitet von Mitmischer 1703 am Sa 24.04.10 16:15, insgesamt 3-mal bearbeitet
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 24.04.10 16:11
Kleine Offtopic-Frage: Sieht der gesamte Code so aus? Mehrere 100 oder gar 1000 Zeilen in der Art?
Respekt, dass du da noch durchsteigst.
Was mir so auf Anhieb auffällt: Schau dir mal case...of an. Damit kannst du dir schonmal eine ganze Reihe Ifs sparen. Generell würde ich aber sagen: Schmeiß dein Konzept über den Haufen und versuche, das mal etwas zu sortieren. Stichwort Objekt-orientiertes Programmieren. Dürfte hier angebracht sein. 
_________________ We are, we were and will not be.
|
|
BenBE
      
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Sa 24.04.10 16:15
Also anhand deiness Beispiels würde ich schon einmal stark zur Nutzung von Arrays tendieren. Statt also 20 Variablen ZU1 bis ZU20 zu haben, hast Du eine Variable ZU und kannst auf die 20 Werte dann mit ZU[i] zugreifen, wobei i dein Index auf das Array ist.
Gleiches geht z.B. auch für die Variablen P[i], PR[i], ... Im Falle von PR können dann die Abfragen sogar entfallen, da du einfach P[i] := P[i] + PR[Y]; machen kannst.
Bzgl. des Memo's ggf. ein Tipp: Das Updaten der VCL kann sehr lange dauern. Daher sollte man Änderungen an VCL-Komponenten dieser immer ankündigen, so dass diese insgesamt neugezeichnet werden. Bei einem Memo geht das mit TMemo.Lines.BeginUpdate; und TMemo.Lines.EndUpdate; I.d.R. bringt das schon mal einiges an Performance, wenn regelmäßige Änderungen stattfinden UND man durch diese Anweisungen Änderungen wirklich bündelt..
_________________ Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
|
|
Starido 
Hält's aus hier
Beiträge: 8
|
Verfasst: Sa 24.04.10 16:16
Die Variablen sind abkürzungen, PR=Punkte zu Reglement,F=Fahrer,Z=Zeit,ZE=ZEitgesammt,ZU=ZeitUnterschied,B=Benzin
schaue mir jetzt erstmal das case of und die anderen dinge an,
ja mein ganzes Programm ist so aufgebaut, ich wette von den 10.000 Zeilen sind nur 500-1.000 wirklich nötig aber da ich noch neuling bin und die meißten befehle nicht kenne habe ich bisher andere lösungswege gesucht die meißt sehr lang sind.
Also Ich will die Werte sortieren, hab mir alle möglichkeiten ma angesehen, hat meißt nicht geklappt, bin dann auf diese möglichkeit umgestiegen, die werte gehen in den 6 stelligen bereich deswegen von 1.000.000 bis 0.
der Fahrer der den höchsten wert hat durchläuft als erstes, darstellung umrechnung der zeit in rückstand, ermittlung benzin,motorenzustand etc.
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 480
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Sa 24.04.10 16:22
Starido hat folgendes geschrieben : |
Also Ich will die Werte sortieren, hab mir alle möglichkeiten ma angesehen, hat meißt nicht geklappt, bin dann auf diese möglichkeit umgestiegen, die werte gehen in den 6 stelligen bereich deswegen von 1.000.000 bis 0.
der Fahrer der den höchsten wert hat durchläuft als erstes, darstellung umrechnung der zeit in rückstand, ermittlung benzin,motorenzustand etc. |
Heißt das, ich habe mit dem Sortieren einen Treffer gelandet  ? Weil du 20 Werte im Bereich von 0 bis 1.000.000 nicht sortieren kannst, testest du alle 1 Million Wertemöglichkeiten durch um dann bei einem "Treffer" eine bestimmte Aktion durchzuführen?
Wow. Das ist Worst-Case-Programmierung in Reinstform. 
_________________ We are, we were and will not be.
|
|
Starido 
Hält's aus hier
Beiträge: 8
|
Verfasst: Sa 24.04.10 16:28
Genau so ist es.
Ich war sehr ungeduldig beim verstehen von Array,Case of, das ichs mir kompliziert gemacht habe da ich i-was machen wollte.
Wie gesagt ich schau mir das jetzt erstma an, das ergebniss zeige ich dann, bei Fragen melde ich mich.
PS:Passiert mir nicht zum ersten mal, Habe auch meine alte Speicherfunktion, jede einzelne Variable einzelnd in ne .txt datei gepackt da ichs anders net verstanden hatte, nur bei mittlerweile knapp 500 variablen ist mir das zu anstrengend, mehr dazu später.
|
|
Xion
      

Beiträge: 1952
Erhaltene Danke: 128
Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
|
Verfasst: Sa 24.04.10 16:38
Mal 6 Vorschläge:
 Kommentare! Ich bin zwar nicht der Meinung, dass eine Funktion mehr Kommentarzeilen haben sollte als Quellcode, aber so ne grobe Beschreibung was da passiert wäre nicht verkehrt. Und wenn es nur ein Wort ist. Besonders bei proceduren, die lange aber nicht verschachtelt sind, kann man prima einzelne Blöcke mit Kommentaren bilden.
z.B.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| [...]
[...]
[...] |
Hilft ungemein.
 Einrücken. Mitunder auch mal 3-4 Tabs. Damit trenne ich die einzelnen verschachtelten while Ausdrücke mehr von einander ab. In deinem Beispielcode z.B. die Befehle in der If-Anweisung einrücken. Und die If-Anweisung evtl auch nochmal
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| if ZU3 = X then begin if Aktion.Caption = 'Rennen!' then begin if Z3 = 1 then begin EgMemo.Lines.Add('Motorschaden'); Renninfo.Lines.Add(''+(F3)+' hat einen Motorschaden'); DNF3:=1; M3:=5000; end; ... |
 Andere Units machen. Nenn die Unit z.B. Auto, lagere dort proceduren aus. Du kannst dann (ohne Klasse für den Anfang) schreiben Auto.Auftanken(500); usw. Hilft auch ungemein die dummen (sry) Variablennamen zu ersetzen.
 Um Variablen zu "packen" kannst du auch ein Record verwenden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TAuto=record Tank: integer; Geschwindigkeit: TPoint; Position: TPoint; end;
var Auto: TAuto; [...] Auto.Tank:=Auto.Tank+500; |
 Variablennamen: Wenn du viele verschiedene Variablen auf einmal verwendest, dann kürze sie nach möglichkeit nicht so ab ^^ Zur Not hat bei mir ne Variable mal 20 Zeichen, hauptsache ich weiß, was sie bedeutet.
 Profiversion: Das programm in einzelne Klassen auslagern. Aber Achtung! Das kostet ne Menge Zeit. Ich hab früher in deinem Stil nen Siedler II Clone in 2Wochen geschrieben. Später hab ich dann den Code durch bessere Mittel um 50% gekürzt. Problem war, es waren diverse Bugs drin, die ich niemals wieder gefunden hab. Lag auch daran, dass ich Funktionen MacheDiesUndDasA und MacheDiesUndDasB hatte, und man aus verschiedenen Situationen ne andre Aufrufen musste  Das ist böse. Aber heute, schön sauber mit Klassen, brauch ich deutlich länger für alles. Dafür hab ich seltenst Bugs, die ich nicht schnell lokalisieren kann.
_________________ a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
|
|
Starido 
Hält's aus hier
Beiträge: 8
|
Verfasst: Sa 24.04.10 17:17
Bevor ich jetzt hier alles falsch mache, habe mich an den arrays versucht und dies ist dabei herausgekommen bei einer funktion die zuvor über 200 Zeilen ging
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30:
| procedure TFormel1Manager.Zeitenberechnungen; begin
for i:=1 to 21 do begin if Reifenvertrag[i] = 0 then begin RT[i]:=S2*60; end; if Reifenvertrag[i] = 1 then begin RT[i]:=S1*60; end;
Motor[i]:=Motor[i]-S1*2-random(8); Benzinmenge[i]:=Benzinmenge[i]-3; Zeiten[i]:=Fahrerstaerken[i]+Teamstaerken[i]; RundeGetroffen[i]:=random(12)+11; Zeiten[i]:=Zeiten[i]*RundeGetroffen[i]-Fronteinstellung[i]-Heckeinstellung[i]; Zeiten[i]:=Zeiten[i]-Reifenkompalibität[i]-Benzinmenge[i]-Wettereinfluss[i]; Zufallsereigniss[i]:=random(500);
if Aktion.Caption = 'Rennen!' then begin Zeitunterschied[i]:=Zeitunterschied[i]+Zeiten[i]; end;
if Motor[i] < 1 then begin Zeit[i]:=1; end;
end; end; |
|
|
Mitmischer 1703
      
Beiträge: 754
Erhaltene Danke: 19
Win 7, Debian
Delphi Prism, Delphi 7, RAD Studio 2009 Academic, C#, C++, Java, HTML, PHP
|
Verfasst: Sa 24.04.10 17:33
Xion hat folgendes geschrieben : | Mal 6 Vorschläge:
Kommentare! Ich bin zwar nicht der Meinung, dass eine Funktion mehr Kommentarzeilen haben sollte als Quellcode, aber so ne grobe Beschreibung was da passiert wäre nicht verkehrt. Und wenn es nur ein Wort ist. Besonders bei proceduren, die lange aber nicht verschachtelt sind, kann man prima einzelne Blöcke mit Kommentaren bilden.
z.B.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| [...]
[...]
[...] |
Hilft ungemein. |
Jap.
Xion hat folgendes geschrieben : | Einrücken. Mitunder auch mal 3-4 Tabs. Damit trenne ich die einzelnen verschachtelten while Ausdrücke mehr von einander ab. In deinem Beispielcode z.B. die Befehle in der If-Anweisung einrücken. Und die If-Anweisung evtl auch nochmal
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| if ZU3 = X then begin if Aktion.Caption = 'Rennen!' then begin if Z3 = 1 then begin EgMemo.Lines.Add('Motorschaden'); Renninfo.Lines.Add(''+(F3)+' hat einen Motorschaden'); DNF3:=1; M3:=5000; end; ... | |
Hmm, also ich rücke nicht mit Tab ein, sondern mit einem Leerzeichen. Finde ich lesbarer, ist wohl Geschmackssache.
Xion hat folgendes geschrieben : |
Um Variablen zu "packen" kannst du auch ein Record verwenden:
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9:
| type TAuto=record Tank: integer; Geschwindigkeit: TPoint; Position: TPoint; end;
var Auto: TAuto; [...] Auto.Tank:=Auto.Tank+500; | |
Öhm... Geschwindigkeit als TPoint? Und ich würde kein Record, sondern eine Klasse benutzen. Damit du Prozeduren (und vor allem Properties z.B. zum Abfangen von negativer Geschwindigkeit) hast, das macht das ganze noch lesbarer und sicherer.
Xion hat folgendes geschrieben : | Variablennamen: Wenn du viele verschiedene Variablen auf einmal verwendest, dann kürze sie nach möglichkeit nicht so ab ^^ Zur Not hat bei mir ne Variable mal 20 Zeichen, hauptsache ich weiß, was sie bedeutet. |
Bei meinen Variablennamen fehlen manchmal Vokale^^
Xion hat folgendes geschrieben : | Profiversion: Das programm in einzelne Klassen auslagern. Aber Achtung! Das kostet ne Menge Zeit. Ich hab früher in deinem Stil nen Siedler II Clone in 2Wochen geschrieben. Später hab ich dann den Code durch bessere Mittel um 50% gekürzt. Problem war, es waren diverse Bugs drin, die ich niemals wieder gefunden hab. Lag auch daran, dass ich Funktionen MacheDiesUndDasA und MacheDiesUndDasB hatte, und man aus verschiedenen Situationen ne andre Aufrufen musste Das ist böse. Aber heute, schön sauber mit Klassen, brauch ich deutlich länger für alles. Dafür hab ich seltenst Bugs, die ich nicht schnell lokalisieren kann. |
Absolut dafür!!! Klassen sind doch das Schöne an Delphi, sonst kannste ja gleich C++ nehmen.
_________________ Die Lösung ist nicht siebzehn.
|
|
|