| Autor |
Beitrag |
Carla
      
Beiträge: 111
Erhaltene Danke: 2
|
Verfasst: Fr 17.08.07 13:15
Mich würde eine Meinung zu nachfolgendem Streit interessieren.
Programmierstil bei einer nicht erfüllten If - Bedingung.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10:
| procedure ... begin if Editmode then begin if Records > 0 then begin
end; end; |
oder
Delphi-Quelltext 1: 2: 3:
| procedure ... begin if (not Editmode) or (Records = 0) then exit; |
Ich meine das die 2. Anweisung übersichtlicher ist, unser Objectguru meint, das exit ein verstecktes goto und deshalb böse ist.
Gruß
Carla
Moderiert von Christian S.: Delphi-Tags hinzugefügt
|
|
Chryzler
      
Beiträge: 1097
Erhaltene Danke: 2
|
Verfasst: Fr 17.08.07 13:25
Erstmal ist der Programmierstil bei beiden Beispielen schlecht, weil du den Quelltext nicht in die Delphi-Tags [ delphi]...[ /delphi] eingeschlossen hast ( Christian S. war so freundlich und hat deinen Post mittlerweile verbessert).
Also ich würde weder die erste noch die zweite Variante nehmen:
Delphi-Quelltext 1: 2: 3: 4:
| if Editmode and (Records > 0) then begin
end; |
Allerdings benutze ich auch in manchen Fällen deine zweite Variante, vorallem wenn in den entstehenden If-Blöcken sehr viel Code steht.
Delphi-Quelltext 1: 2: 3:
| if not OpenDialog1.Execute then Exit; |
|
|
noidic
      
Beiträge: 851
Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
|
Verfasst: Fr 17.08.07 13:25
Ich würd den dritten Weg gehen,
Delphi-Quelltext 1:
| if (EditMode) and (Records > 0) then... |
Ob exit böse ist hängt meiner Meinung nach davon ab, wie gross und übersichtlich die restliche Funktion ist. Wenn das in einer unübersichtlichen Funktion irgendwo in der 3. Schachteltiefe steckt, würd ich Teer und Federn auspacken, wenn die Funktion ansonsten nen 10-Zeiler ist find ichs ok.
_________________ Bravery calls my name in the sound of the wind in the night...
|
|
Gausi
      
Beiträge: 8554
Erhaltene Danke: 481
Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
|
Verfasst: Fr 17.08.07 13:26
Allgemein sollte man Exit nicht so oft benutzen. Wenn ganz am Anfang der Prozedure eine Bedingung abgefragt wird, die für die Ausführung unbedingt erfüllt sein muss, dann hab ich in der ersten Zeile schonmal ein Exit drin. Dann spart man sich für die ganze Prozedur eine begin-end-Ebene. Ansonsten versuche ich, sowas zu vermeiden - das wird nämlich schnell unübersichtlich.
_________________ We are, we were and will not be.
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 17.08.07 13:28
exit hat zwar die Wirkung eines gotos, aber mit der wichtigen Einschränkung, dass immer nur ans Ende der Routine gesprungen wird und nicht wild im Quellcode hin und her. Und ich finde es schon übersichtlicher, denn dann weiß ich gemau, was passiert: Der restluiche Code wird nicht mehr abgearbeitet. Ohne exit müsste man den ganzen Code durchgucken, um zu sehen, was bei nicht erfüllen der Bedingung passiert.
|
|
Carla 
      
Beiträge: 111
Erhaltene Danke: 2
|
Verfasst: Fr 17.08.07 14:47
Erst mal danke für die Delphi Tags. Das nächste mal weis ich es.
Der Grund für die Frage.
Ich passe ein Delphiprojekt an und da kommt in einer procedure nach den zwei if Abfragen, welche eine Eingangsbedingung
darstellen, 3 Seiten Quellcode mit mit vielen Beginn - end und try - finally Blöcken.
Alternativ könnte man ja die Eingangsbedingung in den Aufruf unterbringen?
Also
Delphi-Quelltext 1:
| if (not Editmode) and (Record>0) then RufeProcedure |
Carla
|
|
Wolle92
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Fr 17.08.07 15:36
das halte ich für eine übersichtiliche Methode...
Zumindest, wenn die Abfrage ziwschen vielen anderen Prozeduren steht...
dann kann man den Kernblock am Anfang oder an das Ende des Programms schreiben... oder extern, in einer DLL, wenn es wirklich sehr viel Code ist, ist es sicher nützlich, die Prozedur in eine DLL zu schreiben, dann ist der ganze Text erstmal weg...
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Fr 17.08.07 15:37
Drei Seiten Quellcode sind zu viel, da hat mankeine Übersicht mehr. Teile den Quellcode in einzelne Routinen auf.
|
|
Wolle92
      
Beiträge: 1296
Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
|
Verfasst: Fr 17.08.07 16:17
Ja, ist dann aber trotzdem noch viel Text... würde dann für die Routinen DLLs oder neue Units machen
|
|
Carla 
      
Beiträge: 111
Erhaltene Danke: 2
|
Verfasst: Sa 18.08.07 09:37
Wolle92 hat folgendes geschrieben: | | Ja, ist dann aber trotzdem noch viel Text... würde dann für die Routinen DLLs oder neue Units machen |
Der Text ist nicht von mir, ich muss "nur" Anpassungen vornehmen.
Das Programm ist übrigens schon eine dll.
Gruß
Carla
|
|