İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır

JAVA 1.5 : TIGER

Java 2 Standart Edition'un bir sonraki sürümüne ilişkin çalışmalar, Tiger kod adıyla sürdürülmektedir. Olağan geliştirmeler ve kütüphane eklemeleri dışında Java dilinde de bazı değişiklikler yapılması gündemde. Bu sürümün en önemli özelliğinin geliştirme kolaylığı sağlaması olacağı söyleniyor. Ancak henüz hiç bir şey net değil. Eklenmesi düşünülen bazı şeylerden vazgeçilebilir ve başka bir çok özellik veya kütüphane eklenebilir.

Resmi açıklamada Tiger'ın şu konularda gelişmelere hedeflendiği belirtiliyor:

Burada özellikle son seçenekte belirtilen, Java dilindeki özellikleri inceleyeceğiz.

GENERICS (TEMPLATE'LER)

C++'daki 'template'ler, yani 'generic programming' Java'ya geliyor. Buna göre tipsiz (tipi belli olmayan) collection ve benzeri data yapılarına belli bir tip şablonu üzerinde çalışma özelliği getiriliyor. Bu sayede hem 'type check' (tip kontrolü) yapılabilecek hem de 'cast' işlemi yapmaktan kurtulunabilecek. Örneğin

List list = new LinkedList();
list.add(new Integer(0));
Integer element = ;xs.iterator().next();

yerine

List<Integer> list = new LinkedList<Integer>();
list.add(new Integer(0));
Integer element = list.iterator().next();

denilebilcek.

Artık tip kontrolü sayesinde

list.add("0");

hata verecek. Zira 'list'in Integer tipinden başka tipte veri kabul etmemesi sağlanmış oluyor.

AUTOBOXING

Primitive tiplerle class karşılıkları (wrapper) arasında otomatik dönüşüm de düşünülen değişiklikler arasında. Bu şekilde int ve Integer birbirine cast etmeden atanabilecek. Bu, C#'ta bulunan, Java'dan farkları ('üstünlükleri') arasında sayılan özelliklerden biri. Ancak bu özelliğin eklenip eklenmeyeceği tartışmalı.

TYPE-SAFE ENUM

C dilindeki 'enum' keyword'ü, yani enumeration'lar Java'ya geliyor. Ancak Java'da bunlar type-safe olacak ve yanlış tipte veri atanması engellenecek. Örneğin

enum Suit { clubs, diamonds, hearts, spades }

şeklinde bir tanımda Suit.spades diye bir değer kullanılabilecek. Tanımı

public void doIt(Suit s);

şeklinde olan bir method

doIt(Suit.spades);

şeklinde çağrılabilecek. Başka bir değer girildiğinde kabul etemeyecek. Enum'lar sayesinde bir çok final static değer kullanmak gerekmeyecek.

IMPORT STATIC

Java'da her şeyin class olması sonucunda en basit ifadeler bile uzun kod yazılmasında yol açabiliyor. Örneğin Math class'ına ait static method ve property'leri kullanmak için

double d=2*Math.sin(Math.PI/2)*Math.cos(3*MATH.PI/3);

şeklinde uzun bir yazım gerekiyor. Artık

import static Math;

gibi bir ifadeyle

double d=2*sin(PI/2)*cos(3*PI/3);

denebilmesi yeterli olacak. Bu hem okunaklılğı arttırıyor hem de her method ve property'nin bir class'a ait olması gerektiği kuralını bozmuyor.

FOR EACH ve YENİ FOR

Bazı dillerde (tabiki C#'da) da olan foreach yapısı Java'ya da geliyor Bu sayede

Iterator i = people.iterator(); 
while( i.hasNext() ) { 
  Person p = (Person) i.next();   
  p.doSomthing(); 
}

yerine

	foreach( Person p in people )   
	  p.doSomthing(); 

denilebilecek. For için daha değişik bir yapı daha var :

for(Person p : people)
p.doSomthing(); 

OPERATOR OVERLOADING?

Java'ya eklenmesi için yoğun isteklerede bulunulan bir başka özellik de operator overloading. Java, bunları çok gerekli olmadıkları, kafa karışıklığı yarattığı ve kötü kullanıma olanak verdikleri gerekçesiyle dile dahile etmemişti. Bu özellik eklenirse, örneğin :

people.addPerson(person);

yerine

people+=person;

META DATA

Bir başka (yine C#'ta bulunan) özellik de meta data'lar. Bunlar kodun içine eklenen attribute'ler olup derlendikten sonra da belli bir bilgi içermektedirler. Şu anda @deprecated tag'i zaten bu amaçla kullanılıyor. Özelikle JavaBeans ve EJB gibi alanlarda kullanımı düşünülüyor. Bir propery bir attribute'yle persistent olarak tanımlanabilecek örneğin.

1.4'TE GELEN ASSERT

Java 1.4'te assert keyword'ü Java'ya eklenmişti. C'den alınan bu keyword daha çok debug ederken programcılara yarar. Kod'un belli bir yerinde belli bir değişkenin veya methodun döndürdüğü değerin belli bir değere eşit olup olmadığı kontrol edilebilir. Eğer varsayım geçerli değilse çalışma zamanında bir uyarı gelebilir. Kullanımı

assert a<0 : "Error!";

şeklinde. Normalde try-catch'lerle de yapılabilen bu kontrol, assert ifadesiyle kodu etkilemeden çalıştırılabilir. Java runtime'ına bir parametre vererek assert özelliği 'off' yapılabilir.

Java C#'a Mı Dönüyor?

Bazı kişiler Java diline eklenmesi düşünülen bir çok özelliğin C# bulunması nedeniyle Java'nın C#'la rekabet etmek için bu özellikleri eklemeyi düşündüğü yorumunu yapılyorlar. Ancak bahsedilen özelliklerin hepsi, yıllardır Java'da tartışılan özelliklerdi. Bu C#, hatta 'merhum' J++ daha ortada yokken bu böyleydi. Bazıları Java'da en başından beri tartışılan, C++'ta bulunup Java'ya alınmamış özellikler. Ancak burada 'zamanlama' ilginç. Şimdiye kadar geliştiricilerin 'kolaylık' istemelerine karşın, Java istenen değişiklikler için isteksiz davranıyordu. Şimdi 'titiz' davranmaktan hafif bir esneklik gösterilmesi bu rekabetin sonucu olarak görülebilir. C#'ın Java'dan daha güçlü ve daha kolay olma iddiasındaki 'kolaylık' tarafında bir hamle olarak değerlendiriliyor. C#'ın Java'nın üstüne pek fazla katmadığı, sadece Micorsoft platform'una bir uyarlama olduğunu söyleyenler de mevcut. Her ne olursa olsun, önümüzdeki günlerde Java'nın da artık 'rakipsiz' olduğu fikrinden yavaş yavaş uzaklaştığı herkesin ortak fikri. Programlama alanında en büyük yazılım şirketinin C#'ıyla, biri dışında endüstrideki hemen bütün üreticilerin çeşitli düzeylerde desteklediği Java arasındaki kıyasıya rekabetten elbette herkes faydalanacak. Java'nın ilerlemeye devam ettiği ve daha da edeceği Tiger'ın kükremesinden anlaşılıyor.

1 Haziran 2003
İçindekilerGirişİndex
YukarıİlkÖncekiSonrakiSon
Geriİleri
Yazdır