Kotlin 1.4-M2 kütüphanesi ile gelen yeni özellikler;
API'da yapılan değişiklilerle yeni constant tipleri eklendi, signatures güncellendi.
Ortak kütüphanelere yeni fonksiyonlar eklendi.
Array ve Collection'lar için yeni fonksiyonlar eklendi.
Property delegation iyileştirilmesi yapıldı.
Kotlin 1.4-M2 şu an yayında olmasa da bu yazıda gösterilen kodlar kotlin playground üzerinden derlenerek denenebilir.
Common Library'deki Yeni Geliştirmeler
Kotlin/JVM'de kullanılan bir önceki appendln, sisteme bağlı bir satır ayracı ekliyordu (\n Unix ve \r\n Windows). Ancak bunun işletim sistemi bağımsız şekilde ortaklaştırılması bekleniyordu. Bu sebeple sisteme bağlı satır ayracı ekleyen appendln deprecate oldu ve onun yerine her işletim sistemi için aynı davranışı sergileyen ve tek bir "\n" ekleyen appendLine fonksiyonu devreye girdi.
Bu durumda platforma özgü bir ayraca ihtiyacınız olduğunda JVM'de System.lineSeparator() fonksiyonunu kullanabilirsiniz.
Yeni Array Fonksiyonları
Farklı container tipleriyle çalışırken daha iyi bir deneyim sağlaması için array'e yeni uzantılar eklendi;
shuffle() → Dizi öğelerini rastgele bir sıraya koyuyor.
onEach() → Her dizi öğesinde verilen işlemi gerçekleştiriyor ve dizinin kendisini döndürür.
reverse() → Dizi içindeki verileri tersine çevirir
sortDescending() → Dizi içindeki verileri azalan düzende sıralar.,
Collections API' de Yeni Fonksiyonlar
setOfNotNull: yeni bir küme oluştururken, eğer küme içerisinde null değer var ise bu metod sayesinde null olmayan bir kümeye sahip olabiliyorsunuz.
shuffled() artık diziler için kullanılabiliyor.
runningFold() ve runningReduce(), scan() ve scanReduce() ile eş anlamlı olarak kullanılabilir. Gelecekte, bu işlem için kullanılacak scan(), runningFold() ile birlikte kullanılabilir. Ancak scanReduce() yakında kullanımdan kaldırılacaktır.
Mevcut API Geliştirmeleri
Kotlin 1.4, major “feature” sürümü olduğu için, dile ve standart kütüphaneye yeni özellikler ekleniyor. Ancak sadece 1.3.70 gibi artımlı sürümlerde deneysel declaration'lar eklenebiliyor. Özetle 1.3.70 için eklediğiniz declaration'lar kullanılmadığı takdirde, 1.3.40 versiyonunu kullanan bir ekip arkadaşınız kodunuzu başarılı şekilde derleyebilir.
Fakat 1.3 sürümünden 1.4'e geçiş gibi major sürümlerde eğer yeni bir özellik ya da API kullanıyorsanız 1.3 sürümünün derleyicisi 1.4 sürümündeki yazılmış kodu derleyemez.
Kotlin 1.4'te null'ların kabulü için bir kaç fonksiyon gevşetildi.
Örnek olarak Kotlin 1.3, String.toBoolean()'ın boş değerli olmamasını gerektiriyordu, bu nedenle 1.3, bu kodu derleyemez. Ancak 1.3'de yazılan kod 1.4 derleyicisinde çalışmaya devam edebilir.
Aynı özellik contentEquals, conentHashCode ve contentToString fonksiyonları için de geçerlidir.
Double ve Float'larda tanımlanan aşağıdaki sabitler(constants) artık gerçek sabitlerdir. Artık const değişkeni olarak tanımlandıklarından, bunları ek açıklama argümanı olarak kullanabilirsiniz.
SIZE_BITS ve SIZE_BYTES de Double ve Float için tanımlanan yeni sabitlerdir. Bunlar binary form türündeki bit ve bayt içerirler.
maxOf() ve minOf() ile varargs
Standart kütüphanedeki maxOf() ve minOf() iki değerden daha büyük ve daha küçük olanı bulur. Ancak bu metodlar 1.4-M1'den başlayarak sayıdaki bağımsız değişken ile (varargs) çalışabilir. Bunları herhangi bir sayı kümesi ile veya karşılaştırılabilir öğeler ile kullanımına izin verir.
Property Delegation İyileştirmesi
Kotlin'de temsil edilen property'ler interface ile değil conventions ile çalışır. Delegate etmek istediğiniz tür gerekli interface'i uygulamak yerine bir operator fonksiyon tanımlamalıdır. Bu belirli interface'lere bağlı olmadığımız için esneklik sağlar anacak yine de interface'lerin kullanılması faydalıdır.
Kotlin 1.4 bu tür tamamlayıcı interface'leri çalıştırmak için daha iyi bir hale geldi: Yeni bir PropertyDelegateProvider interface'i ile ReadWriteProperty ve ReadOnlyProperty'i devralıyor.
ReadWriteProperty ve ReadOnlyProperty interface'leri özel sınıfınız ya da anonim nesneniz bunları uygulayabildiğinden propery delegate tanımlamak için kullanışlıdır.
Kotlin 1.4'ten itibaren ReadWriteProperty yerine ReadOnlyProperty kullanılıyor. Bu, delegate ifadeleriyle çalışmada size daha fazla esneklik sağlıyor. Örneğimizdeki gibi artık bir ReadOnlyProperty bekleniyorsa myDelage() çağrısını iletebilirsiniz. Buradaki "read-only" Kotlin'deki "immutable" ile aynı değildir. Bu interface nesneye yalnızca salt okunur erişim sağlıyor.
Son olarak
Açıklanan tüm değişiklikler Kotlin 1.4-M2 preview'in bir parçacı olduğundan bunları play.kotl.in adresinden online olarak deneyimleyebilirsiniz. Derleyici ile ilgili herhangi bir hata ile karşılaşırsanız ayarlardan 1.4-M2 sürümünü seçtiğinizden emin olun.
Detaylı bilgi ve kaynak: