AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign In Klasse auf Funktion zugreifen oder auf Property?
Thema durchsuchen
Ansicht
Themen-Optionen

In Klasse auf Funktion zugreifen oder auf Property?

Ein Thema von norwegen60 · begonnen am 29. Mär 2018 · letzter Beitrag vom 4. Apr 2018
Antwort Antwort
Seite 1 von 2  1 2      
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 30. Mär 2018, 08:32
Nein, technisch ist das kein Unterschied, der Compiler macht das Gleiche draus.

Der Sinn von Properties in Delphi erschließt sich mir bis heute nicht. Sie können nichts was man mit den Gettern und Settern (die man sowieso schreiben muss) nicht auch kann. Man kann sie nicht als var oder out -Parameter übergeben (z.B. Inc(someValue) ). In der Code-Completion ist noch nicht einmal sichtbar ob ich eine Property überhaupt beschreiben darf, wenn eine Methode getXX oder setXX heißt sehe ich das sofort.


Properties sind nur noch mehr Schreibarbeit. Gewonnen hat man dadurch nichts.
  Mit Zitat antworten Zitat
norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
526 Beiträge
 
Delphi 12 Athens
 
#2

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 30. Mär 2018, 09:02
Hallo Günther,

Properties sind nur noch mehr Schreibarbeit. Gewonnen hat man dadurch nichts.
danke für die klare Antwort. Auch wenn du mir etwas voreingenommen scheinst . Bei Variablen die Getter und Setter haben finde ich es ganz OK wobei ich die Set/Get nur verwende wenn ich noch was zusätzliche machen will. z.B. so:
Delphi-Quellcode:
TTest = class
  private
    FChanged: Boolean;
    FNormal : String;
    FTuWas : String;

    procedure SetTuWas(Value:String);
  public
    property Normal: String read FNormal write FNormal;
    property TuWas: String read FTuWas write SetTuWas;
  end;

procedure TTest.SetTuWas(Value:String);
begin
  if FTuWas <> Value then
  begin
    FTuWas := Value;
    FChanged := true;
  end;
end;
  Mit Zitat antworten Zitat
Benutzerbild von KodeZwerg
KodeZwerg

Registriert seit: 1. Feb 2018
3.691 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 30. Mär 2018, 09:52
Ich schließe mich dem schönen Günther an wobei ich solche Klassen meist nur verwende um Original-Units zu kürzen.
Da wird dann aus "Uses SysUtils" zum Beispiel ein "SysUtils = Class". So bleibt der Aufruf im Code meist gleich.
Gruß vom KodeZwerg
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.495 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 3. Apr 2018, 16:45
Der Sinn von Properties in Delphi erschließt sich mir bis heute nicht. ...
Properties sind nur noch mehr Schreibarbeit. Gewonnen hat man dadurch nichts.
Der Sinn ist dass man eine Eigenschaft hat. Das was sich hinter Getter und Setter verbirgt gehört zusammen. Das gehört zum Thema Clean Code.
Durch die Verwendung von Eigenschaften habe ich weniger Schreibarbeit und zwar weil ich MMX verwende. Der fasst die Eigenschaft, die Getter und Setter und auch noch das Feld sofern vorhanden zusammen. Da kann ich dann:
- Getter, Setter und Feld in der Baumansicht ausblenden, es wird dadurch übersichtlicher.
- Die ganze Eigenschaft mit den Dingern auschneiden, kopieren und/oder woanders einfügen
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 3. Apr 2018, 17:04
Ich halte es eher mehr nach Nice-Code.
Wenn diese "Funktion" logisch zu einer Reihe anderer Property gehört, dann mach ich das als ReadOnly-Property, damit es sich in der Klassendeklaration ansehnlicher einfügt.
Im Programmablauf ist es egal, da der Compiler das Property durch die Funktion ersetzt hat.

UND bei Custom-Klassen mach ich es eben so, denn Property kann man später in der Sichtbarkeit einfach verschieben.


Zitat:
Zusätzlich noch mit class und static/inline deklarationen.
Das Zusätzlich war falsch und kann hier auch falsch sein,
wenn auf Daten der Objektinstanz zugegriffen werden soll.

class function = Methode an der Klasse (nur globale Funktion ohne Bindung an eine Instanz)
function = Methode am Objekt, inkl. Zugriff auf Felder/Methoden dieser Instanz

static = statische Funktion > ohne SELF-Variable
Hier hat man nichtmal mehr Zugriff auf den aktuellen Klassentyp, bei abgeleiteten Klassen.
> der implizite SELF-Parameter wird nicht übergeben, was den Funktionsaufruf kleiner macht
> Letztendlich ist der Aufruf genau so, wie bei einer "normalen" Funktion, welche nicht in einer Klassendefinition steckt (zuzüglich Zugriff auf z.B. Class-Vars)
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu ( 3. Apr 2018 um 17:08 Uhr)
  Mit Zitat antworten Zitat
günni0
(Gast)

n/a Beiträge
 
#6

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 3. Apr 2018, 17:09
Zitat:
> Letztendlich ist der Aufruf genau so, wie bei einer "normalen" Funktion, welche nicht in einer Klassendefinition steckt (zuzüglich Zugriff auf z.B. Class-Vars)
Richtig. Ist auch immer mein Ziel. Das mit Class usw. hat den Vorteil, dass man die Unit umbenennen kann, ohne an zig-Stellen was abändern zu müssen.
Ich persönlich benenne Units oft um. Weniger oft jedoch record- und class-Namen.

Record benutze ich, um den ganzen Clutter der Codecompletion drum herum wegzubekommen.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.559 Beiträge
 
Delphi 7 Professional
 
#7

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 3. Apr 2018, 17:26
Der Sinn von Properties in Delphi erschließt sich mir bis heute nicht. ...
Properties sind nur noch mehr Schreibarbeit. Gewonnen hat man dadurch nichts.
Also sowas finde ich mit Properties viel schöner als ohne:
Delphi-Quellcode:
Label.Caption := Label.Caption + '*';

// statt
var
  s : String;
begin
  s := Label.GetCaption;
  s := s + '*';
  Label.SetCaption(s);
end;

// ok, das ginge wohl auch:
Label.SetCaption(Label.GetCaption + '*');
Mir gefällt die erste Variante am Besten, da sie im Quelltext am leichtesten zu lesen ist.

Und beim Programmieren interessiert es mich nicht, ob es einen Setter und einen Getter gibt. Mir reicht es, wenn ich eine Eigenschaft einfach per Zuweisung mit 'nem Wert versehen kann, ob das intern über 'nen Getter und 'nen Setter (oder jeweils nur einen davon) abläuft, interessiert mich nicht.

Baut jemand eine Klasse, bei der es für eine Eigenschaft weder Setter noch Getter gibt, so kann ich da einen Wert zuweisen.
Baut jetzt jemand später Getter und Setter ein und ich kann nur diese nutzen, so fällt eine Änderung des Quelltextes an.

Bei der Nutzung von Eigenschaften ist das für den Programmierer transparent. Die Sichtbarkeit läßt sich bei der Vererbung leicht verändern, aber über weitere interne Änderungen muss ich mir da keinen Kopp machen. Das ist innerhalb der Klasse und sollte nach außen keine Änderungen am Quelltext erforderlich machen.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#8

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 3. Apr 2018, 17:42
Bei einer Methode mit get oder set im Namen sehe ich ob es ums Lesen oder Schreiben geht. Bei einer Property weiß ich erst dass Schreiben nicht geht wenn ich F9 gedrückt, ein paar Sekunden Däumchen gedreht habe und dann unten in der Textbox eine Fehlermeldung erscheint.

Über die Jahre gerechnet habe ich damit bestimmt schon mehrere Tage Arbeitszeit gespart
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 3. Apr 2018, 18:23
Bei einer Property weiß ich erst dass Schreiben nicht geht wenn ich F9 gedrückt,
CodeInsight, HelpInsight, eventuell die Dokumentation (DocuInsight) und sogar die CodeCompletation hätten dir das auch sofort verraten.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.201 Beiträge
 
Delphi 10 Seattle Enterprise
 
#10

AW: In Klasse auf Funktion zugreifen oder auf Property?

  Alt 3. Apr 2018, 18:43
Ist Code Insight nicht die Code Completion?

Wie auch immer, ich bin zu dumm zu sehen wo man sich das herleiten könnte.
Angehängte Grafiken
Dateityp: jpg derp.jpg (55,2 KB, 34x aufgerufen)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:05 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz