Kotlin Programlama Dili#7

noktalıvirgül

Deneyimli Moderatör
17 Kas 2020
923
510
Yumuşak Anahtar Kelimeler / Soft Keywords

Merhaba sevgili okurlarımız, bu konumuzda Kotlin diliyle ilgili serimize devam etmekteyiz. Burada sayacağımız belirteçler uygulanabilecekleri alanlarda anahtar kelime görevinde, diğer alanlarda da tanımlayıcı görevde kullanılabilirler.

by=> Bir arayüzün uygulanışını başka bir nesneye devreder.


Kod:
interface Base {


fun print()


}


class BaseImp(val x:Int): Base {


override fun print() {print(x)}


}


class Derived (b: Base): Base by b


fun main()


val b = BaseImpl(10)


derived(b).print()


}

Bir üst tür listesindeki bir by ifadesi ögesinin nesnelerinde dahili olarak depolanacağı belirtilmektedir.

by, ayrıca erişimcilerin uygulanışını başka bir nesneye devreder. Bazı türlerin özelliklerine göre ihtiyaç duyulduğunda manuel olarak uygulanabilen bu yetkiler (delegated) kullanılabilir. Bunlar kitaplığa eklenebilir ve uygun zamanda kullanılabilir.


Kod:
class Example {


var p: String by Delegate()


}

catch=> Bir istisna türü, işleyen bloğu başlatır. İstisna türleri de yeni istisna sınıfları Throwable sınıfını devralır. Bir istisna nesnesi oluşturulması için “throw” ifadesi kullanılır.

Kod:
throw Exception (“Hi there”)

Bir istisna yakalamak için de try…catch ifadesi kullanılır.

Kod:
try {


//Same code(bazı kodlar)


} catch (e:SomeException) {


//handler (idare)


} finally {


//optional finally block (isteğe bağlı blok)

constructor=> Birincil ve ikincil yapıcıların bildirilme görevini üstlenir. Bir Kotlin sınıfının birincil yapısı ve bir veya daha fazla ikincil yapıcısı bulunabilir. Birincil yapıcı, bir sınıf örneği ve onun özelliklerini sınıf başlığında başlatır.

Kod:
class Person constructor(firstName: String) { /*...*/ }

Nesne oluşturma sırasında bazı kodlar çalıştırılmak istenirse sınıf gövdesi içerisindeki başlatıcı bloklar kullanılır. Başlatıcı blokları, anahtar kelime (“init”) ve sonrasında küme parantezleriyle belirtilir. Çalıştırılmak istenilen kod küme parantezlerinin içine yazılır. Bir örnek başlatılırken başlatıcı blokları, özellik başlatıcılarla beraber sınıf gövdesinde sırayla uygulanır.

Kod:
class InitOrderDemo(name: String) {


val firstProperty = "İlk özellik: $isim".also(::println)






init {


println("İsmi yazdıran ilk başlatıcı bloğu")


}






val secondProperty = "İkinci özellik: ${name.length}".also(::println)






init {


println("${name.length}’ i yazdıran ikinci başlatıcı bloğu")


}


}

Başlatıcı bloklarda birincil yapıcı parametreler kullanılabilir. Sınıf gövdesindeki özellik başlatıcılarda da kullanılabilir:

Kod:
class Customer(name: String) {


val customerKey = name.uppercase()


}

delegate => Oluşturulan Java bayt kodunda ek açıklama konusunda birden fazla olasılık vardır. Ek açıklama şöyle oluşturulabilir:

Kod:
class Example(@field:Ann val foo,// Java alanına açıklama ekle


@get:Ann val bar, // Java alıcısına açıklama ekle


@param:Ann val quux) // Java yapıcı parametresine açıklama ekle

dynamic=> Kotlin/JS kodundaki dinamik türün bir değeri herhangi bir değişkene atanabilir, herhangi bir yere parametre olarak iletilebilir.

field=> Bir özelliğe veya yapıcı parametreye açıklama eklemek için buna karşılık gelen Kotlin ögesiyle oluşturulan Java ögeleri vardır ve oluşturulan Java bayt kodunda ek açıklama için birden fazla konum bulunur.

file=> Buradaki açıklama kısmı da önceki verilen örnekler gibidir.

finally=> try bloğundan çıkılınca her zaman yürütülen bloğu başlatır. Kotlin’de istisna sınıfları Throwable sınıfını devralır. İstisna nesnesi oluşturmak için şu ifade kullanılır:


Kod:
throw Exception(“Merhaba”)

get=> Özel bir alıcı tanımlanırsa özelliğe her erişildiğinde çağrılır. Bu özel alıcıya örnek şöyledir:

Kod:
class Rectangle(val width: Int, val height: Int) {


val area: Int // özellik türü, alıcının dönüş türünden çıkarılabildiği için isteğe bağlıdır


get() = this.width * this.height


}


fun main() {


val rectangle = Rectangle(3, 4)


println("Width=${rectangle.width}, height=${rectangle.height}, area=${rectangle.area}")


}

Ek açıklama kullanımları da daha önce verilen örneklerdeki gibidir.

import=> Başka paketteki bildirimi olması gereken geçerli dosyaya aktarır. Bir kaynak dosya paket bildirimiyle başlayabilir


Kod:
package org.example






fun printMessage() { /*...*/ }


class Message { /*...*/ }






// ...


init=> Başlatıcı bloğu başlatır. Bu kod örneği de constructor için verilen örnek gibidir.

param=> Ek açıklama kullanım site hedefi şeklinde kullanılır. Açıklama ile ilgili yapılan örnekler burada da geçerlidir.

property=> Burada da açıklama ile ilgili örnekler geçerlidir.

receiver=> Burada da ek açıklama için kullanılan açıklama örnekleri geçerlidir.

set=> Bir özelliğin belirleyicisini bildirir. Ayrıca açıklama örnekleri burada da aynı şekilde örnek verilebilir. Bir özelliğin bildirilmesi için sözdizimi şöyledir:


Kod:
var <propertyName>[: <PropertyType>] [= <property_initializer>]


[<getter>]


[<setter>]

setparam=> Açıklamalarla ilgili örnekler burada da geçerlidir.

value=> Anahtar kelimeyle birlikte satır içi sınıf (class) bildirir. Etki alanına özgü tür oluşturmak için bir sınıfa değer sarılabilir. Ama ek yığınlar ile çalışma zamanı ek yük almış olur ve bu da performans kaybına sebep olur. Bu tür sorunlar için satır içi sınıf denilen özel bir sınıf türü Kotlin tarafından sunulur. Satır içi sınıflar, değere dayalı sınıfların alt kümesidir. Satır içi sınıf bildirilmesi için value sınıf adından önce değiştirici kullanılabilir:


Kod:
value class Password(private val s: String)

where=> Genel tür parametresiyle ilgili kısıtlamaları ifade eder. En yaygın kısıtlama türü extends anahtar adı olan üst sınıdır.

Kod:
fun <T : Comparable<T>> sort(list: List<T>) { ... }

iki nokta üst üste noktalama işaretinden sonra belirtilen üst sınırdır. Bir alt tür de (Comparable) bunun yerine kullanılabilir.

Kod:
sort(listOf(1, 2, 3)) // Int, karşılaştırılabilir. <int>’in bir alt türüdür


sort(listOf(HashMap<Int, String>())) // hashMap<IntString>, Comparable<HashMap>Int, String>>’in bir alt türü değildir.

Varsayılan üst sınır belirtilmemişse “any?” Şeklindedir. Köşeli parantezlerin içinde bir üst sınır belirtilebilir. Aynı tür parametrelerin birden fazla üst sınıra ihtiyacı varsa where ifadesine ihtiyaç olur.

Kod:
fun <T> copyWhenGreater(list: List<T>, threshold: T): List<String>


where T : CharSequence,


T : Comparable<T> {


return list.filter { it > threshold }.map { it.toString() }



Yedinci seri konumuzdan sonra yeni bir Kotlin konusunda yeni kavramlar ekleyerek devam edilecektir.
 
Son düzenleme:
Üst

Turkhackteam.org internet sitesi 5651 sayılı kanun’un 2. maddesinin 1. fıkrasının m) bendi ile aynı kanunun 5. maddesi kapsamında "Yer Sağlayıcı" konumundadır. İçerikler ön onay olmaksızın tamamen kullanıcılar tarafından oluşturulmaktadır. Turkhackteam.org; Yer sağlayıcı olarak, kullanıcılar tarafından oluşturulan içeriği ya da hukuka aykırı paylaşımı kontrol etmekle ya da araştırmakla yükümlü değildir. Türkhackteam saldırı timleri Türk sitelerine hiçbir zararlı faaliyette bulunmaz. Türkhackteam üyelerinin yaptığı bireysel hack faaliyetlerinden Türkhackteam sorumlu değildir. Sitelerinize Türkhackteam ismi kullanılarak hack faaliyetinde bulunulursa, site-sunucu erişim loglarından bu faaliyeti gerçekleştiren ip adresini tespit edip diğer kanıtlarla birlikte savcılığa suç duyurusunda bulununuz.