AGB  ·  Datenschutz  ·  Impressum  







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

Delphi 13 - Ternary Operator

Ein Thema von bernau · begonnen am 27. Aug 2025 · letzter Beitrag vom 2. Sep 2025
Antwort Antwort
Seite 5 von 6   « Erste     345 6      
Benutzerbild von jaenicke
jaenicke
Online

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

AW: Delphi 13 - Ternary Operator

  Alt 31. Aug 2025, 14:13
Aber mal ehrlich muss Delphi die Syntax von anderen Sprachen übernehmen? Wie lange ist Delphi dann noch Pascal?
Ich finde es schon gut, wenn sich eine Sprache weiterentwickelt. Und mit dem Argument hätte man damals auch Generics ablehnen können, deren Syntax und Funktionalität ja auch übernommen wurde.

Wie schon geschrieben gefällt mir die aufgeblähte Pascalsyntax des ternären Operators nicht. Das heißt nicht, dass ich ihn nicht verwenden werde. Aber ich finde die Umsetzung in der Mehrheit der Sprachen besser.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi 13 - Ternary Operator

  Alt 31. Aug 2025, 15:05
Nja, im Prinzip nutzt es ja nur die bekannte Syntax, womit es somit überall gleich bleibt, egal ob einzeln oder mitten in einer Berechnung.

Ähnlich sieht es z.B. mit dem CASE in Postgres aus, was ja auch einzeln oder mittendrin genutzt werden kann.




Und das Andere, bei i += 1; gegenüber i := i + 1 fällt es nicht auf,
aber s := s + ' '; oder s += ' '; (wobei ich hoffe die Codoptimierung macht aus Ersten sowieso bereits Letzteres),
also zwei Strings verknüfen und einer Variable zuweisen und dann den alten String wegwerfen, oder den neuen string möglichst inplace an den bestehenden anhängen,
aber besonders bei Längerem hätte es Vorteile:
Delphi-Quellcode:
meinelistenvariable.sonstwo[abcdefghijklmnopq].nochwas := meinelistenvariable.sonstwo[abcdefghijklmnopq].nochwas + 'alleluja';
meinelistenvariable.sonstwo[abcdefghijklmnopq].nochwas += 'alleluja';
Letztes ist nicht nur kürzer ... es fällt auch sofort auf, dass hier Quelle und Ziel identisch sind.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
650 Beiträge
 
Delphi XE6 Enterprise
 
#43

AW: Delphi 13 - Ternary Operator

  Alt Gestern, 10:44
Delphi-Quellcode:
meinelistenvariable.sonstwo[abcdefghijklmnopq].nochwas := meinelistenvariable.sonstwo[abcdefghijklmnopq].nochwas + 'alleluja';
meinelistenvariable.sonstwo[abcdefghijklmnopq].nochwas += 'alleluja';
Letztes ist nicht nur kürzer ... es fällt auch sofort auf, dass hier Quelle und Ziel identisch sind.
Pascal böte ja eine Lösung des Problems. Einfach und übersichtlich. Blöd nur, dass man sie nicht verwenden soll:
with meinelistenvariable.sonstwo[abcdefghijklmnopq] do nochwas := nochwas + 'alleluja'; .

Delphi-Quellcode:
Tsonstwo ist eine Klasse:
var x := meinelistenvariable.sonstwo[abcdefghijklmnopq]; x.nochwas := x.nochwas + 'alleluja';
Tsonstwo ist ein Record:
var x := @meinelistenvariable.sonstwo[abcdefghijklmnopq]; x^.nochwas := x^.nochwas + 'alleluja';
(dieser "richtige Weg" ist mir bekannt)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Delphi 13 - Ternary Operator

  Alt Gestern, 11:41
Bei deinem Beispiel das ^ einmal vergessen,
oder irgendwann aus dem Objekt einen Record gemacht,
und schon passieren komische Dinge (oder auch nicht).

Somit würden += und Co. also nicht nur kürzeren, sondern auch fehlerunanfälligeren Code ermöglichen.
Gerade für sowas sind Syntaxneuerungen was Schönes, wenn es damit dann auch gleich besser, einfacher und sicherer werden könnte.


Zitat:
sie nicht verwenden soll
Nicht sollen ist nicht ganz richtig. (aus schlechten Erfahrungen herhaus, wird davon gern abgeraten)

Zuerst weil der Debugger oft nicht damit klar kommt und man innerhalb des WITH dann nicht an Variablenwerte einsehen kann.

Sowie es zukünftig Probleme geben könnte, und es dann nicht mehr so funktioniert, wie man es sich mal dachte.
(was bereits mehrmals passiert war, weil z.B. Klassen/Records-Interfaces verändert/erweitert wurden)

Und wenn du einen längeren WITH-Block vor dir hast (hier hatte ich schon einen mit fast 100 Zeilen gesehen, 3 WITH verschachtelt und bei einem 2 Dinge drin)
du selbst nicht mehr erkennen kannst, was von wo kommt.
Ja, inline VAR ist eine geile Möglichkeit. (wir hätten uns früher aber auch über benamte WITH gefreut, also anstatt einer impliziten Temp-Variable, ihr selbst einen Namen geben zu können und den dann zu nutzen)

z.B. im FormCreate ein
Delphi-Quellcode:
//var R: TRect;
with R do begin
  Width := Right - Left;
  Height := Bottom - Top;
end;
Gedacht war also
Delphi-Quellcode:
with R do begin
  {Self.}Width := {R.}Right - {R.}Left;
  {Self.}Height := {R.}Bottom - R.}Top;
end;
bis jemand die eigentlich nette Idee hatte, daß TRect ein Width- und Height-Property bekommt,
es plötlich zu dem wurde
Delphi-Quellcode:
with R do begin
  {R.}Width := {R.}Right - {R.}Left;
  {R.}Height := {R.}Bottom - R.}Top;
end;
und man sich wunderte, warum die Form ihre Größe nicht mehr verändert, wenn mit neuen Delphi kompiliert.

Dafür geht es jetzt so, gleich viel besser:
Delphi-Quellcode:
{Self.}Width := R.Width;
{Self.}Height := R.Height;

// oder
{Self.}BoundsRect := R;
Ein Therapeut entspricht 1024 Gigapeut.

Geändert von himitsu (Heute um 09:10 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Stevie
Stevie

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

AW: Delphi 13 - Ternary Operator

  Alt Heute, 08:12
FreePascal kann das https://www.freepascal.org/docs-html/ref/refsu52.html
Stefan
“Simplicity, carried to the extreme, becomes elegance.” Jon Franklin

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

Registriert seit: 7. Sep 2006
Ort: Berlin
446 Beiträge
 
Delphi 12 Athens
 
#46

AW: Delphi 13 - Ternary Operator

  Alt Heute, 12:29
Der ternäre Operator war über Jahre hinweg eines der häufigsten angefragten Spracherweiterungen, und mit RAD 13 wird er nun endlich umgesetzt.

Gleichzeitig ist er optional und man "kann" ihn verwenden, muss aber nicht.

Auch das Argument mit "IfThen" möchte ich kurz ansprechen. Denn "IfThen" wertet alle Parameter aus (das ist relevant!) und nicht nur die notwendigen Parameter, hat gleichzeitig eine eingeschränktere Typzuordnung (und erfordert unterschiedliche uses-Anweisungen, um Funktionen für verschiedene Typen zu finden), funktioniert nicht für so viele Datentypen, ist ein zusätzlicher Funktionsaufruf usw...

Daher würde ich den ternären Operator als wertvolle Spracherweiterung für Object Pascal betrachten, worüber man natürlich mit Pro/Contra diskutieren kann.

Wer mehr wissen möchte, darf sich gerne die Kommentare im englischen Blog (https://blogs.embarcadero.com/coming...elphi-language) durchlesen, wo Ian Barker viele Punkte im Detail beantwortet hat.
Devid
Devid Espenschied
Pre-Sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN

Geändert von DevidEspenschied (Heute um 13:24 Uhr) Grund: Obligatorisch -> Optional
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.809 Beiträge
 
Delphi 12 Athens
 
#47

AW: Delphi 13 - Ternary Operator

  Alt Heute, 12:54
Gleichzeitig ist er obligatorisch und man "kann" ihn verwenden, muss aber nicht.
Du meinst optional, nicht obligatorisch, oder?
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
Samorion

Registriert seit: 20. Dez 2023
Ort: Sachsen-Anhalt
6 Beiträge
 
Delphi 12 Athens
 
#48

AW: Delphi 13 - Ternary Operator

  Alt Heute, 13:10
Also ich freue mich über den Ternary Operator; als jemand, der von anderen Sprachen kommt.

Verstehe allerdings, wieso es manche gibt, die dagegen sein könnten (Wie man im Blogpost ja auch sieht)
Christian
  Mit Zitat antworten Zitat
DevidEspenschied

Registriert seit: 7. Sep 2006
Ort: Berlin
446 Beiträge
 
Delphi 12 Athens
 
#49

AW: Delphi 13 - Ternary Operator

  Alt Heute, 13:27
Zitat von Uwe Raabe:
Du meinst optional, nicht obligatorisch, oder?
Natürlich.

@Samorion: das Thema ist halt grundsätzlich, dass du als Compilerhersteller ständig Kritik bekommst, und man es nicht jedem Entwickler gerecht machen kann. Das ist ein langfristiges Problem, das sich nicht beheben lässt. Daher empfehle ich, sich die Spracherweiterung in Ruhe anzuschauen, sie auszuprobieren, und dann für sich und seine Projekte die Vorteile und Nachteile abzuwiegen.
Devid
Devid Espenschied
Pre-Sales Consultant
Embarcadero Germany GmbH
germany.info@embarcadero.com

Kein Support per PN
  Mit Zitat antworten Zitat
Bbommel

Registriert seit: 27. Jun 2007
Ort: Köln
674 Beiträge
 
Delphi 12 Athens
 
#50

AW: Delphi 13 - Ternary Operator

  Alt Heute, 13:44
Hm, ich traue mich auch mal mit meiner offenbar "unpopular opinion" aus dem Loch und muss sagen, dass ich das neue Feature ziemlich cool finde. IfThen hat mir nie so gefallen, die Gründe wurden hier mittlerweile alle genannt.

Und auch die Syntax finde ich, so wie sie vorgeschlagen ist, eigentlich okay, weil sie für mein Empfinden gut zur sonstigen Delphi-Syntax passt. Wir nutzen ja auch sonst keine/kaum kryptische Kurzschreibweisen, und so finde ich es dann auch hier gut, vor allem für die Lesbarkeit, dass man die Schlüsselworte if, then und else ausschreiben muss.

Dass es andere Punkte, vor allem Compiler-Bugs, gibt, die vielleicht noch dringender wären als neue Features, kann ich gut verstehen. In einer idealen Welt sollte man natürlich das eine tun, ohne das andere zu lassen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 5 von 6   « Erste     345 6      


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 18:29 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