AGB  ·  Datenschutz  ·  Impressum  







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

Zwei Funktionen mit dem selben Namen?

Ein Thema von NoGAD · begonnen am 23. Jun 2022 · letzter Beitrag vom 25. Jun 2022
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#1

Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 15:02
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
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
647 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 15:14
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.
  Mit Zitat antworten Zitat
Benutzerbild von PaPaNi
PaPaNi

Registriert seit: 31. Mär 2022
47 Beiträge
 
#3

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 15:14
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;
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#4

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 15:14
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
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 15:15
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.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.295 Beiträge
 
Delphi 12 Athens
 
#6

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 15:18
Himitsu hat es mit den Defaultparametern natürlich auf den Punkt gebracht.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

Registriert seit: 31. Jan 2006
Ort: Weimar
345 Beiträge
 
Delphi 10.4 Sydney
 
#7

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 15:18
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
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 15:26
Wer behauptet denn, dass es dort nicht mit Overload deklariert ist?

Man schaue nur mal in die System.SysUtils.pas
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  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
 
#9

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 15:28
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;
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 PaPaNi
PaPaNi

Registriert seit: 31. Mär 2022
47 Beiträge
 
#10

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 15:29
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


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 23:37 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