A BeanShell programozási nyelv

Vezérlési szerkezetek

Vezérlési szerkezetek

Változók láthatósága

A deklarált változók láthatósága olyan, mint Java-ban. A nem deklarált (statikus típus nélküli) változók láthatóságát nem módosítják a blokkok {}.

x = 1; // x globális { y = 2; // y globális int z = 3; // z lokális erre a blokkra } print(y); // helyes print(z); // hibás, nincs globális z f() { a = 1; // lokális f-re { b = 2; // lokális f-re } print(b); // helyes } print(a); // hibás, nincs globális a

Ugyanez igaz a for ciklusokra is:

for(int i = 0; i < 10; ++i) { j = 42; } print(i); // hibás, i lokális a for ciklusra print(j); // helyes for(z = 0; z < 10; ++z) { } print( z ); // helyes, z globális
Módosítószavak használata

Deklarált változóknál a következő módosítószavak használhatóak:

  1. private
  2. protected
  3. private
  4. final
  5. transient
  6. volatile
  7. static

Azonban a final kivételével az összeset figyelmen kívül hagyja a BeanShell. Nem deklarált változóknál nem használható semmilyen módosítószó.

Írásmódot egyszerűsítő nyelvi elemek

JavaBean-ek attribútumait kényelmesebben is elérhetjük, módosíthatjuk, mint a getter-setter metódusokkal:

button = new java.awt.Button(); button.label = "my button"; // button.setLabel("my button"); helyett print(button.label); // print(button.getLabel()); helyett

Probléma lehet, ha a fenti objektumnak van label nevű adattagja, mert ilyenkor azt módosítjuk közvetlenül és nem a getter-setter metódusok hívódnak. Erre ad megoldást {””} szelektor.

button = new java.awt.Button(); button{"label"} = "my button" // button.setLabel("my button"); helyett print(button{"label"}); // print(button.getLabel()); helyett

Ha a Java futtatókörnyezetben rendelkezésre áll a gyűjtemény-keretrendszer, akkor a Hashtable és Map objektumok put és get metódusai helyett is használhatjuk:

m = new HashMap(); m{"hello"} = 5; print(m{"hello"});
Iteráló ciklus

A Java 1.5-ben megjelent for ciklus a BeanShell-ben is megtalálható akkor is, ha nem 1.5-ösnél korábbi virtuális gépen futtatjuk.

for(char c: "Hello") { print(c); } int [] array = new int [] { 1, 2, 3 }; for(i : array) { print(i); } List l = new List(); fillList(l); // Lista feltöltése for (i : l) { print(i); }

Az alábbi típusokra használhatjuk:

  1. Enumeration
  2. Vector
  3. String
  4. StringBuffer
  5. Collection
  6. Iterator
  7. valamint tömbökre

A Java 1.5-ben bevezetett StringBuilder-re nem működik.

Többágú elágazás

BeanShell-ben a switch-et objektumra is használhatjuk, ilyenkor az equals() metódussal hasonlítja a case-ágak feltételeit (amik szintén objektumok) az objektumhoz.

dateobj = new Date(); switch( dateobj ) { case newYears: break; case christmas: break; default: }

A case ágakat (és a default ágat) sorra vizsgálja a kiértékelő eljárás, ezért a default ág után írt case ág sosem futhat le. Ez azonban nem vezet fordítási hibához, mivel a BeanShell a Java-val ellentétben nem vizsgálja, hogy elérhető-e egy kódrész vagy sem.