====== Scope ====== Ein Scope ist ein Refactoring-Werkzeug. Die Idee dahinter ist, einen Teil, den man in eine Funktion oder Methode auslagern möchte zunächst erstmal mit einem Scope zu belegen. main is code() { a is 1; b is 2; c is 3; result is int; result : a + b; print result; } Nun möchte man die Berechnung ausklammern und legt einen scope an: main is code() { a is 1; b is 2; c is 3; result is int; scope( a, b, result ) := { // auf c kann man nicht mehr zugreifen, da oberhalb des Scopes nicht mehr nach Variabeln gesucht wird. result : a + b; } print result; } ===== Auslagern ===== Das Programm läuft genauso weiter, wie zuvor. Nur, dass innerhalb des Scopes kein Zugriff auf Variablen möglich ist, die nicht im scope aufgeführt werden. Der Scope darf auch einen Rückgabewert übergeben und man kann für die Variablen Voraussetzungen beschrieben: main is code() { a is 1; b is 2; c is 3; result is int; result = scope( a, b is int ) := { return a + b; } print result; } Nun kann die Funktion ausgelagert werden: add is code( a, b is int ) := { return a + b; } main is code() { a is 1; b is 2; c is 3; result is int; result = add( a, b ); print result; } ===== Restriktionen erhöhen ===== Mit der Übergabe können auch Typen gewechselt werden, zum Beispiel const-Referenzen verwednet werden main is code() { a is 1; b is 2; c is 3; result is int; result = scope( a, b = int ) := { // a und b sind hier Konstanten return a + b; } // hier sind a und b wieder Variable print result; }