Java
7 den Java 8 ‘e oldukça keskin bir geçiş olduğunu gözlemlemekteyim. Imperative
programming den functional programming e geçiş eski java developerların
adaptasyonda zorluk çekecekleri bir durum olarak karşımıza çıkacaktır diye
düşünüyorum. Java 8 ile ilgili tüm değişikliklerin hepsini olmasa da tespit
ettiğim bir çok yeniliği burada not olarak ekleme ihtiyacı hissettim. Başlıca
yenilikler;
1) Java
7 de gelen array lerin multi threading çalıştırılabilmeleri, java nın çok çekirdekli işlemcilerde çalışmasını
anlamlı kılıyordu. Ancak, java 8 de bu yetenek Collection lar üzerinde de uygulanabilir hale gelmiştir.(Bknz.
Stream API implementation)
2) Garbage
collector ile ilgili olan “PermGen” Stack’ ten Heap’ e taşınmıştır.
3) Java
8 öncesinde herhangi bir Interface
sınıfında gövdeli(implement) metod yazmak mümkün değildi. Java 8 ile
gelen default keyword ü
ile artık Interface sınıflarda gövdeli metot yazmak mümkün. Spring Data API
sinde, bu yenilik kullanılarak ORM yeteneklerinin daha da güzelleştiğini
gözlemlemekteyiz.
4) Lambda
ifadelerini uygulayabilmek için, functional
interface ler geldi. İçerisinde, tek bir abstract methodu olan ve birden
fazla static ve default metodlar barındırabilen interface lere functional
interface denir.
5) Lamda expression
lar geldi. Lamda expressionlarda daha az satır kod ile imperative programlamada
yazdığımız kodları yazabilmekteyiz. Stream API içerisinde lambda expressionlar
sıklıkla kullanılmaktadır.
6) Imperative
programming den , functional programming e geçildiğini gözlemliyoruz.
Functional programming örneği olarak; “bana filtrelenmiş listeyi getir”,
imperative ise ; “filtrelenmiş yeni liste nesnesi oluştur, liste içerisinde
dön, her liste elemanının içeriği filtreye uygunsa yeni liste elemanına ekle,
son eklenmiş listeyi getir, …” şeklinde örnek verilebilir.
7)
Methodlar
“::” söz dizimi ile referans verilebilmektedir.
Static methodlar class name ile, static olmayan methodlar ise instance objeleri
ile referans verilebilmektedir.
Örnek;
testList.forEach(TestClass::staticMetod);
TestClass testClass=new TestClass();
testList.forEach(testClass::nonStaticMetod);
8) Javascript
kodlarının çok hızlı çalışmasını sağlayan, Nashorn
javascript engine geldi.
9) AtomicLong dan daha yüksek başarımlı
sayaç işlemlerinin yapıldığı LongAdder
objesi geldi. AtomicLong a gore daha fazla bellek kullanmaktadır.
10)
Nesnelerin NullCheck işlemleri için “Optional” isimli özel bir utilityclass
geldi.
Eylül
2019 itibari ile Open JDK da, Java SE 13 release olmasına rağmen Oracle Java SE
Road map olarak, Java SE 8 sonrası sürümler için Long-term support(LTS) destek
limitini 3 yıl olarak duyurdu(Duyuru:https://www.oracle.com/technetwork/java/java-se-support-roadmap.html).
Tabii ki Non-LTS olarak çıkan diğer sürümlerde(9,10 ve 12. sürümlerde) ise
premier olarak desteğinin olacağını ifade etmiştir. Aynı duyuruda Java 8 için
Extended Support olarak Mart 2025 tarihi bulunmaktadır. Eğer Java 8 den üst
sürümlere migrate düşünüyorsanız acele karar vermeyin derim. Embedded
development geliştiren developer arkadaşlar, yukarıda bahsettiğim Java SE 8
yeniliklerinin dışında ME(Micro Edition) sürüm yeniliklerine de mutlaka bir göz
atsınlar.
Java 8 yeniliklerinin
detaylarını, JCP(Java Community Process - https://www.jcp.org) de yayınlanmış JSR(Java
Specification Requests) ları “https://docs.oracle.com/javase/specs/jls/se8/html/index.html”
linkinden okuyabilirsiniz. Oracle ‘ın yayınladığı diğer java sürüm specification
larının tümünü ise “https://docs.oracle.com/javase/specs/”
linkinde bulabilirsiniz.
Kaynaklar:
Hiç yorum yok :
Yorum Gönder