Laden...

Dynamische Variablennamen

Erstellt von Curse4Life vor 18 Jahren Letzter Beitrag vor 17 Jahren 16.404 Views
C
Curse4Life Themenstarter:in
452 Beiträge seit 2005
vor 18 Jahren
Dynamische Variablennamen

[EDIT]Dies ist ein Thread, auf den aus der FAQ verwiesen wird. Bitte keine weitere Diskussion, sondern nur wichtige Ergänzungen und diese bitte knapp und präzise. Vielen Dank![/EDIT]

Hi,

die frage stelle ich für einen Kollegen der in aspx eine Seite schreibt und ebenfalls wie ich von PHP kommt.

In PHP gibt es die Möglichkeit Variablennamen dynamisch zu bestimmen sprich:


for($i=1; $i < 4; $i++)
{
    $varName = "Stirb_Langsam_" . $i;
    $$varName = "Cooler Film";
}

Wenn $i jetzt eine Laufvariable ist die in dem Fall noch den Wert 3(Hoffentlich bald 4) hat.

Dann hätte ich 3 Variablen am Ende erstellt.

Also in C# wäre es schön wenn das so gehen würde, um mal deutlich zu machen was ich von euch überhaupt will, für die die kein PHP können 🙂


for(int i=1; i < 4; i++)
{
    String "Stirb_Langsam_" + i;
}

Geht das auch irgendwie mit C#, weil das geht sogar in JavaScript und wenn es in C# nicht geht ist das ja schon fast arm 😉

mfg

4.506 Beiträge seit 2004
vor 18 Jahren

Hallo Curse4Life,

nein das geht nicht, aber ich finde das gar nicht arm.

Es gibt genug Alternativen. Z.B. Arrays, die über String-Namen indizierbar sind.

Warum sollte man dann dynamische Variablennamen unterstützen? Ich würde es anders herum sehen. Bei PHP und JavaScript geht das, weil die Alternative zu 'hochwertig', bzw. zu kompliziert wäre, sie umzusetzen 😉

Hashtables und Dictionarys haben von Haus aus solche Eigenchaften.

Ciao
Norman-Timo

A: “Wie ist denn das Wetter bei euch?”
B: “Caps Lock.”
A: “Hä?”
B: “Na ja, Shift ohne Ende!”

6.862 Beiträge seit 2003
vor 18 Jahren

Bin auch der Meinung dass man durch die ganzen Möglichkeiten der verschiedenen Collections sowas gar net braucht. Für den Anfänger sicherlich leichter nachzuvollziehen wenn man einfach Variablennamen durchnummerieren kann statt über nen Array zu gehen, aber der praktische Nutzen ist doch bei fast 0.

Baka wa shinanakya naoranai.

Mein XING Profil.

563 Beiträge seit 2004
vor 18 Jahren

arm sind dynamische variablennamen!

Wenn man sowas braucht, macht man einen Designfehler. Für was brauchst du var1 var 2 usw.? da macht man ein var[0] var[1] usw.

S
8.746 Beiträge seit 2005
vor 18 Jahren

Arm oder nicht ist die falsche Frage, denn dynamische Variablennamen sind mit typisierten Sprachen nicht machbar. Aus qualitativer Sicht verschlechtern solche "Tricks" die Lesbarkeit und somit die Wartbarkeit von Code und sind somit eher abzulehnen. Zumal diese Tricks via Hashtables ohne Probleme sauber nachzubilden sind (Abbildung Schlüssel auf Wert).

3.728 Beiträge seit 2005
vor 18 Jahren
Quick und Dirty

PHP ist eine Skriptsprache. Der Vorteil von PHP ist, dass man solche Sachen machen kann. In kürzester Zeit kann man so passable Webseiten bauen. Dafür hat man bei PHP sehr schnell viel Spaghetti-Code.

Bei C# kann es nicht funktionieren, weil C# Code bei der Ausführung nicht interpretiert wird, sonder vorher übersetzt. Nach dem übersetzen ist der erzeugte Code (Im Fall von C# MSIL-Code) statisch. Deshalb wirst Du dieses Funktionsmerkmal nur bei Skriptsprachen finden.

Weder PHP noch C# ist also "arm".

49.485 Beiträge seit 2005
vor 18 Jahren

Hallo zusammen,

ich schließe mich allen Antwortern an und will nichts in Frage stellen.

Nur eine kleine Anmerkung: Gerade durch den Zwischencode und durch die "Headerfreiheit/Selfcontaintness" von C# wären dynamische Zugriffe auf Variablen möglich: per Reflection.

Das ändert aber nichts daran, dass solche Zugriffe (und nicht das Fehlen der Zugriffe) arm sind. 🙂

herbivore

369 Beiträge seit 2006
vor 17 Jahren

Und genau mit Reflection gehen auch dynamische Variablenbezeichner: System.Reflection.Emit ist die Lösung - einfach zur Laufzeit eine entsprechende Assembly erstellen und ausführen 😉 ... Am Beispiel TypeMock.Net sieht man, dass es unter gewissen Sicherheitstechnischen Voraussetzungen auch möglich ist bestehenden Code zur Laufzeit zu substituieren, also auch in dieser Hinsicht sind Möglichkeiten gegeben. Funktioniert aber eben nur durch die dynamische Ausführung des ganzen - die Vorteile einer statischen Übersetzung sind dahin und überdies gelten die Kritikpunkte meiner Vorposter.

F
10.010 Beiträge seit 2004
vor 17 Jahren

Naja, wer mit TypeMock und oder Emit umgehen kann, braucht aber keine dynamischen
Variablen, der hat ja SW-Entwicklung an sich schon verstanden 😉