AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Styleguide für Parameteranordnung

Ein Thema von bernau · begonnen am 25. Aug 2016 · letzter Beitrag vom 27. Aug 2016
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#1

Styleguide für Parameteranordnung

  Alt 25. Aug 2016, 14:15
Delphi-Version: 10 Seattle
Gibt es eigentlich ein Styleguide oder ein "best practice" für die Anordnung von Parametern?

Lieber so:

function getNames(aNames:TStrings;aBirthdayFrom:TDatetime;aBirthdayTo:TDatetime):boolean;

oder so:

function getNames(aBirthdayFrom:TDatetime;aBirthdayTo:TDatetime;aNames:TStrings):boolean;

Ich erwische mich immer wieder dabei, daß ich nicht wirklich eine klare Linie bei der Anordnung von Parametern habe. Wie ist es bei euch?
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
bra

Registriert seit: 20. Jan 2015
711 Beiträge
 
Delphi 10.2 Tokyo Enterprise
 
#2

AW: Styleguide für Parameteranordnung

  Alt 25. Aug 2016, 14:17
Ich versuche die bei ähnlichen Funktionen in der selben Reihenfolge zu haben (ich habe z.B. bei diesen AnsiText-Funktionen ständig die Parameter vertauscht, da mal der SubText zuerst oder mal zuletzt kommt), ansonsten ist das doch sehr von den Parametern und deren Zweck abhängig.
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Styleguide für Parameteranordnung

  Alt 25. Aug 2016, 14:18
Ich denke mal es ist üblicher, dass die Rückgabewerte hinten stehen (also Beispiel 2).
Ich glaube so mache ichs auch immer (wobei ich nie so genau darauf geachtet habe dass ich jetzt für diese Aussage meine Hand ins Feuer legen würde )
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Styleguide für Parameteranordnung

  Alt 25. Aug 2016, 14:29
Ich denke mal es ist üblicher, dass die Rückgabewerte hinten stehen (also Beispiel 2).
In der Regel mache ich es so. Aber dann kommt wieder eine Funktion in dem die Parameter mit Defaultwerte belegt sind.

function getNames(aNames:TStrings;aBirthdayFrom:TDatetime = 0;aBirthdayTo:TDatetime = 90000):boolean;

Dann muss ich das Ergebnis nach vorne setzen, weich ich die Default-Parameter ja ggf. weglassen möchte.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Styleguide für Parameteranordnung

  Alt 25. Aug 2016, 14:39
Na gut, da kannste dann halt auch nix machen
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
Der schöne Günther

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

AW: Styleguide für Parameteranordnung

  Alt 25. Aug 2016, 17:07
Generell ist es wirklich üblicher die Ausgabeparameter hinten zu haben. Auf SO fragt sich auch jemand über die Parameter-Ein/Ausgabe-Reihenfolge und wie Default-Parameterbelegungen damit zusammenhängen. [1]

Interessant da der Verweis aus den eigentlich sehr schönen Google C++ Style Guide - Das trifft ja auf Delphi alles ebenso zu. Das Ergebnis ist da dass Standard-Parameterbelegungen eh böse sind. Das Hauptargument ist dass der Parameter halt wirklich da ist und man keine Funktionszeiger damit belegen kann. Also so etwas:

Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses System.SysUtils;

procedure myProcedure(const someValue: Integer = 42);
begin
   WriteLn(someValue);
end;

var
   someProcedure: TProcedure;
begin
   someProcedure := myProcedure; // << E2009 Inkompatible Typen: 'Liste der Parameter ist unterschiedlich'
end;

end.

[1] http://stackoverflow.com/q/27934633/2298252
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#7

AW: Styleguide für Parameteranordnung

  Alt 26. Aug 2016, 07:40
Ich liebe es Default-Werte für Parameter zu geben, zumindest vorübergehend. So kann ich eine Parameterliste erweitern, ohne daß der Code kaputt geht. Mit der Zeit ziehe ich dann alle Aufrufe nach und ergänze die fehlenden Parameter. Gibt es eigentlich eine FixInsight Prüfung für fehlende Parameter im Aufruf? Das wäre eventuell ne coole Sache.

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Styleguide für Parameteranordnung

  Alt 26. Aug 2016, 08:46
Ich liebe es Default-Werte für Parameter zu geben, zumindest vorübergehend. So kann ich eine Parameterliste erweitern, ohne daß der Code kaputt geht. Mit der Zeit ziehe ich dann alle Aufrufe nach und ergänze die fehlenden Parameter.Sherlock
Deswegen habe ich früher auch gerne mit Defaultwerten gearbeitet.

Mittlerweile verwende ich aber eher "overload". Damit bin ich sogar noch etwas flexibler. Mit "deprecated" kann ich dann auf die veraltete Procedure hinweisen und nach und nach die alte Version entfernen. Ohne FixInsight.

Nachteil ist, daß ich den Default-Wert nicht wirklich im Interface-Bereich sehe und immer in die Implementation springen muss.



Delphi-Quellcode:
procedure myProcedure;overload;
procedure myProcedure(const someValue: Integer);overload;

implementation

procedure myProcedure;
begin
  myProcedure(42);
end;

procedure myProcedure(const someValue: Integer);
begin
   WriteLn(someValue);
end;
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de

Geändert von bernau (26. Aug 2016 um 08:48 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#9

AW: Styleguide für Parameteranordnung

  Alt 26. Aug 2016, 09:51
Delphi alles ebenso zu. Das Ergebnis ist da dass Standard-Parameterbelegungen eh böse sind. Das Hauptargument ist dass der Parameter halt wirklich da ist und man keine Funktionszeiger damit belegen kann. Also so etwas:
Klar geht das...


Delphi-Quellcode:
program Project1;

{$APPTYPE CONSOLE}

{$R *.res}

uses System.SysUtils;

type
  TDPTest = reference to procedure( const Arg: Integer = 42);

procedure myProcedure(const someValue: Integer = 42);
begin
  WriteLn(someValue);
end;

var
  someProcedure: TDPTest;
begin
  someProcedure := myProcedure;
  someProcedure;
end;

end.
Schon geht es...
  Mit Zitat antworten Zitat
Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.126 Beiträge
 
Delphi 10.3 Rio
 
#10

AW: Styleguide für Parameteranordnung

  Alt 26. Aug 2016, 10:13
Gibt es eigentlich ein Styleguide oder ein "best practice" für die Anordnung von Parametern?
Best Practice hab ich noch nicht gesehen...

Aber ich habe meine eigenen Regeln und daran halte ich mich...

AOwner / AParent 1. Parameter wenn es beide gibt Owner first.
Letzter Parameter (Wenn nicht default Parameter) dann ist es die Proc<T>
Out Parameter so weit nach hinten wie es geht.
Ansonsten
Reihenfolge gemäß Datengröße (Nicht unbedingt die eigentlich) Selbst wenn ein TObject nur ein Pointer ist und ein String ggf. als Daten übergeben werden...

TObject, String, Integer, Boolean // Da die Strings, Integer und Booleans i.d.R. die Kontrolle über die
Verwendung von TObject regeln..

Ausnahmen: Selecting String, selecting Interfaces Beispiel:

Procedure Foo(AKunde : TKunde; AInvoce : TProc<TKunden>;Const SaveWhere : String); oder
Procedure Foo(AKunde : TKunde; ASaveLogic : ICanSaveKunden);
Aufruf:

Delphi-Quellcode:
begin
  if RESTServer
    then begin
           Foo(LKunde,Procedure (AKunde : TKunden)
             begin
               AKunde.LastUser := AktUser;
               AKunde.Compress;
             end,'SaveAsJason');
         end
    else begin
           Foo(LKunde,Procedure (AKunde : TKunden)
             begin
               AKunde.LastUser := AktUser;
               AKunde.DataFormat := AktDoc2XML;
             end,'SaveAsStream');
         end;
end;
oder

Delphi-Quellcode:
var
  SaveAs : String;
begin
  if RESTServer
    then SaveAs := 'SaveAsJson'
    else SaveAs := 'SaveAsStream';

  Foo(LKunde,TAnyFactory.Default.CreateObj<ICanSaveKunden>(SaveAs));
end;
Mavarik
  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 01:36 Uhr.
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