Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   Delphi Zwei Funktionen mit dem selben Namen? (https://www.delphipraxis.net/210865-zwei-funktionen-mit-dem-selben-namen.html)

NoGAD 23. Jun 2022 14:02

Zwei Funktionen mit dem selben Namen?
 
Hallo,

wie macht es Borland eigentlich, dass es zwei verschiedene Funktionen mit dem gleichen Namen, aber unterscheidlichen Parametern geben darf?


Beispiel:

1. Format const Format: string; const Args: array of const
2. Format const Format: string; const Args: array of const; const AFormatSettings: TFormatSettings

Ich würde das auch gerne machen, mit einem LoremIpsum - Generator:


function CreateLoremIpsum(aWorte: Integer = 2): String;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer)): String;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True): String;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True; aVariante: TLoremIpsumVariant = Standard): String;

LG :-)

Rolf Frei 23. Jun 2022 14:14

AW: Zwei Funktionen mit dem selben Namen?
 
In dem die Funktionen mit "overload" markiert sind.
Delphi-Quellcode:
function CreateLoremIpsum(aWorte: Integer = 2): String; overload;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer)): String; overload;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True): String; overload;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True; aVariante: TLoremIpsumVariant = Standard): String; overload;
Da du hier aber alles mit Default Parametern arbeitest, brauchst du garkeine überladnen Funktionen. Die letzte Funktion reicht da.

PaPaNi 23. Jun 2022 14:14

AW: Zwei Funktionen mit dem selben Namen?
 
Keyword overload hilft nicht?

Beispiel:
Delphi-Quellcode:
function Foo(_Param1: Integer=2; _Param2 : Integer=3) : string; overload;
function Foo(_Param1: Integer=2; _Param2 : Integer=3; _Param3: Boolean = True) : string; overload;
function Foo(_Param1: Integer=2; _Param2 : Integer=3; _Param3: Boolean = True; _Param4: Boolean = True) : string; overload;

bernau 23. Jun 2022 14:14

AW: Zwei Funktionen mit dem selben Namen?
 
Die Funktionen mit einem Overload kennzeichnen

Delphi-Quellcode:
function CreateLoremIpsum(aWorte: Integer = 2): String;overload;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer)): String;overload;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True): String;overload;
function CreateLoremIpsum(aWorte: Integer = 2; aAbsatz: Integer = default(Integer); aUsePre: Boolean = True; aVariante: TLoremIpsumVariant = Standard): String;overload;

[Edit]
Hahaha. Drei mit dem gleichen Gedanken

himitsu 23. Jun 2022 14:15

AW: Zwei Funktionen mit dem selben Namen?
 
Delphi-Referenz durchsuchenoverload


Aber so geht das garnicht, da du optionale Parameter dabei nicht betrachten darfst, weil es kann sein, dass sie nicht angegeben werden.
Es müssen sich die Typen der Parameter unterscheiden. (Parameter-Name und Result-Typ und Default-Values sind irrelevant)

Also alle Default-Parameter bei dir weggelassen und schon sind alle Varianten identisch und lassen sich somit nicht überladen.

Delphi-Quellcode:
function CreateLoremIpsum(aWorte: Integer = 2): String; overload;
function CreateLoremIpsum(aWorte: Integer; aAbsatz: Integer): String; overload;
function CreateLoremIpsum(aWorte: Integer; aAbsatz: Integer; aUsePre: Boolean): String; overload;
function CreateLoremIpsum(aWorte: Integer; aAbsatz: Integer; aUsePre: Boolean; aVariante: TLoremIpsumVariant): String; overload;
Aber gerade an diesem Beispiel ist diese ganze Angelegenheit eh total sinnlos, da alle Fälle durch die letzte/längste Funktion behandelt werden, wenn dort alles mit Default-Values versehen ist.

bernau 23. Jun 2022 14:18

AW: Zwei Funktionen mit dem selben Namen?
 
Himitsu hat es mit den Defaultparametern natürlich auf den Punkt gebracht. :thumb:

NoGAD 23. Jun 2022 14:18

AW: Zwei Funktionen mit dem selben Namen?
 
Hallo nochmal,


danke euch allen. overload war mir natürlich bekannt. Dennoch mach tes Borland anders:

https://docwiki.embarcadero.com/Libraries/Sydney/de/System.SysUtils.Format

Ohne overload.

Daher meine Frage.

LG

himitsu 23. Jun 2022 14:26

AW: Zwei Funktionen mit dem selben Namen?
 
Wer behauptet denn, dass es dort nicht mit Overload deklariert ist?

Man schaue nur mal in die System.SysUtils.pas :roll:

Neutral General 23. Jun 2022 14:28

AW: Zwei Funktionen mit dem selben Namen?
 
Zitat:

Zitat von NoGAD (Beitrag 1507719)

Das ist nur die Dokumentation. Dort wurde nicht explizit overload dazugeschrieben.
Wenn du in den Source der SysUtils schaust sieht das so aus:
Delphi-Quellcode:
function Format(const Format: string; const Args: array of const): string; overload;
function Format(const Format: string; const Args: array of const; const AFormatSettings: TFormatSettings): string; overload;

PaPaNi 23. Jun 2022 14:29

AW: Zwei Funktionen mit dem selben Namen?
 
Die Funktion CompareStr hat auch 2 Versionen:
Delphi-Quellcode:
function CompareStr(const S1, S2: string): Integer; overload;
function CompareStr(const S1, S2: string; LocaleOptions: TLocaleOptions): Integer; overload;
aber auf Emba-Seite sind sie wieder ohne overload beschrieben:

https://docwiki.embarcadero.com/Libr...ils.CompareStr

Also, das ist in der Dokumentation gewollt so.


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:07 Uhr.
Seite 1 von 3  1 23      

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