AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein Delphi Function mit mehreren Rückgabewerten
Thema durchsuchen
Ansicht
Themen-Optionen

Function mit mehreren Rückgabewerten

Ein Thema von SyntaxXx · begonnen am 22. Jan 2011 · letzter Beitrag vom 17. Jan 2025
Antwort Antwort
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
497 Beiträge
 
Delphi 12 Athens
 
#1

AW: Function mit mehreren Rückgabewerten

  Alt 11. Dez 2024, 13:43
Wäre natürlich schön, wenn Delphi nativ Tupel unterstützen würde. Python kann das sehr schön:
Code:
def give_two:
  return 1, 2

one, two = give_two()
In Delphi gibt es da nur drei möglichkeiten:
  1. Du gibst ein Array oder IEnumerable-Objekt zurück
  2. Du deklarierst die einen Record und gibst ihn zurück
  3. Du verwendest out- (oder var-) Parameter
Dennis
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.522 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Function mit mehreren Rückgabewerten

  Alt 11. Dez 2024, 14:55
... nur drei ...
Nein.

Geändert von freimatz (11. Dez 2024 um 14:59 Uhr)
  Mit Zitat antworten Zitat
Dennis07

Registriert seit: 19. Sep 2011
Ort: Deutschland
497 Beiträge
 
Delphi 12 Athens
 
#3

AW: Function mit mehreren Rückgabewerten

  Alt 15. Jan 2025, 18:11
Bitte nicht so ausführliche Kommentare schreiben, mein Gehirn kann die nicht verarbeiten.

Delphi-Quellcode:
procedure GibMir( AInput, AOutput: string);
begin
    AOutput := AInput + '...';
end;
Du meinstest wohl out AOutput: string . Denn so macht der nen Copy-on-call und behält den zugewiesenen Wert in der Funktion. Du kannst das nur weglassen, wenn der Parameter ein Zeigertyp ist und du den Referenzwert veränderst.
Dennis
  Mit Zitat antworten Zitat
Rollo62

Registriert seit: 15. Mär 2007
4.252 Beiträge
 
Delphi 12 Athens
 
#4

AW: Function mit mehreren Rückgabewerten

  Alt 16. Jan 2025, 06:11
Du meinstest wohl out AOutput: string .
Ja klar ...
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
752 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Function mit mehreren Rückgabewerten

  Alt 12. Dez 2024, 16:27
Wäre natürlich schön, wenn Delphi nativ Tupel unterstützen würde. Python kann das sehr schön:
Code:
def give_two:
  return 1, 2

one, two = give_two()
In Delphi gibt es da nur drei möglichkeiten:
  1. Du gibst ein Array oder IEnumerable-Objekt zurück
  2. Du deklarierst die einen Record und gibst ihn zurück
  3. Du verwendest out- (oder var-) Parameter
Wärend die Schlange nur zischt, hat das Orakel Antworten.

Ich finde Python hier unscharf und unklar.
Die Optionen die Delphi einem gibt bedeuten mehr Schreibaufwand aber auch deutlich bessere Lesbarkeit.
Gerade durch die Rückgabe oder Verwendung eines Interfaced Objektes bekommt man unendliche Freiheit. Und, das sogar ohne sich auf die Anzahl der Parameter festlegen zu müssen.
Natürlich kann sowas in Speicherverschwendung ausarten. Jede Münze hat halt zwei Seiten.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.055 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Function mit mehreren Rückgabewerten

  Alt 13. Dez 2024, 02:24
Tuple unpacking ist ein ziemlich klares und verständliches Konzept.

Was an dem Code oben etwas ungewohnt ist, ist die Typinferenz bei der give_two Funktion.
Aber wenn man klareren Code schreiben will, dann kann man auch Type Hints (seit Python 3.9) und den Tuple Konstructor explizit nutzen:

Code:
def give_two() -> tuple[int,int]:
  return (1, 2)
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight

Geändert von Stevie (13. Dez 2024 um 02:26 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.119 Beiträge
 
Delphi 12 Athens
 
#7

AW: Function mit mehreren Rückgabewerten

  Alt 16. Jan 2025, 06:59
Tuple unpacking ist ein ziemlich klares und verständliches Konzept.
Verständlich ist es schon, aber wie in Delphi bei Methoden mit vielen Parametern unübersichtlich. Da finde ich benannte Argumente in C# deutlich besser. Entsprechend finde ich es auch besser, wenn man einen Record oder ähnliches zurückbekommt, so dass man mit Namen auf die Werte zugreift und nicht z.B. über Tupel basierend auf der Reihenfolge.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.055 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#8

AW: Function mit mehreren Rückgabewerten

  Alt 16. Jan 2025, 11:21
Das ist Sache, wie Tuples implementiert werden - in C# kannst du explizite Feldnamen weglassen, oder sie definieren - siehe https://learn.microsoft.com/en-us/do...s/value-tuples
Ebenfalls in Python kannst du auch Named tuples nutzen, siehe https://www.slingacademy.com/article...uple-examples/ - das kommt eigtl schon fast an eine Deklaration eines expliziten Recordtyps heran, was wir auch in Delphi machen können.

Allerdings gehen viele Bestrebungen in modernen Programmiersprachen dahin, die sogenannte Cermony zu verringern, also diesen ganzen Boilerplate Code, den man so schreiben muss, damit der Compiler versteht, was man eigtl will. Gute Designs opfern hierbei wenig bis gar keine Verständlichkeit des Source Codes.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
10.119 Beiträge
 
Delphi 12 Athens
 
#9

AW: Function mit mehreren Rückgabewerten

  Alt 16. Jan 2025, 13:34
Allerdings gehen viele Bestrebungen in modernen Programmiersprachen dahin, die sogenannte Cermony zu verringern, also diesen ganzen Boilerplate Code, den man so schreiben muss, damit der Compiler versteht, was man eigtl will.
In dem Fall geht es ja um die Lesbarkeit und Wartbarkeit für den Entwickler, nicht um etwas, das der Compiler braucht. Ich bin kein Freund davon, möglichst wenige Buchstaben zu schreiben, sondern finde gute und schnelle Lesbarkeit viel wichtiger.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

Registriert seit: 12. Aug 2003
Ort: Soest
4.055 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: Function mit mehreren Rückgabewerten

  Alt 17. Jan 2025, 10:18
Allerdings gehen viele Bestrebungen in modernen Programmiersprachen dahin, die sogenannte Cermony zu verringern, also diesen ganzen Boilerplate Code, den man so schreiben muss, damit der Compiler versteht, was man eigtl will.
In dem Fall geht es ja um die Lesbarkeit und Wartbarkeit für den Entwickler, nicht um etwas, das der Compiler braucht. Ich bin kein Freund davon, möglichst wenige Buchstaben zu schreiben, sondern finde gute und schnelle Lesbarkeit viel wichtiger.
Korrekt, es geht um die Essenz und nicht um den ganzen Extraklump (aka Ceremony) - gute Languagedesigner (von denen es gar nicht so viele gibt) achten darauf, dass gerade nicht die Lesbarkeit und Verständlichkeit des Codes leidet sondern verbessert wird, da man keine kognitive Leistung damit verplempert, im Kopf den ganzen Extraklump durchzuparsen. Natürlich sind bei langjährigem Gebrauch bestimmte Synapsen schon ausgetreten und so mancher meint, dass dies und das weniger lesbar oder verständlich ist. Das ist aber genauso als ob ich behaupte, dass chinesisch total schwierig und unverständlich ist, nur weil ich es nicht kann. Milliarden von Menschen würden mir da vermutlich widersprechen.

Ich führ das jetzt nicht weiter aus, weil das schon sehr offtopic ist und ich keine Lust habe, ein Essay über die Thematik zu schreiben.
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

Delphi Sorcery - DSharp - Spring4D - TestInsight
  Mit Zitat antworten Zitat
Antwort Antwort


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 15:38 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