Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   variablen in variablen (https://www.delphipraxis.net/167132-variablen-variablen.html)

JP29 14. Mär 2012 20:03

variablen in variablen
 
hallo,
ich hab da mal ne allgemeine frage zu variablen.
gibt es irgendeine möglichkeit variablen abhängig von anderen variablen bspw. bei records zu machen...
also jetzt konkret der nutzer wählt etwas aus und eine variable bekommt den wert 'audi' und jetzt habe ich ganz viele records wie z.b. audi, mercedes,...
und jetzt soll wenn ein bspw. auto ausgewählt ist der wert automatisch in eine variable eingefügt werden...
also etwa so:

x:='audi';

label1.caption:=x.preis;

also so in der art

wäre echt cool wenn es da was geben würde, würde vieles vereinfachen

danke für eure antworten

mkinzler 14. Mär 2012 20:13

AW: variablen in variablen
 
So einfach funktioniert das nicht. Man könnte baer mit assoziativen Arrays arbeiten oder dafür extended RTTI heranziehen. Performat wird aber keine der Möglichkeiten sein

Popov 14. Mär 2012 20:16

AW: variablen in variablen
 
Du kannst an alle Komponenten wie ListBox oder ComboBox usw. Objekte "anhängen". Wählt einer was aus, liest du die Informationen aus dem Objekt aus. Was das ist, hängt an dir.

himitsu 14. Mär 2012 20:53

AW: variablen in variablen
 
RTTI alleine wird da nicht viel helfen, denn woher soll die Variable dann den Preis wissen, wenn man ihr nur einen String zuweist?

In einen OleVariant kann man Interfaces reinpacken und dann über dynamische Property darauf zugreifen.
z.B. zu sehen bei beim TWebBrowser, wenn man über DOM auf den HTML-Inhalt zugreift.

Aber im Prinzip wäre hier wohl OOP eher angebracht.
Eine TAuto-Klasse, welche einen Laden-Befehl hat, dem man die Marke sagt und dann kann man über die Property der Klasse auf die Daten des Autos zugreifen.

PS: Der Weg über OleVariant hat einen Nachteil ... die Autovervollständigung des Code-Insight kann nicht helfen, da sie aus der Variable (wärend der Programmierung) natürlich nicht weiß ob und was für ein Objekt mal da drin sein wird.

Popov 14. Mär 2012 21:21

AW: variablen in variablen
 
Ich habe das Gefühl, das sich der Threadersteller etwas komplizierter ausgedrückt hat als er es evtl. benötigt. Irgendwie bin ich der Meinung zu erraten was er haben will, aber es soll bitte sein Vorhaben vorher etwas konkretisieren. Vielleicht täusche ich mich.

Furtbichler 15. Mär 2012 00:03

AW: variablen in variablen
 
Zitat:

Zitat von mkinzler (Beitrag 1156602)
Man könnte ...mit assoziativen Arrays .. Performant wird aber keine der Möglichkeiten sein

:shock: Eine Hashmap ist nicht performant? Das ist mir neu.

s.h.a.r.k 15. Mär 2012 08:33

AW: variablen in variablen
 
Himitsu hat schon recht. Hier sollte definitiv auf OOP zurückgegriffen werden, wenn nicht sogar auf die netten Interfaces. Das mit den Records wäre hier imho eher fehl am Platz! Hier könnte man auch herrlich mit Spring arbeiten.
Delphi-Quellcode:
IAuto = interface
  // GUID
  function GetPrice(): Integer;
  function GetWeightInKg(): Integer;
  // etc.
end;

TAudi = class(TInterfacedObject, IAuto)
public
  function GetPrice(): Integer;
  function GetWeightInKg(): Integer;
end;

TMercedes = class(TInterfacedObject, IAuto)
public
  function GetPrice(): Integer;
  function GetWeightInKg(): Integer;
end;

// Klassen im DI-Container registrieren
GlobalContainer.RegisterType<TAudi>().Implements<IAuto>('audi');
GlobalContainer.RegisterType<TAudi>().Implements<IAuto>('mercedes');
GlobalContainer.Build();

// So, so viel zur Vorarbeit...

var
  CarName : string;
begin
  CarName := GetCarName();
  Car := ServiceLocator.GetService<IAuto>(CarName);
  edtCarPrice.Text := Car.GetPrice();
  edtCarWeight.Text := Car.GetWeight();
end;

// So, nun ist nur noch die Frage, wie GetCarName aussieht...
fnuction TForm1.GetCarName(): string;
begin
  Result := LowerCase(cmbbxCarSelection.Text);
 
  // -- Oder du musst ein Mapping vornehmen --

  if (cmbbxCarSelection.Text = 'Audi A3') then
    Result := 'audi'
  else if (cmbbxCarSelection.Text = 'Mercedes A-Klasse') then
    Result := 'mercedes'
  // etc...

end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:09 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf