vereinfacht: Variable bezeichnet eine (logische) Speicherzelle
genauer: Variable besitzt Attribute
Bindungen dieser Attribute statisch oder dynamisch
e = , sin = (x
(- 1)n
)
in der Programmierung:
long_name
oder longName
(camel-case)
(Fortran: long name
)
im Zweifelsfall: Konvention der Umgebung einhalten
schlecht: myStack = ...
besser: Stack<Ding> rest_of_input = ...
z. B. var
in C#3
Vor/Nachteile: Lesbarkeit, Sicherheit, Kosten
Daten sind typisiert, Namen sind nicht typisiert.
LISP, Clojure, PHP, Python, Perl, Javascript, ...
<html><body><script type="text/javascript"> var bar = true; var foo = bar ? [1,2] : function(x) {return 3*x;}; document.write (foo[0]); </script></body></html>
Daten sind typisiert, Namen sind typisiert
C, Java, ...
ML, F#, Haskell, C# (var)
public class infer { public static void Main (string [] argv) { var arg = argv[0]; var len = arg.Length; System.Console.WriteLine (len); } }Beachte: das
var
in C# ist nicht
das var
aus Javascript.
im einfachsten Fall (Java, C#):
Typname Variablenname [ = Initialisierung ] ; int [] a = { 1, 2, 3 }; Func<double,double> f = (x => sin(x));
gern auch komplizierter (C): dort gibt es keine Syntax für Typen, sondern nur für Deklarationen von Namen.
double f (double x) { return sin(x); } int * p; double ( * a [2]) (double) ;Beachte:
*
und []
werden „von außen nach innen `` angewendet
Ü: Syntaxbäume zeichnen, a
benutzen
=
Vorsicht:
Merksatz: alle Deklarationen
so lokal und so konstant wie möglich!
(D. h. Attribute immutable usw.)
=
Üblich ist: Sichtbarkeit beginnt
nach Deklaration
und endet am Ende des umgebenden Blockes
Namen sind auch in inneren Blöcken sichtbar:
innere Deklarationen verdecken äußere:
...stimmen nicht immer überein:
sichtbar: in Funktion, Leben: Programm
sichtbar: innere Blöcke, Leben: bis Ende Unterpr.
class C { int foo; }
static void g (final C x) { x.foo ++; }
int f (int x) {
static int y = 3; y++; return x+y;
}
{ int x = ... }
int x;
while (..) {
int y;
... x + y ...
}
int x;
while (..) {
int x;
... x ...
}