AGB  ·  Datenschutz  ·  Impressum  







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

Konstante in Konstante

Ein Thema von lxo · begonnen am 24. Nov 2022 · letzter Beitrag vom 26. Nov 2022
Antwort Antwort
Seite 1 von 2  1 2      
lxo

Registriert seit: 30. Nov 2017
288 Beiträge
 
Delphi 12 Athens
 
#1

Konstante in Konstante

  Alt 24. Nov 2022, 16:17
Hallo zusammen,

kann mir einer erklären wieso a1 keine Konstante ist?
Delphi-Quellcode:
const
 a1: String = 'a';
 a2 = 'a';

 a3 = a1; // E2026 Konstantenausdruck erwartet
 a3 = a2; // Kein Problem

 a3: String = a1; // E2026 Konstantenausdruck erwartet
 a3: String = a2; // Kein Problem
  Mit Zitat antworten Zitat
Andreas13

Registriert seit: 14. Okt 2006
Ort: Nürnberg
719 Beiträge
 
Delphi XE5 Professional
 
#2

AW: Konstante in Konstante

  Alt 24. Nov 2022, 16:19
gelöscht
Grüße, Andreas
Wenn man seinem Nächsten einen steilen Berg hinaufhilft, kommt man selbst dem Gipfel näher. (John C. Cornelius)

Geändert von Andreas13 (24. Nov 2022 um 16:40 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.798 Beiträge
 
Delphi 12 Athens
 
#3

AW: Konstante in Konstante

  Alt 24. Nov 2022, 16:46
Das ist eine typisierte Konstante. Für die gelten halt Einschränkungen. https://docwiki.embarcadero.com/RADS...rte_Konstanten

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
Der schöne Günther

Registriert seit: 6. Mär 2013
6.159 Beiträge
 
Delphi 10 Seattle Enterprise
 
#4

AW: Konstante in Konstante

  Alt 24. Nov 2022, 17:22
Übrigens eins der Dinge die mich am meisten in Delphi aufregen. Du kannst nicht mal ein case -Statement über eine "typisierte Konstante", geschweige denn einen String machen.

Wenn man da schaut was mit C# oder Rust an Pattern Matching möglich ist... Alter Schwede.

Ok, aber das war wahrscheinlich gar nicht gefragt...
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Konstante in Konstante

  Alt 24. Nov 2022, 17:50
Eine "typisierte Konstante" ist delphi-intern eigentlich nur eine "schreibgeschützte Variable".

Untypisierte Konstanten, bzw. deren Wert wird bei Verwendung oftmals direkt an den Verwendungsorten eingesetzt/ersetzt. (bzw. Berechnungen kann der Compiler direkt auflösen/kürzen)
Typisierten Konstanten werden immer nur referenziert (mit Variablen-Referenzen kann CASE leider nicht umgehen). Ja, somit könnte man auch zentral deren Wert zur Laufzeit umschreiben.

Delphi-Quellcode:
const
 *a1: String = 'a';
 *a2 = String('a');
 *a3 = 'a';
Und z.B. TGUID, kann mit der Stringdeklaration '{0123-....-67-89}' nicht als untypisierte Konstante deklariert und somit auch an vielen Stellen nicht verwendet werden, z.B. in Interface-Deklarationen oder Array/Record-Konstanten.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (24. Nov 2022 um 17:52 Uhr)
  Mit Zitat antworten Zitat
freimatz

Registriert seit: 20. Mai 2010
1.444 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Konstante in Konstante

  Alt 25. Nov 2022, 08:38
Übrigens eins der Dinge die mich am meisten in Delphi aufregen. Du kannst nicht mal ein case -Statement über eine "typisierte Konstante", geschweige denn einen String machen.
Ich persönlich bin ganz froh drum. Es verhindert dass ich selber Strings für Aufzählungen missbrauche.

Geändert von freimatz (25. Nov 2022 um 08:50 Uhr)
  Mit Zitat antworten Zitat
BerndS

Registriert seit: 8. Mär 2006
Ort: Jüterbog
491 Beiträge
 
Delphi 12 Athens
 
#7

AW: Konstante in Konstante

  Alt 25. Nov 2022, 08:53
Case mit Strings geht doch über IndexStr bzw. IndexText.
Delphi-Quellcode:
      
  case IndexText(S, ['1', '2', '3']) of
        0:
          ...
        1:
          ...
        3:
          ...

      end;
  Mit Zitat antworten Zitat
Benutzerbild von dummzeuch
dummzeuch

Registriert seit: 11. Aug 2012
Ort: Essen
1.604 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#8

AW: Konstante in Konstante

  Alt 25. Nov 2022, 09:03
Und nicht vergessen: Es gibt einen Compiler-Switch, der es erlaubt, typisierte Konstanten zu verändern:

J+
bzw.
{$WRITEABLECONST ON}

Das würde bei case-Statements zu Chaos führen und deshalb sind sie nicht erlaubt.

Delphi-Quellcode:
Case x of
  a: ;
  b: ;
end;
ist intern etwas anderes als
Delphi-Quellcode:
if x = a then begin
end else if x = b then begin
end;
Thomas Mueller
  Mit Zitat antworten Zitat
TiGü

Registriert seit: 6. Apr 2011
Ort: Berlin
3.070 Beiträge
 
Delphi 10.4 Sydney
 
#9

AW: Konstante in Konstante

  Alt 25. Nov 2022, 09:30
Ich habe nichts produktives beizutragen, möchte aber meinen Unmut ebenso wie Günther darüber ausdrücken.
Erst Anfang der Woche wieder darüber gestolpert, als ich mehrere typisierte Konstanten mit gleichen Inhalt zusammenfassen wollte.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

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

AW: Konstante in Konstante

  Alt 25. Nov 2022, 10:19
Zu unerwarteten Fehlern beim CASE würde es nur führen, wenn man doppelte Werte durch die Änderungen bekommt UND der Compiler die Reihenfolge der Auswertung geändert (optimiert) hat.

Normal macht Case intern kein
Delphi-Quellcode:
if i = 0 then ...
else if i = 1 then ...
else if i = 3 then ...
else if i = 4 then ...
else if i = -5 then ...
else ...
sondern eher sowas
Delphi-Quellcode:
//Inc(i, 132) or Dec(i, 123) wenn erster Wert keine 0 ist
if i = 0 then ... // am Ende jeweils ein "goto CaseEnd;"
Dec(i);
if i = 0 then ...
Dec(i, 2);
if i = 0 then ...
Dec(i);
if i = 0 then ...
Inc(i, 9);
if i = 0 then ...
{else} ...
CaseEnd:
Ja, und sowas klappt nur, wenn die Konstanten "unveränderbar" sind, damit der Compiler quasi mit ihnen "rechnen" kann.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.

Geändert von himitsu (25. Nov 2022 um 10:33 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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:35 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