Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Try - except - finally (https://www.delphipraxis.net/176835-try-except-finally.html)

BUG 30. Sep 2013 22:27

AW: Try - except - finally
 
Und bei C++ gibt es Bei Google suchenRAII :roteyes:

idefix2 30. Sep 2013 22:38

AW: Try - except - finally
 
Zitat:

Zitat von Furtbichler (Beitrag 1230361)
Jede Methode soll genau eine Sache machen.

Natürlich. Nur gehören meiner Meinung nach prinzipiell Fehlerbehandlung UND Aufräumarbeiten zu der Sache. Wenn du einen Mittelwert bildest, schreibst du wohl auch nicht eine Prozedur zum Addieren und eine zweite für die anschliessende Division.
Es gibt einen Punkt, an dem das Aufteilen nicht mehr zu mehr Übersichtlichkeit, sondern zum Gegenteil führt.

Furtbichler 1. Okt 2013 07:03

AW: Try - except - finally
 
Zitat:

Zitat von idefix2 (Beitrag 1230387)
Natürlich. Nur gehören meiner Meinung nach prinzipiell Fehlerbehandlung UND Aufräumarbeiten zu der Sache.

Vom Abstraktionsniveau her passt das einfach nicht. Das eine ist Resourcenschutzblock, das andere eine Fehlerbehandlung der Sicherungsschicht.

Zitat:

Wenn du einen Mittelwert bildest...
heißt die Methode vermutlich 'BildeMittelwert' und fertig.
Zitat:

Es gibt einen Punkt, an dem das Aufteilen nicht mehr zu mehr Übersichtlichkeit, sondern zum Gegenteil führt.
Den zu finden ist leicht: Wenn es lächerlich wird (wie bei deinem Beispiel), lässt man es.

Aber was ist hiermit:
Delphi-Quellcode:
data := Socket.SendCmd(IPCMD_RECV, OPTION_TRACERT or OPTION_FOOBAR or OPTION_BLAFASEL, 4912);
OtherComplicatedStuff.MagicFunction(data);
Versteht keine Sau. Aber das hier versteht jeder:
Delphi-Quellcode:
data := ReadDataFromSocket();
EncryptAndForwardToReceipient(data);
Die Implementierung der beiden Methoden interessiert ja nicht, wenn es nur ums Verständnis geht. Aber wer's wissen will:
Delphi-Quellcode:
Function TMyClass.ReadDataFromSocket() : TData;
Begin
  Result := Socket.SendCmd(IPCMD_RECV, OPTION_TRACERT or OPTION_FOOBAR or OPTION_BLAFASEL, 4912);
End;

Procedure TMyClass.EncryptAndForwardToReceipient(data : TData);
Begin
  EncryptAndForwardToReceipient(data);
End;
Ich habe den Code durch das (in deinen Augen lächerliche) Refactoring kommentiert, und zwar gänzlich ohne die negativen Effekte, die Kommentare sonst über die Zeit unbrauchbar machen (können). Jeder, der meinen Code liest, weiß sofort, was Sache ist. Und das, *obwohl* ich aus zwei Zeilen 10 gemacht habe :-)

Aber wenn Du meinst, das Du es besser weißt: Bitte schön.

PS: Selbst eine Mittelwertbildung kann man refaktorisieren, wenn der Algorithmus zur Mittelwertbildung dem Leser vermutlich nicht bekannt ist (z.B. Schülern):
Delphi-Quellcode:
Function BildeMittelwert(Zahlenreihe : TZahlen) : Double;
Begin
  if Zahlenreihe.Anzahl=0 then
    Raise Exception.Create('Mittelwertbildung nicht möglich');
  else
    Result := SummeAllerZahlen(Zahlenreihe)/ Zahlenreihe.Anzahl;
End;
Auch wenn es in deinen Augen total unübersichtlich ist: Die Lesbarkeit ist erhöht ;-). Ach, und falls mal wer die Summe aller Zahlen einer Zahlenreihe benötigt, hat man ihm gleich geholfen. Auch ein netter Nebeneffekt der unübersichtlichen Programmierung.

Morphie 1. Okt 2013 07:57

AW: Try - except - finally
 
Zitat:

Zitat von Furtbichler (Beitrag 1230398)
Delphi-Quellcode:
Procedure TMyClass.EncryptAndForwardToReceipient(data : TData);
Begin
  EncryptAndForwardToReceipient(data);
End;

Ist das nicht eine unendliche Rekursion? :?:

Mavarik 1. Okt 2013 08:11

AW: Try - except - finally
 
Wie wär es mit

Delphi-Quellcode:
result := true;
try
  A := TFoo.Create;
  try
    ...
    if bla then
      Exit;    
    ...
  finally
    A.Free;
  end;
except
  result := false;
end;
Mavarik


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:02 Uhr.
Seite 3 von 3     123   

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz