Bezeichner, Bindungen, Bereiche

vereinfacht: Variable bezeichnet eine (logische) Speicherzelle

genauer: Variable besitzt Attribute

Bindungen dieser Attribute statisch oder dynamisch

in der Programmierung:

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

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

= Variablen, an die genau einmal zugewiesen wird

Vorsicht:

class C { int foo; }
static void g (final C x) { x.foo ++; }


Merksatz: alle Deklarationen so lokal und so konstant wie möglich!

(D. h. Attribute immutable usw.)

= Bereich der Anweisungen/Deklarationen, in denen ein Name benutzt werden kann.

Üblich ist: Sichtbarkeit beginnt nach Deklaration und endet am Ende des umgebenden Blockes

Namen sind auch in inneren Blöcken sichtbar:

int x;
while (..) {
  int y;
  ... x + y ... 
}

innere Deklarationen verdecken äußere:

int x;
while (..) {
  int x;
  ... x ... 
}

...stimmen nicht immer überein:

2015-08-17