Thema: Delphi Tarifrechner

Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

AW: Tarifrechner

  Alt 30. Okt 2011, 21:01
Zitat:
PPS: Um den Rückgabewert einer Funktion zu setzen kann man entweder den Namen der Funktion verwenden oder das reservierte Wort Result.
Besser das Result, denn das Andere kann schonmal unübersichtlich werden.


Was wird hier wohl gerechnet?
Delphi-Quellcode:
var BöseGlobaleVariable: Integer;

function SinnloseFunktion: Integer;
begin
  if BöseGlobaleVariable > 0 then
    begin
      BöseGlobaleVariable := BöseGlobaleVariable - 1;

      SinnloseFunktion := SinnloseFunktion + 2;

      SinnloseFunktion := SinnloseFunktion + SinnloseFunktion - 1;
    end
  else
    SinnloseFunktion := 0;
end;


BöseGlobaleVariable := 10;
ShowMessage(IntToStr(SinnloseFunktion));
So wird es dann wohl verständlicher, wo der aktuelle Funktions-Wert und wo ein neuer Funktionsaufruf lauern.
Delphi-Quellcode:
function SinnloseFunktion: Integer;
begin
  if BöseGlobaleVariable > 0 then begin
    Dec(BöseGlobaleVariable);
    Result := SinnloseFunktion + 2;
    Result := SinnloseFunktion + SinnloseFunktion - 1;
  end else
    Result := 0;
end;
Aber eigentlich wollte ich dieses haben. war allerdings mit den "Funktionsnamen als Result" garnicht machbar ist.
Delphi-Quellcode:
function SinnloseFunktion: Integer;
begin
  if BöseGlobaleVariable > 0 then begin
    Dec(BöseGlobaleVariable);
    Result := SinnloseFunktion + 2;
    Result := Result + SinnloseFunktion - 1;
  end else
    Result := 0;
end;
OK, außer man führt das komische Ding, mit der unnötigen Variable wieder ein, aber auch da macht sich das Result veständlicher.
Delphi-Quellcode:
function SinnloseFunktion: Integer;
var
  i: Integer;
begin
  if BöseGlobaleVariable > 0 then begin
    Dec(BöseGlobaleVariable);
    i := i + SinnloseFunktion - 1;
  end else
    i := 0;
  SinnloseFunktion := i; // Result := i;
end;
Wobei man hier das Result ja direkt verwenden und sich deshalb eben diese zusätzliche Variable ersparen kann.


PS: So, ich klaue dir jetzt mal das Refactoring (falls du sowas besitzt) und nun bennene mal diese Funktionen um.
Wo wirst du wohl weniger Arbeit haben?
PSS: Wenn es zufällig eine gleichnamige Funktion, mit passender Signatur, in einer anderen Unit gibt (die oben in Uses mit drin steht) und du vergißt auch nur einen Namen umzubenennen, dann war's daß, weil den Fehler suchst du erstmal eine Weile.
$2B or not $2B

Geändert von himitsu (30. Okt 2011 um 21:05 Uhr)
  Mit Zitat antworten Zitat