BeanShell

Java platformu dillerinden olan BeanShell, kendi sözdiziminin yanı sıra Java programlama dili sözdiziminin büyük bir bölümünü desteklemesi nedeniyle, Java programlama dilinin komut kabuğu olarak da görülebilir. BeanShell'in bu özelliği, küçük Java kod parçalarının denenmesinde ve Java platformu için yazılmış sınıf dosyalarının yüklenip, birim sınamalarının yapılmasında, düzenle-derle-çalıştır döngüsünü kısaltması sayesinde, büyük kolaylık sağlar.

Birinci kullanım amacını anlamak için aşağıda verilen kod parçası yardımcı olacaktır. BeanShell yorumlayıcısının başlatılmasının ardından, yorumlayıcının Java programlama dili komutlarını Java derleyicisi kadar sıkı denetlemesini mümkün kılmak amacıyla, yegâne argümanında true geçirilerek setStrictJava komutu kullanılıyor. Takip eden satırda, tıpkı bir Java programında olduğu gibi, f1 ve f2 adlı iki değişken tanımlanıyor. Son iki satırda ise, iki farklı şekilde karşılaştırma yapmak suretiyle, matematikte ayrı addedilen değerlerin float veri türünün kısıtlamaları nedeniyle bellekte aynı biçimde temsil edilebileceği ve bunun sonucunda da Java tarafından aynı addedilebileceği görülüyor.

$ java bsh.Interpreter
BeanShell 2.0b4 - by Pat Niemeyer (pat@pat.net)
bsh % strictJava(true);
bsh % float f1 = 1.0000000, f2 = 0.99999999;
bsh % print(f1 > f2);
false
bsh % print(f1 == f2);
true

print komutunun sürekli kullanılıp görüntüyü kirletmesindense, show komutundan yararlanarak işlem sonuçlarının standart çıktıya—değiştirilmediği takdirde ekran—yansıtılması otomatiğe bağlanabilir. Ancak, şu noktaya dikkat edilmelidir: show komutu, bir bayrak değişkenin değerini değilleyerek işini görür. Dolayısıyla, söz konusu komutun yorumlayıcıya çift sayıda verilmesi çıktının yansıtılmasını engelleyecektir.

show komutunun kullanımını aşağıdaki örnekten görülebilir. java.util paketindeki Arrays sınıfını görünür hale getiren import bildirimi ve intDz adlı dizinin 6 elemana sahip olacak şekilde yaratılmasının ardından, dizinin istenildiği gibi oluşturulup oluşturulmadığını görmek için Arrays.toString metodunun kullanılmasına karşın yorumlayıcı hiçbir şey basmadan geri dönüyor. Bunun sebebi, Arrays.toString komutunun işini değerleri ekrana basmak yerine dönüş değerinde döndürerek yapmasında yatıyor. Dolayısıyla, sonucun standart çıktıya basılması isteniyorsa, örnekte olduğu gibi show komutunun kullanılması veya döndürülen sonucun print komutu ile yazılması gerekir.

bsh % import java.util.Arrays; // Aslında gerekli değil!
bsh % int[] intDz = new int[]{1, 35, -10, 4, 22, 8};
bsh % Arrays.toString(intDz);
bsh % show();
bsh % Arrays.sort(intDz);
bsh % Arrays.toString(intDz);

bsh % exit();
$

Yukarıdaki örnek aynı zamanda BeanShell'in birim sınama amacıyla kullanılmasına örnek oluşturuyor. Buna göre, sınanmak istenen sınıf öncelikle görünür hale getiriliyor ve sınıf tarafından sağlanan metotlar kullanılıyor.

BeanShell'in Java programlama dilinin komut kabuğu olarak kullanılması sırasında kimi özelliklerin Java kaynak kodundaki gibi kullanılamayacağı unutulmamalıdır. Aşağıdaki kod parçasının ilk satırında geçen karakterlerine yapılan itiraz bu kısıtlamalardan belki de en belirginidir. Soysallık desteğinden yararlanan türleri sınamayı olanaksız hale getiren bu durumun sebebi, BeanShell yorumlayıcısının işini Java kaynak kodunu değil, derleme sırasında tür parametresi bilgisinin silinmesi nedeniyle soysallıkla ilgili hiçbir bilgi içermeyen sınıf dosyasını yükleyerek görmesinde yatar.

bsh % Vector intVec = new Vector();
// Error: Parser Error: Parse error at line 1, column 24. Encountered: =
bsh % // Error: Parser Error: Parse error at line 1, column 11. Encountered: <
bsh % // Error: Parser Error: Parse error at line 1, column 9. Encountered: )
bsh % Vector intVec = new Vector(); // Tamam.
bsh %

print, setStrictJava ve show dışındaki bazı BeanShell komutları aşağıda verilmiştir. Bu komutlara sağlanan dizin veya dosya adlarının göreceli olması durumunda, söz konusu komut tarafından kullanılacak mutlak konumun göreceli değerin çalışma dizinine bitiştirilmesi ile bulunduğu unutulmamalıdır.

cat(dosya adı): Argümanda sağlanan dosyanın içeriğini ekrana basar.
cd(yeni dizinin adı): Çalışma dizinini argümanda sağlanan değer olacak şekilde değiştirir.
dir(dizin adı), dir(): Argümansız kullanılması durumunda çalışma dizinini listeler. Aksi takdirde argümanda sağlanan dizinin içeriğini listeler.
mv(dosya adı, yeni konum): İlk argümanda sağlanan dosyayı ikinci argümanda sağlanan konuma taşır.
pwd(): O anki çalışma dizinini döndürür.
rm(dosya adı): Argümanda sağlanan addaki dosyayı siler.

Notlar
Ayrıca bakınız
Java Programlama Dili
Dış bağlantılar