Paradigması | Nesne yönelimli, betik dili, JSM dili |
---|---|
İlk çıkışı | 2000 |
Tasarımcı | JCP |
Kararlı sürüm | 2.1.1 (2 Aralık 2022) |
Etkilendikleri | Java |
Platformu | JSM |
İşletim sistemi | Çapraz platform |
Lisans | LGPL |
Olağan dosya uzantıları | .bsh |
Web sitesi | http://www.beanshell.org/ |
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[1] 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 ([email protected])
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[2] 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);
<[-10, 1, 4, 8, 22, 35]>
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 <
ve >
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 17 Mart 2011 tarihinde Wayback Machine sitesinde arşivlendi. nedeniyle soysallıkla ilgili hiçbir bilgi içermeyen sınıf dosyasını yükleyerek görmesinde yatar.
bsh % Vector<Integer> intVec = new Vector<Integer>();
// 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.bsh
komutunun kullanılmasıyla da başlatılabilir.
java.util
paketinin görünür hale getirilmesine gerek yok. Çünkü, BeanShell yorumlayıcısı, başlatılması sırasında java.lang
paketine ek olarak şu paketleri de otomatikman görünür hale getirir: java.awt
, java.awt.net
, java.io
, java.net
, java.util
, javax.swing
, javax.swing.event
.