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 3 von 3     123   
Benmik

Registriert seit: 11. Apr 2009
542 Beiträge
 
Delphi 11 Alexandria
 
#21

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 19:17
Was noch nicht erwähnt wurde: In deinem konkreten Beispiel könntest du die drei angegebenen Funktionen mit overload realisieren, indem du die Parameterreihenfolge änderst:
Delphi-Quellcode:
Function bla (X:integer; y:boolean; x: boolean): Boolean; overload;
Function bla (X:integer; x: boolean): Boolean; overload;
Function bla (y:boolean: X:integer): Boolean; overload;
Die kann der Compiler alle auseinanderhalten, da es bei der ersten Funktion drei Parameter gibt, und bei den beiden anderen die Parameter nicht gleich sind; denn ob der Compiler als erstes Argument einen Integer oder einen Boolean erwartet, das ist für ihn etwas völlig Verschiedenes.

Wenn es dir sehr am Herzen liegt, kannst du auch den folgenden Trick anwenden (das gibt hier natürlich jetzt einen Aufschrei, aber funktionieren tut es selbstredend):

Function bla (X:integer; x: boolean; Dummy:TObject): Boolean; overload; Das rufst du mit bla(42,True,nil) auf. Durch Verwürfeln der Reihenfolge kannst du noch einige Funktionen bla realisieren.
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

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

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 19:25
Hallo Benmik,

danke für die Erklärung und Beispiele.

LG 😊👋🏻
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zwei Funktionen mit dem selben Namen?

  Alt 23. Jun 2022, 23:42
Stattdessen kann man alles auch in ein Objekt/MethodenRecord verpacken
auch einen Parameter-Record/Objekt erstellen und hat dann bloß einen einzigen Parameter.
Dank der neuen Custom Managed Records wird es damit auch immer einfacher.


Delphi-Quellcode:
type
  TLIParams = record // oder als TObject (dann aber das Create/Free nicht vergessen)
    Worte: Integer;
    Absatz: Integer;
    UsePre: Boolean;
    Variante: TLoremIpsumVariant;
    Punktierung: Boolean;
    Kommata: Boolean;

    class operator Initialize(out Dest: TLIParam); // wird automatisch bei neuen Variablen aufgerufen
    //oder ein manuelles "procedure Clear;"
  end;
 
function MakeLoremIpsum(Params: TLIParams): String;
Im Clear/Initialize alle "Parameter" auf 0/False setzen.


Delphi-Quellcode:
type
  TLoremIpsum = record // oder als TObject (dann aber das Create/Free nicht vergessen)
    Worte: Integer;
    Absatz: Integer;
    UsePre: Boolean;
    Variante: TLoremIpsumVariant;
    Punktierung: Boolean;
    Kommata: Boolean;

    class operator Initialize(out Dest: TLIParam); // wird automatisch bei neuen Variablen aufgerufen
    //oder ein manuelles "procedure Clear;"

    function Make: String;
  end;
Delphi-Quellcode:
{ function CreateLoremIpsum(aWorte: Integer; aUsePre: Boolean): String; }
var LI: TLoremIpsum;
// LI.Clear; oder automatisch durch Initialize erstmal alles auf 0 setzen lassen.
// Früher auch gern mit einem FillChar(LI, SizeOf(LI), 0);
LI.Worte := 123;
LI.UsePre := True;
ShowMessage(LI.Make);
Delphi-Quellcode:
type
  TLoremIpsum = record // oder als TObject (dann aber das Create/Free nicht vergessen)
    Worte: Integer;
    Absatz: Integer;
    UsePre: Boolean;
    Variante: TLoremIpsumVariant;
    Punktierung: Boolean;
    Kommata: Boolean;

    DerText: String;

    class operator Initialize(out Dest: TLIParam); // wird automatisch bei neuen Variablen aufgerufen
    //oder ein manuelles "procedure Clear;"

    procedure Make; // Result siehe DerText
  end;
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
mmw

Registriert seit: 10. Sep 2019
Ort: OWL
322 Beiträge
 
Delphi 11 Alexandria
 
#24

AW: Zwei Funktionen mit dem selben Namen?

  Alt 24. Jun 2022, 20:44
Hallo,

Zu #16

[OT]

https://www.bielefeldmillion.de/biel...verschwoerung/

[/OT]

Gruß

Geändert von mmw (24. Jun 2022 um 21:00 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von NoGAD
NoGAD

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

AW: Zwei Funktionen mit dem selben Namen?

  Alt 25. Jun 2022, 07:57
Hallo an alle,

ich hatte zwischenzeitlich (kein Crosspost) meine (neue) Unit in einem älteren Beitrag gepostet: https://www.delphipraxis.net/209772-...h-am-ende.html

Wo wäre es günstiger, weiterzumachen?

LG
Mathias
Ich vergesse einfach zu viel.
  Mit Zitat antworten Zitat
Rolf Frei

Registriert seit: 19. Jun 2006
629 Beiträge
 
Delphi 11 Alexandria
 
#26

AW: Zwei Funktionen mit dem selben Namen?

  Alt 25. Jun 2022, 14:21
Was noch nicht erwähnt wurde: In deinem konkreten Beispiel könntest du die drei angegebenen Funktionen mit overload realisieren, indem du die Parameterreihenfolge änderst:
Delphi-Quellcode:
Function bla (X:integer; y:boolean; x: boolean): Boolean; overload;
Function bla (X:integer; x: boolean): Boolean; overload;
Function bla (y:boolean: X:integer): Boolean; overload;
Die kann der Compiler alle auseinanderhalten, da es bei der ersten Funktion drei Parameter gibt, und bei den beiden anderen die Parameter nicht gleich sind; denn ob der Compiler als erstes Argument einen Integer oder einen Boolean erwartet, das ist für ihn etwas völlig Verschiedenes.

Wenn es dir sehr am Herzen liegt, kannst du auch den folgenden Trick anwenden (das gibt hier natürlich jetzt einen Aufschrei, aber funktionieren tut es selbstredend):

Function bla (X:integer; x: boolean; Dummy:TObject): Boolean; overload; Das rufst du mit bla(42,True,nil) auf. Durch Verwürfeln der Reihenfolge kannst du noch einige Funktionen bla realisieren.
Sein Originalcode aus dem ersten Post lässt sich problemlos kompilieren, wenn da overload's angehängt werden. Das Ganze macht aber da keinen Sinn, weil er nur die Letzte Funcktion benötigt und die vorherigen damit alle auch abgedeckt sind. Ich vermute mal stark , dass der Delphi Compiler intelligent genug ist, um das selber zu merken und dabei die überflüssigen Functions einfach ignnoriert/eliminiert.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Zwei Funktionen mit dem selben Namen?

  Alt 25. Jun 2022, 14:39
Sein Originalcode aus dem ersten Post lässt sich problemlos kompilieren, wenn da overload's angehängt werden.
jain.

Kompilieren ja, aber nur so lange du nicht versuchst diese Funktionen aufzurufen, da nur die letzte Variante eindeutig ist, wenn man alle Parameter übergibt.

CreateLoremIpsum;
Code:
[dcc32 Fehler] Unit21.pas(54): E2251 Doppeldeutiger überladener Aufruf von 'CreateLoremIpsum'
  Unit21.pas(31): Verwandte Methode: function CreateLoremIpsum(Integer): string;
  Unit21.pas(46): Verwandte Methode: function CreateLoremIpsum(Integer; Integer; Boolean; TLoremIpsumVariant): string;
  Unit21.pas(41): Verwandte Methode: function CreateLoremIpsum(Integer; Integer; Boolean): string;
  Unit21.pas(36): Verwandte Methode: function CreateLoremIpsum(Integer; Integer): string;
[dcc32 Fataler Fehler] Project21.dpr(5): F2063 Verwendete Unit 'Unit21.pas' kann nicht compiliert werden

Keine Ahnung, warum das überhaupt erst kompiliert und der Compiler nicht sofort abraucht, wenn er auf eine doppeldeutige Deklaration im selben Namespace trifft.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests

Geändert von himitsu (25. Jun 2022 um 14:42 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 3     123   


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 16:09 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