Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Reservirtes Wort String und keins Integer (https://www.delphipraxis.net/180528-reservirtes-wort-string-und-keins-integer.html)

jdelphi 26. Mai 2014 19:26

Reservirtes Wort String und keins Integer
 
Joa wie der Tittel schon sagt.

Warum ist String ein Reserviertes Wort und Integer keins.

Wenn man bei Delphi eine String Variable definiert, erscheint String in Fett, da es ein Reserviertes Wort ist.

Wenn man allerdings Integervaribalen Definiert, wird Integer nicht Fett hervorgehoben.

mkinzler 26. Mai 2014 19:30

AW: Reservirtes Wort String und keins Integer
 
Integer ist aber trotzdem ein reserviertes Wort. Auch wenn die IDE es vielleicht nicht erkennt.

Popov 26. Mai 2014 21:10

AW: Reservirtes Wort String und keins Integer
 
Zitat:

Zitat von jdelphi (Beitrag 1260341)
Warum ist String ein Reserviertes Wort und Integer keins.

Wenn man bei Delphi eine String Variable definiert, erscheint String in Fett, da es ein Reserviertes Wort ist.

String ist nicht fett, weil es ein Variablentyp ist, das ist nur ein Zufall. Laut meiner Kenntnis ist String deshalb fett, weil es auch eine Funktion ist, z. B.
Delphi-Quellcode:
ShowMessage(String('Hallo'));
//
Gäbe es die Funktion nicht, wäre String als Variablentyp nicht fett.

Ob es nun diese oben genannte Funktion ist oder eine andere, das weiß ich jetzt auch nicht genau. Was ich aber ziemlich sicher weiß ist, dass String neben dem Variablentyp auch noch eine andere wichtige Funktion hat. Und deshalb ist es ein reserviertes Wort und fett. Nicht weil es ein Variablentyp ist.

Stevie 26. Mai 2014 22:02

AW: Reservirtes Wort String und keins Integer
 
Das gabs schonmal.

Medium 27. Mai 2014 01:26

AW: Reservirtes Wort String und keins Integer
 
Zitat:

Zitat von Popov (Beitrag 1260353)
Laut meiner Kenntnis ist String deshalb fett, weil es auch eine Funktion ist

Das kann nicht der wirkliche Grund sein. Eigentlich ist das in deinem Beispiel ein Cast, kein Funktionsaufruf. Da String (u.a.) aber Compilermagic nutzt, wird hinter den Kulissen mehr gemacht als bei einem Cast einfacher Typen. Semantisch ist es aber dennoch kein Funktionsaufruf, Casts sehen aber syntaktisch in Delphi genau so aus.

Wie der verlinkte Thread gut demonstriert ist der genaue Grund dafür nicht (mehr) wirklich offensichtlich. Ich schließe mich da aber der Theorie von dort an, dass es schlicht ein Relikt aus Zeiten ist, wo String und Array und File ziemlich die einzigen Typen waren, bei denen mehr passiert ist als stumpfes "interpretiere Register X als [Typ]", und diese daher eher als Sprachfeature galten. Würde man die Delphi Language heute erfinden, würde vermutlich keiner mehr auf die Idee kommen diese auf die Art hervorzuheben. Ein Fall von "ist jetzt halt einfach so" :)

Dejan Vu 27. Mai 2014 06:39

AW: Reservirtes Wort String und keins Integer
 
Wie ich an anderer Stelle schon schrieb:
'string' ist ein Systemtyp, also ein Typ, der nicht durch andere Sprachelemente erzeugt werden kann, und damit integraler Bestandteil der Sprache => 'string' ist ein fett geschriebenes weil reserviertes Schlüsselwort. 'Integer' kann durch '..' dargestellt werden, ist also ein normaler Basistyp.

'Double','Single','Real' sind Records und werden deshalb syntaktisch wie 'Integer' behandelt.

'Char'... Mist... ist, öhm.. eine Ausnahme. :mrgreen: Wie auch..öhm.. 'Boolean'.

mkinzler 27. Mai 2014 07:12

AW: Reservirtes Wort String und keins Integer
 
Zitat:

'Double','Single','Real' sind Records
:gruebel:

himitsu 27. Mai 2014 07:15

AW: Reservirtes Wort String und keins Integer
 
Zitat:

Zitat von Popov (Beitrag 1260353)
String ist nicht fett, weil es ein Variablentyp ist, das ist nur ein Zufall. Laut meiner Kenntnis ist String deshalb fett, weil es auch eine Funktion ist, z. B.
Delphi-Quellcode:
ShowMessage(String('Hallo'));
//
Gäbe es die Funktion nicht, wäre String als Variablentyp nicht fett.

String ist keine Funktion.

Sonst müsste jeder CAST fett sein.
Delphi-Quellcode:
ShowMessage(SortString('Hallo'));
ShowMessage(AnsiString('Hallo'));
ShowMessage(FloatToStr(Double(1)));
Reservierte Wörter sivd einfach nur fest und lassen sich nicht für irgendwas Anderes verwenden. Sie sind halt nur für diese eine Funktion reserviert.
Delphi-Quellcode:
type
  Integer = Double;
  string = Integer; // geht nicht

const
  True = False;
  False = 123;

var
  False: Integer;
  Integer: TObject;
  string: IInterface; // geht nicht

Das mag vielleicht historische Gründe haben, aber meiner Meinung Nach sollte String kein reserviertes Wort sein.
Problem: Wenn man das jetzt ändert, dann sind Neue Codes womöglich nicht mehr mit alten Compilern kompatibel.

Genauso gibt es ein Problem, wenn man neue reservierte Wörter und Steuerzeichen einführt, wo dann alte Codes nicht mehr mit neuen Compilern compatibel sein könnten.
Siehe Generics, Attribute, ClassHelper, überladene Operatoren, anonyme Funktionen usw.

An der Liste etwas zu ändern ist halt nicht so einfach.



Witzig sind aber die reservierten Wörter, welche nur in einem bestimmten Kontext "reserviert" sind, wie z.B. Index.
Problem ist da, daß der Code-Highlighter das nicht ganz kappiert und das Wort auch dann fett schreibt, selbst wenn es da gerade nicht reserviert ist.

Dejan Vu 27. Mai 2014 07:19

AW: Reservirtes Wort String und keins Integer
 
Zitat:

Zitat von mkinzler (Beitrag 1260380)
Zitat:

'Double','Single','Real' sind Records
:gruebel:

Kannst Du sie als Record darstellen? Wie sind die Datentypen aufgebaut? Als Record. Das sind strings zwar auch, aber wegen dem Referenzzähler, der *vor* der Adresse der Variablen steht, kann man ihn nicht als Record definieren.

himitsu 27. Mai 2014 07:29

AW: Reservirtes Wort String und keins Integer
 
Der String kann natürlich in einen Record rein.

PS: die Referenzzählung, das Encoding und die CharSize stehen vor den Daten. (nicht alles bei ShortString und WideString)
In der "Variable" steht nur der Zeiger auf die Daten (beim LongStrings zeigt der Zeiger aber auf das erste Char und davor verstecken sich diese Zusatzinfos, so, wie bei TClassvor beim Zeiger noch Daten liegen ... es gibt je einen festen Index nach vorne und zurück, für bestimmte Informationen)

Bei Strings, Objekten, Interfaces gibt es den darstellbaren "inneren" Record und außen einen "Record" nur mit einem Pointer drin, wenn man es unbedingt so darstellen will.
Beim Variant wird es dann noch schlimmer. (ein bis zwei Records)


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:58 Uhr.
Seite 1 von 3  1 23      

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