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.


```bash
$ 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.


```bash
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  nedeniyle soysallıkla ilgili hiçbir bilgi içermeyen sınıf dosyasını yükleyerek görmesinde yatar.


```bash
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.

## Notlar

## Ayrıca bakınız
* 
* Java Programlama Dili
* 

## Dış bağlantılar
*