Autor Beitrag
Carla
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 111
Erhaltene Danke: 2



BeitragVerfasst: Fr 17.08.07 13:15 
Mich würde eine Meinung zu nachfolgendem Streit interessieren.

Programmierstil bei einer nicht erfüllten If - Bedingung.

ausblenden 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

ausblenden 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 user profile iconChristian S.: Delphi-Tags hinzugefügt
Chryzler
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 1097
Erhaltene Danke: 2



BeitragVerfasst: 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 (user profile iconChristian S. war so freundlich und hat deinen Post mittlerweile verbessert).

Also ich würde weder die erste noch die zweite Variante nehmen:
ausblenden 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.
ausblenden Delphi-Quelltext
1:
2:
3:
if not OpenDialog1.Execute then
  Exit;
// ganz viel Code...
noidic
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 851

Win 2000 Win XP Vista
D7 Ent, SharpDevelop 2.2
BeitragVerfasst: Fr 17.08.07 13:25 
Ich würd den dritten Weg gehen,

ausblenden 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
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 8554
Erhaltene Danke: 481

Windows 7, Windows 10
D7 PE, Delphi XE3 Prof, Delphi 10.3 CE
BeitragVerfasst: 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



BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 111
Erhaltene Danke: 2



BeitragVerfasst: 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

ausblenden Delphi-Quelltext
1:
if (not Editmode) and (Record>0) then RufeProcedure					



Carla
Wolle92
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: 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



BeitragVerfasst: 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
ontopic starontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic star
Beiträge: 1296

Windows Vista Home Premium
Delphi 7 PE, Delphi 7 Portable, bald C++ & DirectX
BeitragVerfasst: 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 Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 111
Erhaltene Danke: 2



BeitragVerfasst: Sa 18.08.07 09:37 
user profile iconWolle92 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