![]() |
AW: Function mit mehreren Rückgabewerten
Wäre natürlich schön, wenn Delphi nativ Tupel unterstützen würde. Python kann das sehr schön:
Code:
In Delphi gibt es da nur drei möglichkeiten:
def give_two:
return 1, 2 one, two = give_two()
|
AW: Function mit mehreren Rückgabewerten
Zitat:
|
AW: Function mit mehreren Rückgabewerten
Zitat:
Das bedeuted der Parameter wird immer vor dem Aufruf (zumindest leer bzw. nil) initialisiert, nicht innerhalb. Eine Eigenheit die man bei Verwendung anderer Programmiersprachen berücksichtigen muss. |
AW: Function mit mehreren Rückgabewerten
Zitat:
![]() |
AW: Function mit mehreren Rückgabewerten
Noch besser ... das Result, wird bei "Managed Types" und für Typen größer der CPU-RegisterGröße (Record und Static-Array) intern als VAR-Parameter behandelt,
womit das Result nicht innerhalb der Funktion initialisiert wird, sondern beim Aufrufer, was in einer Schleife echt wunderschöne Ergebnisse liefert.
Delphi-Quellcode:
Besonders praktisch, da es für Result (wenn managed) keine Meldung gibt, dass Dieses nicht initialisiert sei (was ja prinzipiell "eigentlich" auch richtig ist, aber logisch nicht wirklich verständlich)
funtion Test: string
begin Result := Result + 'a'; end; var S: string; begin for var i := 1 to 3 do begin S := Test; ShowMessage(S); end; end; |
AW: Function mit mehreren Rückgabewerten
Zitat:
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. |
AW: Function mit mehreren Rückgabewerten
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) |
AW: Function mit mehreren Rückgabewerten
Zitat:
Zusätzlich bin ich ein großer Freund sprechender Variablen, also könnte das auch in den meisten Fällen reichen:
Delphi-Quellcode:
Das hat sogar den schönen Vorteil, dass ich auch innerhalb der Funktion sofort weiss, was die Parameter so machen sollen.procedure GibMir( AInput, AOutput: string); begin AOutput := AInput + '...'; end; |
AW: Function mit mehreren Rückgabewerten
Zitat:
Zitat:
Delphi-Quellcode:
. 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.
out AOutput: string
|
AW: Function mit mehreren Rückgabewerten
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:28 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