Kotlin Programlama Dili #8

noktalıvirgül

Deneyimli Moderatör
17 Kas 2020
923
510
Sevgili okurlarımız, bu seri konumuzda sayılan belirteçler de anahtar kelime olarak uygulanabilecekleri alanlarda kullanılabilir ve diğer alanlarda da tanımlayıcı olabilirler.

abstract=> Bir sınıfın üyelerinin bir kısmı veya tamamı bildirilebilir. Soyut üyenin kendi sınıfında bir uygulaması yoktur.

Kod:
abstract class Polygon {


abstract fun draw()


}






class Rectangle : Polygon() {


override fun draw() {


// draw the rectangle






}

actual=> Çok platformlu projelerde o platforma özgü uygulamayı belirtir. Kotlin’^de bu çoklu platform projeleri, Kotlin Multiplatform teknolojisi ile platformlar arası projelerin geliştirilmesini kolaylaştırmak için tasarlanmıştır. Yerel programdaki esneklik de dâhil aynı zamanda aynı kodu farklı programlar için de ayrıca yazmak için daha az zaman kullanılmasını sağlar.

annotation=> Açıklama sınıfı bildirir. Bu ek açıklamalar, meta verilerinin koda eklenmesinin araçlarıdır. Açıklama bildirmek için değiştirici olan annotation belirteci, bir sınıfın önüne koyulmalıdır:

Kod:
annotation class Fancy

Ek açıklamanın da ek nitelikleri vardır. Bu açıklamalara meta açıklamalar da eklenebilir.

@TaRGeT: ek açıklamaya eklenebilecek öğe türlerini belirtir. Bunlar sınıflar, işlevler, özellikler, ifadeler olabilir.

@Retention: Derlenmiş sınıf dosyalarında ek açıklamanın bulunup bulunmadığını, çalışma sırasında görünür olup olmadığını belirtir.

@Repeatable: Aynı açıklamanın tek bir öğe üzerinde defalarca kullanılmasına izin verir.

@MustBeDocumented: Ek açıklamanın genel bir API (Application Programing Interface-Uygulama Programlama Arabirimi) parçası olduğunu belirtir. API belgelerindeki sınıf veya yöntem imzasına dahil edilmesi gerekliliği belirtilir.

@Targetstyle='font-family:Consolas;mso-bidi-font-family:Consolas;color:#999999;
border:none windowtext 1.0pt;mso-border-alt:none windowtext 0cm;padding:0cm'>(
style='mso-bidi-font-style:normal'>AnnotationTargetstyle='mso-bidi-font-style:normal'>.style='mso-bidi-font-style:normal'>CLASSstyle='mso-bidi-font-style:normal'>,style='mso-bidi-font-style:normal'> AnnotationTargetstyle='mso-bidi-font-style:normal'>.style='mso-bidi-font-style:normal'>FUNCTIONstyle='mso-bidi-font-style:normal'>,style='mso-bidi-font-style:normal'> AnnotationTarget.TYPE_PARAMETER, AnnotationTarget.VALUE_PARAMETER,



AnnotationTarget.EXPRESSION)


@Retention(AnnotationRetention.SOURCE)


@MustBeDocumented


annotation class Fancy


companion=> Bir sınıf içindeki nesne bildirimi bu anahtar kelimeyle işaretrlenebilir.


Kod:
class MyClass {


 
    companion object Factory {


 
        fun create(): MyClass = MyClass()


 
    }


 
}


Const=> Bir özelliğin “derleme zamanı sabiti” olarak işaretlenmesini sağlar. Salt okunur olan bir özelliğin değeri, derleme zamanında biliniyorsa değiştirici kullanılarak bunu, derleme zamanı sabiti, yani const olarak işaretlenebilir. Bunun için şu gereksinimler karşılanmalıdır:


Object: Üst düzey özelliğin veya bildirimin veya tamamlayıcı nesnenin üyesi olmalıdır.


String: Bir tür değeriyle veya ilkel bir türle başlatılmalıdır.


Özel bir alıcı olmaz


-


Derleyici, sabitin satır içi kullanımlarını gerçekleştirir. Bunu yaparken de sabitin referansını gerçek değerleriyle değiştirir.bu olurken alan kaldırılmaz, bu yüzden yansıma kullanılır. Yansıma (reflection) da programın çalışma zamanında yapısının iç gözlemlemeye olanak tanınan bir dizi dil ve kitaplık özelliğidir. Çalışma sırasında bir özelliğin veya işlevin adını veya türünü öğrenmek, işlevsel ve tepkisel stil kullanılırken çok önemlidir.


const val SUBSYSTEM_DEPRECATED: String = "This subsystem is deprecated"


@Deprecated(SUBSYSTEM_DEPRECATED) fun foo() { ... }


Crossinline=> Bazı satır içi işlevlerde doğrudan işlev gövdesinden değil de yerel bir nesne veya iç içe geçmiş işlev gibi parametre olarak iletilen lambda’lar çağrılabilir. Burada bahsedilen lambda ifadesi süslü parantezle – {} – çevrili olmalıdır. Ayrıca lambda ifadeleri, şu işaretleyici ile gösterilir: ->. Lambda kullanılarak bir önceki parametrenin sonraki parametre veya parametrelere değer olarak verilmiş olur. Buna örnek:


Kod:
class=pt>val sum = { x: Int, y: Int -> x + y }style='font-size:13.5pt;color:#242424'>



Lambdalarda, lokal olmayan kontrol akışına izin verilmez. Satır içi işlevlerin lambda parametresinin yerel olmayan dönüşleri kullanamayacağının belirtilmesi için lambda parametresi değiştiriciyle işaretlenmelidir. Bu değiştirici crossinline’dir.


Kod:
inline fun f(crossinline body: () -> Unit) {


 
val f = object: Runnable {


 
override fun run() = body()


 
}


 
// ...


 
}


Data=> Bir sınıf için kurallı üyeler oluşturma talimatını derleyiciye verir. Veri sınıfları, verileri tutar, bir örneğin okunabilir çıktı olarak yazdırılmasını, örneklerin karşılaştırılmasını, kopyalanmasını ve birçok durumun yapılmasını sağlayan sınıflardır. Bu sınıflar data belirteciyle ifade edilir.


Kod:
data class User(val name: String, val age: Int)


Enum => Enum sınıflarında tür açısından güvenli numaralandırmalar en temel kullanım şeklidir.


Expect=> Platform modüllerinde bir bildirimi platforma özgü şekilde işaretler. Bunu yaparken bir uygulama da beklenir.


External=> Bir bildirimin Kotlin dışında uygulandığını ifade eder. Yani JNI (Java Native Interface) ve JavaScript ile erişilebilir. Örneğin, yerel bir kodda, bu C veya C++ olabilir, bir işlevi bildirmek için bunu değiştirici ile işaretlemek gerekir.


Kod:
external fun foo(x: Int): Double


final=> Bir üyenin geçersiz kılınmasını engeller. Yani işaretlenen bir üye açıktır, dolayısıyla alt sınıflarda geçersiz kılınabilir. Bu geçersiz kılmanın yasaklanması isteniyorsa final belirteci kullanılır.


Kod:
open class Rectangle() : Shape() {


 
final override fun draw() { /*...*/ }


 
}


İnfix=> Anahtar sözcükle işaretlenen işlevler, infix ek gösterimi ile de çağrılabilir ve bu fonksiyon, nokta ve parantez kullanılmadan çağrılmasını sağlar. Ayrıca kodun daha okunabilir olmasını da sağlar. İnfix işlevleri, şu özelliklere sahip olmalıdır: Üye (member) veya uzantı/eklenti (extension) işlevleri olmalıdır. Tek bir parametreye sahip olmalıdır. Parametre anlamında değişken sayılı doğruluğu /argümanı/vararg kullanılmamalıdır. Bu da programın dışarıdan değer almamasıyla ilgilidir. Ayrıca parametrenin değeri varsayılan özellikte olmamalıdır.


Kod:
infix fun Int.shl(x: Int): Int { ... }


 




 
// Infix gösterimini kullanarak işlevi çağırma


 
1 shl 2


 




 
// aynı


 
1.shl(2)


Yeni devam konumuz, diğer belirteçler ve daha farklı başlıklarla devam edecektir.

 
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.