AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Einfache proceduren/function sinnvoll?

Ein Thema von Chris30 · begonnen am 19. Nov 2020 · letzter Beitrag vom 21. Nov 2020
Antwort Antwort
Seite 1 von 2  1 2   
Chris30

Registriert seit: 19. Nov 2020
2 Beiträge
 
#1

Einfache proceduren/function sinnvoll?

  Alt 19. Nov 2020, 09:58
Hallo liebes Delphi-Praixs-Forum,
ich habe eine Frage zum Thema kurze proceduren/functions und wie sinnvoll sie sind.

Angenommen ich habe folgendes Beispiel:

Delphi-Quellcode:
TTest = class
wert1: String;
wert2: String;

function getWert1AsReal: real;
function getWert2AsReal: real;
end;


function TTest.getWert1AsReal: real;
begin
result := wandleStringZuReal(wert1);
end;

function TTest.getWert2AsReal: real;
begin
result := wandleStringZuReal(wert2);
end;

procedure main;
var
test: TTest;
erg: real;
begin

test := TTest.Create;
test.wert1 := '2.3';
test.wert2 := '3.3';

//Variante 1
erg := wandleStringZuReal(test.wert1) + wandleStringZuReal(test.wert2);
//Variante 2
erg := test.getWert1AsReal+ test.getWert2AsReal;

end;
Ist die Funktion getWertXAsReal überflüssig?
Welche Vorteile und Nachteile bieten die beiden Varianten in Hinsicht auf Lesbarkeit, Wartbarkeit, Debugging und eventuell weitere sinnvolle Aspekte die Euch einfallen.
Sollte man grundsätzlich proceduren/function vermeiden die kürzer als ~5 Zeilen sind?
Wenn ja, wieso?

Ich würde mich über Antworten mit Argumenten sehr freuen.
Dankeschön
  Mit Zitat antworten Zitat
Benutzerbild von runningsoft
runningsoft

Registriert seit: 8. Okt 2004
Ort: Bernau
81 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Einfache proceduren/function sinnvoll?

  Alt 19. Nov 2020, 17:18
Die Frage ist sicherlich, wie häufig du deine Funktion/Prozedur voraussichtlich benötigst.

Angenommen, du musst deinen Einzeiler in getWertXasReal später ergänzen oder ändern, und hast die Funktion schon 10 mal verwendet, ist der Wartungsaufwand halt um einiges geringer, wenn du die Änderung nur innerhalb deiner Funktion vornehmen musst und nicht an jeder einzelnen Stelle im Quelltext, an der du die Berechnung ausführst.

Eine generelle Empfehlung, ab wann sich Mini-Funktionen/Prozeduren lohnen, kann man sicherlich nicht geben.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
37.040 Beiträge
 
Delphi 10.4 Sydney
 
#3

AW: Einfache proceduren/function sinnvoll?

  Alt 19. Nov 2020, 18:09
Wenn es nur um den "minimalen" Overhead des Funktionsaufrufs (CALL) geht, dann die Methode/Funktion eben als inline deklarieren.



Und es gibt noch viele andere Lösungen: SubClass, RecordHelper, ...
Delphi-Quellcode:
erg := StrToFloat(Test.Wert1) + StrToFloat(Test.Wert2);

erg := Test.Wert1.ToSingle + Test.Wert2.ToSingle; // statt "String" mit einer Klasse, Record oder über Record-Helper
Delphi-Referenz durchsuchenTStringHelper.ToSingle
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (19. Nov 2020 um 18:15 Uhr)
  Mit Zitat antworten Zitat
Redeemer

Registriert seit: 19. Jan 2009
Ort: Kirchlinteln (LK Verden)
705 Beiträge
 
Delphi 2009 Professional
 
#4

AW: Einfache proceduren/function sinnvoll?

  Alt 19. Nov 2020, 18:12
Unabhängig von der Fragestellung: Das Beispiel würde man so nicht machen. Was dir allgemein fehlt, sind Eigenschaften. Spätestens wenn man öfter lesend als schreibend drauf zugreift, würde man die Umwandlung direkt beim Setter machen.
Janni
2005 PE, 2009 PA, XE2 PA
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
37.040 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Einfache proceduren/function sinnvoll?

  Alt 19. Nov 2020, 18:25
Jupp, statt einer Get-Methode und vielleicht auch noch einer setWert1AsReal, lässt sich ein Property bestimmt intuitiver nutzen.

Vor allem wenn man bedenkt, wo man noch alles etwas einsparen/kombinieren/vereinheitlichen kann.
Delphi-Quellcode:
type
  TTest = class
  private
    function GetWertAsReal(Index: Integer): Real;
    procedure SetWertAsReal(Index: Integer; Value: Real);
  public
    //Werte: array[1..2] of String;
    Wert1: String;
    Wert2: String;
    property Wert1AsReal: Real index 1 read GetWertAsReal write SetWertAsReal;
    property Wert2AsReal: Real index 2 read GetWertAsReal write SetWertAsReal;

    property WertAsReal[Index: Integer]: Real read GetWertAsReal write SetWertAsReal; // hier im Getter/Setter die Bereichsprüfung nicht vergessen
  end;

procedure TTest.GetWertAsReal(Index: Integer): Real;
{
begin
  Result := wandleStringZuReal(Werte[Index]);
end;
}

var
  S: String;
begin
  case Index of
    1: S := Wert1;
    2: S := Wert2;
  end;
  Result := wandleStringZuReal(S);
end;
{
begin
  case Index of
    1: Result := wandleStringZuReal(Wert1);
    2: Result := wandleStringZuReal(Wert2);
    else Result := 0; // wegen Compilerwarnung
  end;
end;
}
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014

Geändert von himitsu (19. Nov 2020 um 18:32 Uhr)
  Mit Zitat antworten Zitat
Chris30

Registriert seit: 19. Nov 2020
2 Beiträge
 
#6

AW: Einfache proceduren/function sinnvoll?

  Alt 20. Nov 2020, 08:08
Guten Morgen,

erstmal vielen Dank an alle die bisher geantwortet haben.
Eine Frage zu Properties hätte ich jetzt noch.

Nutzt man diese um intuitiver arbeiten zu können?
Oder gibt es noch andere unterschiede zu Standard getter und setter Methoden wie man sie vielleicht aus Java kennt?
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
898 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: Einfache proceduren/function sinnvoll?

  Alt 20. Nov 2020, 09:07
Sollte man grundsätzlich proceduren/function vermeiden die kürzer als ~5 Zeilen sind?
Nein

Wenn es eine Aufgabe gibt, die für sich abgeschlossen ist, dann mache ich auch schon Methoden die nur eine Zeile enthalten.

Das Gegenteil ist oft der Fall. Man sollte Methoden vermeiden die länger als 5 Zeilen sind.
Ok, 5 ist ein bischen krass, aber spätestens wenn die Methode nicht ganz auf den Bildschirm passt ist es zuviel.

Aber ich finde es gut, dass Du Dir Gedanken über sowas machst. Viele basteln einfach drauflos.
  Mit Zitat antworten Zitat
Aviator
Online

Registriert seit: 3. Jun 2010
1.527 Beiträge
 
Delphi 10.3 Rio
 
#8

AW: Einfache proceduren/function sinnvoll?

  Alt 20. Nov 2020, 10:08
Ich erstelle z.B. dann eine neue Methode, wenn ich Code mehrfach benötige und ihn dann doppelt schreiben müsste. Wenn er nicht 100%ig identisch ist, das aber mit einem Parameter wiederum gelöst werden kann, dann wird der Methodenaufruf eben entsprechend angepasst.

Und ja, Methoden haben bei mir oft auch nur eine Zeile wenn es Helper Methoden sind oder Werte aus einer definierten Quelle zurückgegeben werden müssen (die vielleicht auch noch berechnet werden oder so). Overload Methoden sind auch so ein Beispiel. Die Methode ruft eine gleichnamige andere Methode auf, übergibt aber einen festen Parameter.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.094 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Einfache proceduren/function sinnvoll?

  Alt 20. Nov 2020, 14:44
Ich erstelle z.B. dann eine neue Methode, wenn ich Code mehrfach benötige und ihn dann doppelt schreiben müsste. Wenn er nicht 100%ig identisch ist, das aber mit einem Parameter wiederum gelöst werden kann, dann wird der Methodenaufruf eben entsprechend angepasst.
Same here, für mich hat sich diese Vorgehensweise bewährt. Eine weitere Möglichkeit sind noch Overloads, solange das dann nicht zu viele werden.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
770 Beiträge
 
Delphi 2007 Professional
 
#10

AW: Einfache proceduren/function sinnvoll?

  Alt 20. Nov 2020, 17:31
Eine Frage zu Properties hätte ich jetzt noch.

Nutzt man diese um intuitiver arbeiten zu können?
Oder gibt es noch andere unterschiede zu Standard getter und setter Methoden wie man sie vielleicht aus Java kennt?
Properties können noch als published deklariert werden, dann kann man per Runtime Type Information (RTTI) darauf zugreifen. Neuere Delphis können das auch für nicht-published Properties.

Aber das geht jetzt deutlch über die normale Verwendung von Properties hinaus.

Anders als bei Java kann aber eine Property auch direkt auf ein Feld verweisen oder ein Feld direkt lesen aber per Setter-Methode schreiben:
Delphi-Quellcode:
type
  TMyClass
  private
    FMyField: integer;
    procedure SetMyField(_Value: integer);
  public
    property MyField: integer read FMyField write SetMyField;
  end;

Ach ja, dann gibt es noch Array-Properties:

Delphi-Quellcode:
type
  TMyClass
  private
    function GetMyProperty(_Idx: integer): string;
    procedure SetMyProperty(_Idx: integer, const _Value: string);
  public
    property MyProperty[_Idx: integer]: string read GetMyProeprty write SetMyProperty;
Eine solche Array-Property kann auch noch als default deklariert werden, so das man beim Zugriff den Namen weglassen kann. Das wird z.B. bei TStringList verwendet, eigentlich muesste man da auf die Items-Property zugreifen, es geht aber auch so:

Delphi-Quellcode:
var
  sl: TStringList;
begin
  sl := TStringList.Create;
  sl.Add('bla');
  WriteLn(sl[0]);
  WriteLn(sl.Items[0]);
Thomas Mueller
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:29 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf