Enumeration, Compiler und Alternativen

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
LazProgger
Beiträge: 63
Registriert: Di 11. Mär 2014, 00:33

Enumeration, Compiler und Alternativen

Beitrag von LazProgger »

Ich habe den Fall dass ich einige (viele) Strings in meinem Programm verwalten muss. Die Strings sollen änderbar sein und auf sie soll an verschiedenen Stellen des Programms zugegriffen werden können.

Meine erste Idee, für jeden String eine Variable zu deklarieren, habe ich verworfen.

Meine zweite Idee ist, alle Strings in einen Array zu packen und auf die Strings via einer Enumeration zuzugreifen, also etwa so (die Enumeration deswegen, da man sonst schlecht weiß welcher String sich hinter welchem Index verbirgt):

Code: Alles auswählen

 
e = (strA:=0, strB, strC);
 
arr[ord(strA)] := 'strA';  // arr ist ein array of string}
arr[ord(strB)] := 'strB';
arr[ord(strC)] := 'strC';
 
Nun ist die Frage: Was ist aus Compiler-Sicht besser?

Ich denke die Idee, sagen wir 500 Einzelvariablen zu deklarieren, ist nicht so toll, oder? Schließlich müsste jede Einzelvariable dann ja einzeln verwaltet werden und nur den Array zu verwalten ist besser für die Performance, oder?

Aber wie sieht es mit dem Enumeration-Verfahren aus? Wandelt der Compiler nun das ord(strA) schon zur Compile-Zeit in eine 0 um (wäre ideal)?
Oder ist die Performance schlecht bei diesem Konstrukt?

Oder gibt es noch bessere Alternativen für meinen Fall das umzusetzen?

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Enumeration, Compiler und Alternativen

Beitrag von theo »

LazProgger hat geschrieben:Oder gibt es noch bessere Alternativen für meinen Fall das umzusetzen?
Kommt drauf an, was das werden soll. Von TStringList bis Datenbank ist vieles möglich.
Leider habe ich keine Ahnung wozu das dient. Bitte erklärt das doch jeweils gleich, sonst kann man schlecht den richtigen Tipp geben.

LazProgger
Beiträge: 63
Registriert: Di 11. Mär 2014, 00:33

Re: Enumeration, Compiler und Alternativen

Beitrag von LazProgger »

Also es geht einfach darum dass ich eine Liste von Strings habe, auf die ich im Programm zugreifen möchte. Also zum Beispiel "Einfügen", "Löschen", "Beenden" und so weiter. Und diese Strinsg müssen irgendwo gespeichert werden (aber nicht in externen Dateien).
Da man darauf vernünftig zugreifen können muss sollte der Aufruf über einen definierbaren Namen möglich sein. Also zum Beispiel strInsert, strDelete, strClose.
Daher ist ein einfacher Array oder eine Stringlist ja nicht per se geeignet, da man ja nicht weiß welchen Index jetzt "Einfügen" oder "Löschen" hat.
Daher die Idee das entweder mit Konstanten oder der Enumeration Sache zu lösen (um einen Match zwischen Index und einer im Quelltext lesbaren Representation zu haben.

Also eigentlich kann man meine Frage reduzieren auf: Wie ist es am einfachsten und am besten für die Performance eine Abbildung von einem Integer-Wert auf einen im Quelltext lesbaren Bezeichner zu haben.

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2808
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Enumeration, Compiler und Alternativen

Beitrag von m.fuchs »

LazProgger hat geschrieben:[...]Daher die Idee das entweder mit Konstanten[...]
Da hast du auch schon deine Antwort. Wenn sich die Dinger im Verlaufe des Programms nicht ändern, nimm Konstanten.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10869
Registriert: Mo 11. Sep 2006, 19:01

Re: Enumeration, Compiler und Alternativen

Beitrag von theo »

Ja, Konstanten würde ich auch sagen.
Für mich hast du den Zweck aber noch immer nicht erklärt.
Ich kann noch immer nicht einschätzen, welche Rolle eine maximale Performance hier spielt.

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: Enumeration, Compiler und Alternativen

Beitrag von Christian »

Wenn du Übersetzbare Strings für diene Oberfläche haben willst sind
ressourcestrings
das richtige.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: Enumeration, Compiler und Alternativen

Beitrag von Socke »

LazProgger hat geschrieben:Aber wie sieht es mit dem Enumeration-Verfahren aus? Wandelt der Compiler nun das ord(strA) schon zur Compile-Zeit in eine 0 um (wäre ideal)?
Oder ist die Performance schlecht bei diesem Konstrukt?
Ungeachtet der anderen Rückfragen, sage ich hierzu: Array [e] of String; - man kann die Enumeration direkt als Array-Schlüssel verwenden.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Enumeration, Compiler und Alternativen

Beitrag von mschnell »

Socke hat geschrieben:Ungeachtet der anderen Rückfragen, sage ich hierzu: Array [e] of String; - man kann die Enumeration direkt als Array-Schlüssel verwenden.
Genau so macht man das. Vermutlich erzeugt der Compiler daraus exakt denselben Code wie mir einem ord(..) Konstrukt.

-Michael

Antworten