Moin!
ich wollte mal nachragen was genau es genau bedeutet wenn es z.B. heißt dass Werte zur Laufzeit noch geändert werden können? (also dynamisch)
Die "Laufzeit" ist der Zeitpunkt, zu dem das Programm ausgeführt wird und die Dinge tun soll, die einprogrammiert wurden.
Konkret: Mit Skriptsprachen wie Ruby oder Groovy oder ähnlichem ist das ja laut Dokumentation möglich, mit Java aber nicht. Was genau ist jetzt damit gemeint wenn da steht "..sind im Gegensatz zu Java dynamische Konstruktionen möglich, es sind also Änderungen zur Laufzeit möglich"
Der Klassiker hierfür ist die Funktion eval(). Damit wird, während das Programm läuft, weiterer Programmcode, der dynamisch in eine Variable gepackt wurde, ausgeführt. Damit das aber funktioniert, muss der gesamte Mechanismus, der vorher schon mal aus dem Quellcode das jetzt laufende Programm gemacht hat, nochmal mit dem Variableninhalt durchlaufen werden.
Sowas funktioniert nicht in jeder Programmiersprache - üblicherweise sind Skriptsprachen diejenigen, die sowas haben, und compilierte Sprachen haben so ein Feature nicht.
Allerdings: Jegliche Art von dynamischer Codeausführung bedeutet ja, dass der Code vorher dynamisch zusammengesetzt werden muss (wäre er statisch, könnte man sich die Konstruktion mit eval() schenken). Dynamischer Code ist aber eine schwierige Angelegenheit: Der Parser wird sich zwar melden, wenn böse Syntaxfehler dynamisch eingebaut wurden, aber wenn Sicherheitslücken bestehen, kann man sich als Programmierer auch ganz böse ins Knie schießen, wenn über dynamische Variablen fremder Code eingeschleppt und ausgeführt wird.
Und selbst, wenn das nicht passiert: Vollkommen dynamischer Code ist einfach nicht testbar, weil man nie die unterschiedlichsten Möglichkeiten komplett abdecken kann. Wenn es hingegen nur eine bestimmte Menge von Varianten gibt, dann benötigt man kein eval(), sondern kann für jede Variante den Code explizit schreiben, konkret testen, und mit einer Fallunterscheidung dann dorthin verzweigen.
eval() ist evil! Man sollte drauf verzichten.
- Sven Rautenberg