Kotlin Programlama Dili #9

noktalıvirgül

Deneyimli Moderatör
17 Kas 2020
923
510
Merhaba sevgili okurlarımız, bu Kotlin devam konumuzda belirteçlere devam ediyoruz:

İnline=> Bir fonksiyonun satır içi olmasını ve çağrı sitesinde iletilen lambdaları derleyiciye iletir. Inline fonksiyonu için Yüksek Mertebe Fonksiyonu’ndan da bahsetmek gerekir. Bu fonksiyon, birinci sınıf fonksiyonlarda parametre anlamında bir veya birden fazla fonksiyon alan ya da dönüş yapan fonksiyonlardır. Yüksek Dereceli Fonksiyon çağrılırken de güvenliği lambda’lar sağlıyor. Bunlar bir değişkene eşitlenebiliyor veya fonksiyona parametre olarak geçilebiliyor.

İnner=> İç içe geçmiş sınıftan dış sınıfa başvurulmasına izin verir. İç içe geçmiş sınıflar, diğer sınıflara yerleştirilebilir sınıflarla elde edilir.

İnternal=> Bildirimin geçerli modülde görünür olarak işaretlenmesini sağlar.

Lateinit=> Null olmayan bir türe sahip olan özelliklerin yapıcıda başlatılması gerekir. Ama çoğunlukla bu uygun olmayabilir.


Kod:
public class MyTest {


lateinit var subject: TestSubject






@SetUp fun setup() {


subject = TestSubject()


}






@Test fun test() {


subject.method() // dereference directly


}


}

Noinline=> Bir satır içi işleve iletilen lambdaların satır içi olması istenmiyorsa işlev parametrelerinden bazıları değiştiriciyle işaretlenir.

Kod:
inline fun foo(inlined: () -> Unit, noinline notInlined: () -> Unit) { ... }

open=> Bir sınıfın alt sınıflanmasına veya bir üyenin geçersiz sayılmasına izin verir. Open ile soyut olmayan üyeyi soyut bir üyeyle geçersiz kılınabilir.

Kod:
open class Polygon {


open fun draw() {


// some default polygon drawing method


}


}






abstract class WildShape : Polygon() {


// Classes that inherit WildShape need to provide their own


// draw method instead of using the default on Polygon


abstract override fun draw()


}

Operator=> Bir operatörün aşırı yüklenmesi veya bir kuralın uygulanması anlamında bir işlevi işaretler. Kotlin, tanımlanmış olan operatörler için özel uygulamalar sağlanmasına imkan tanır. Bir operatörün aşırı yüklenmesi için ilgili değiştiriciyle yani operator belirteciyle işaretlenmelidir.

Kod:
class=prism--token>interfacestyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> IndexedContainer class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>operatorstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>funstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>getclass=prism--token>(style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>indexclass=prism--token>:style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Intclass=prism--token>)style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#999999;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>}style='font-size:10.5pt;color:#19191C'>
Out=> Bir tür parametresini ortak değişken şeklinde işaretler. type parametresine T açıklama eklenerek yalnızca üyelerinden üretildiğinden ve tüketilmediğinden emin olunabilir. Bunun için source isimli değiştirici kullanılabilir.

Kod:
Source<T>out

class=prism--token>interfacestyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Sourceclass=prism--token><outstyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Tclass=prism--token>>style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>funstyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>nextT():style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> T
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>}style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>funstyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>demo(style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>strsclass=prism--token>:style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Sourceclass=prism--token><style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>Stringclass=prism--token>>)style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>valstyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> objectsclass=prism--token>:style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Sourceclass=prism--token><style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>Anyclass=prism--token>>style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>=style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> strs class=prism--token>// This is OK, since T is an out-parameterstyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>// ...style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
Override=> Geçersiz kılınabilen üyeler ve geçersiz kılınmaları için değiştiriciler gerekir, bu da override ile yapılır.

class=prism--token>openstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>classstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Shape class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>openstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>funstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>drawclass=prism--token>()style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>/*...*/style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>}style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>funstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>fillclass=prism--token>()style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>/*...*/style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>}style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#999999;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>}style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#0033B3;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>classstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>Circleclass=prism--token>()style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>:style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>Shapeclass=prism--token>()style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>overridestyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>funstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>drawclass=prism--token>()style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>/*...*/style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>}style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#999999;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>}style='font-size:10.5pt;color:#19191C'>
Private=> Bir bildirimi geçerli dosyada veya sınıfta görünür halde işaretler. Zaten Kotlin’de dört görünürlük değiştiricisi vardır. Bunlar da private, protected, internal ve public’tir. Burada varsayılan görünürlük public değiştiricisidir. Bir bildirim, private olarak işaretlenirse yalnızca bildirimi içeren dosyanın içinde görülür.

Kod:
// file name: example.kt


package foo






private fun foo() { ... } // example.kt dosyasının içinde görülebilir










public var bar: Int = 5 // mülkiyet her yerde görülebilir






private set // ayarlayıcı yalnızca example.kt dosyasında görünür










internal val


baz = 6 // aynı modülün içinde görülebilir

Protected=> Bildirimleri geçerli sınıfta ve o sınıfın alt sınıflarında görünür olarak işaretler. Bu değiştirici üst düzey bildirimler için kullanılamaz. Protected ile bir veya daha fazla üye geçersiz kılınırsa internal ve görünürlük açıkça belirtilmezse geçersiz kılınan üye de orijinalle aynı görünürlükte olur.

Kod:
open class Outer {


private val a = 1


protected open val b = 2


internal open val c = 3


val d = 4 // varsayılan olarak herkese açık






protected class Nested {


public val e: Int = 5


}


}






class Subclass : Outer() {


// a, görünmüyor


// b, c ve d görünüyor


// Yuvalanmış ve e görünür






override val b = 5 // 'b' korunuyor


override val c = 7 //
'c' dahilidir}






class Unrelated(o: Outer) {


// o.a, o.b görünmüyor






// o.c ve o.d görünür (aynı modül)






// Outer.Nested görünmüyor ve Nested::e de görünmüyor






}

Public=> Bildirimleri her yerde görünür şekilde işaretler. Görünürlük için değiştirici kullanılmazsa public, varsayılan olarak kullanılır. Bu da bildirim her yerde görüneceği anlamını taşır. Bildiren sınıfı da gören bir istemcinin, onun public üyelerini de gördüğünü belirtir.

Reified=> Satır içi işlevlerin parametrelerini çalışma zamanında erişilebilir şekilde işaretler. Çoğu zaman yansımaya gerek olmasa da somutlaştırılmış tür parametresiyle kullanılabilir.


Kod:
inline fun <reified T> membersOf() = T::class.members






fun main(s: Array<String>) {


println(membersOf<StringBuilder>().joinToString("\n"))


}

Satır içi işaretlenmemiş işlevler, somutlaştırılmış parametrelere sahip olamaz.

Sealed=> Mühürlü bir sınıf yani kısıtlı alt sınıflandırmaya sahip olan bir sınıfı bildirir. Mühürlü sınıflar ve arayüzler, sınıf hiyerarşisini temsil eder. mühürlü bir sınıf veya arayüz bildirmek için sealed ibaresinin önüne değiştirici konulur.


Kod:
sealed interface Error






sealed class IOError(): Error






class FileReadError(val file: File): IOError()


class DatabaseError(val source: DataSource): IOError()






object RuntimeError : Error

suspend=> Bir işlevi veya lambda’yı askıya alınmış olarak işaretleyebilir, bir eşyordam olarak kullanılabilir.

Tailrec=> Derleyicinin özyinelemeli olan işaretlenmesini yinelemeyle değiştirilmesini sağlar. Kotlin, kuyruk özyinelemesi şeklinde bilinen işlevsel programlama stilini destekler. Bir işlev işaretlendiğinde gerekli biçimsel koşullarla derleyici özyinelemeyi optimize eder, döngü tabanlı sürümü geride bırakır:


Kod:
val eps = 1E-10 // "good enough", could be 10^-15



tailrec fun findFixPoint(x: Double = 1.0): Double =

if (Math.abs(x - Math.cos(x)) < eps) x else findFixPoint(Math.cos(x))

Vararg=> Diğer bir değişle, değişken sayıda argüman da denilie. Bir parametre için değişken sayısınca argümanın iletilmesine izin verir.bir fonksiyonun parametresi bu değiştiriciyle işaretlenebilir.

fun <T> asList(vararg ts: T): List<T> {

val result = ArrayList<T>()

for (t in ts) // ts is an Array

result.add(t)

return result

}

Kotlin’in desteklediği özel semboller ve operatörler:

+, -, *, /, %- matematiksel operatörlerdir.

* operatörü aynı zamanda bir diziyi vararg parametresine geçirmek için kullanılır.

= atama operatörüdür, parametrelerde varsayılan değerleri belirtmekte kullanılır.

+=, -=, *=, /=, %=- artırılmış atama işleçleridir .

++, --- artırma ve azaltma operatörleridir.


&&, ||, !- mantıksal 've', 'veya', 'değil' operatörleridir.

==, !=- eşitlik operatörleridir.

===, !==- refrans eşitliği operatörleridir.

<, >, <=, >=- karşılaştırma operatörleridir.

[, ]- indekslenmiş erişim operatörüdür.

!! bir ifadenin null olamayacağını belirtir.

?. güvenli bir çağrı oluşturur
?:soldaki değer null iken sağdaki değeri alır.

::bir üye veya sınıf başvurusu oluşturur.

.., aralıklar ..< oluşturulur.

:Bildirimdeki bir adı türden ayırır.

?bir türü null olarak işaretler .

-> lambda ifadesinin parametrelerini, gövdesini ayırır .

Fonksiyon parametreleri ve dönüş tipi bildirimlerini ayırır.

When ifadesi durumunu ve gövdesini ayırır.

@ Bir açıklama belirtir. Döngü etiketini tanıtır.

Lambda etiketini tanıtır

‘this’ ifadesine başvurur.

Dış üst sınıfa başvurur.

;aynı satırda birden fazla ifadeyi ayırır.

$ dize şablonunda değişkene ve ifadeye başvurur.

_ lambda ifadesinde kullanılmayan parametre yerine geçer. Yıkım beyanında kullanılmayan parametre yerine geçer.
 
Son düzenleme:

Bunjo

Uzman üye
14 Ara 2020
1,591
1,890
I Won
Merhaba sevgili okurlarımız, bu Kotlin devam konumuzda belirteçlere devam ediyoruz:

İnline=> Bir fonksiyonun satır içi olmasını ve çağrı sitesinde iletilen lambdaları derleyiciye iletir. Inline fonksiyonu için Yüksek Mertebe Fonksiyonu’ndan da bahsetmek gerekir. Bu fonksiyon, birinci sınıf fonksiyonlarda parametre anlamında bir veya birden fazla fonksiyon alan ya da dönüş yapan fonksiyonlardır. Yüksek Dereceli Fonksiyon çağrılırken de güvenliği lambda’lar sağlıyor. Bunlar bir değişkene eşitlenebiliyor veya fonksiyona parametre olarak geçilebiliyor.

İnner=> İç içe geçmiş sınıftan dış sınıfa başvurulmasına izin verir. İç içe geçmiş sınıflar, diğer sınıflara yerleştirilebilir sınıflarla elde edilir.

İnternal=> Bildirimin geçerli modülde görünür olarak işaretlenmesini sağlar.

Lateinit=> Null olmayan bir türe sahip olan özelliklerin yapıcıda başlatılması gerekir. Ama çoğunlukla bu uygun olmayabilir.


Kod:
public class MyTest {


lateinit var subject: TestSubject






@SetUp fun setup() {


subject = TestSubject()


}






@Test fun test() {


subject.method() // dereference directly


}


}

Noinline=> Bir satır içi işleve iletilen lambdaların satır içi olması istenmiyorsa işlev parametrelerinden bazıları değiştiriciyle işaretlenir.

Kod:
inline fun foo(inlined: () -> Unit, noinline notInlined: () -> Unit) { ... }

open=> Bir sınıfın alt sınıflanmasına veya bir üyenin geçersiz sayılmasına izin verir. Open ile soyut olmayan üyeyi soyut bir üyeyle geçersiz kılınabilir.

Kod:
open class Polygon {


open fun draw() {


// some default polygon drawing method


}


}






abstract class WildShape : Polygon() {


// Classes that inherit WildShape need to provide their own


// draw method instead of using the default on Polygon


abstract override fun draw()


}

Operator=> Bir operatörün aşırı yüklenmesi veya bir kuralın uygulanması anlamında bir işlevi işaretler. Kotlin, tanımlanmış olan operatörler için özel uygulamalar sağlanmasına imkan tanır. Bir operatörün aşırı yüklenmesi için ilgili değiştiriciyle yani operator belirteciyle işaretlenmelidir.

Kod:
class=prism--token>interfacestyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> IndexedContainer class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>operatorstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>funstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>getclass=prism--token>(style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>indexclass=prism--token>:style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Intclass=prism--token>)style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#999999;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>}style='font-size:10.5pt;color:#19191C'>
Out=> Bir tür parametresini ortak değişken şeklinde işaretler. type parametresine T açıklama eklenerek yalnızca üyelerinden üretildiğinden ve tüketilmediğinden emin olunabilir. Bunun için source isimli değiştirici kullanılabilir.

Kod:
Source<T>out

class=prism--token>interfacestyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Sourceclass=prism--token><outstyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Tclass=prism--token>>style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>funstyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>nextT():style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> T
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>}style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>funstyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>demo(style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>strsclass=prism--token>:style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Sourceclass=prism--token><style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>Stringclass=prism--token>>)style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>valstyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> objectsclass=prism--token>:style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Sourceclass=prism--token><style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>Anyclass=prism--token>>style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>=style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> strs class=prism--token>// This is OK, since T is an out-parameterstyle='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>// ...style='font-family:Consolas;color:#00B050;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
Override=> Geçersiz kılınabilen üyeler ve geçersiz kılınmaları için değiştiriciler gerekir, bu da override ile yapılır.

class=prism--token>openstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>classstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> Shape class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>openstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>funstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>drawclass=prism--token>()style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>/*...*/style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>}style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>funstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>fillclass=prism--token>()style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>/*...*/style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>}style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#999999;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>}style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#0033B3;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>classstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>Circleclass=prism--token>()style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>:style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>Shapeclass=prism--token>()style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>    class=prism--token>overridestyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>funstyle='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>drawclass=prism--token>()style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>{style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>/*...*/style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'> class=prism--token>}style='font-family:Consolas;color:#19191C;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>
style='font-family:Consolas;color:#999999;border:none windowtext 1.0pt;
mso-border-alt:none windowtext 0cm;padding:0cm'>}style='font-size:10.5pt;color:#19191C'>
Private=> Bir bildirimi geçerli dosyada veya sınıfta görünür halde işaretler. Zaten Kotlin’de dört görünürlük değiştiricisi vardır. Bunlar da private, protected, internal ve public’tir. Burada varsayılan görünürlük public değiştiricisidir. Bir bildirim, private olarak işaretlenirse yalnızca bildirimi içeren dosyanın içinde görülür.

Kod:
// file name: example.kt


package foo






private fun foo() { ... } // example.kt dosyasının içinde görülebilir










public var bar: Int = 5 // mülkiyet her yerde görülebilir






private set // ayarlayıcı yalnızca example.kt dosyasında görünür










internal val


baz = 6 // aynı modülün içinde görülebilir

Protected=> Bildirimleri geçerli sınıfta ve o sınıfın alt sınıflarında görünür olarak işaretler. Bu değiştirici üst düzey bildirimler için kullanılamaz. Protected ile bir veya daha fazla üye geçersiz kılınırsa internal ve görünürlük açıkça belirtilmezse geçersiz kılınan üye de orijinalle aynı görünürlükte olur.

Kod:
open class Outer {


private val a = 1


protected open val b = 2


internal open val c = 3


val d = 4 // varsayılan olarak herkese açık






protected class Nested {


public val e: Int = 5


}


}






class Subclass : Outer() {


// a, görünmüyor


// b, c ve d görünüyor


// Yuvalanmış ve e görünür






override val b = 5 // 'b' korunuyor


override val c = 7 //
'c' dahilidir}






class Unrelated(o: Outer) {


// o.a, o.b görünmüyor






// o.c ve o.d görünür (aynı modül)






// Outer.Nested görünmüyor ve Nested::e de görünmüyor






}

Public=> Bildirimleri her yerde görünür şekilde işaretler. Görünürlük için değiştirici kullanılmazsa public, varsayılan olarak kullanılır. Bu da bildirim her yerde görüneceği anlamını taşır. Bildiren sınıfı da gören bir istemcinin, onun public üyelerini de gördüğünü belirtir.

Reified=> Satır içi işlevlerin parametrelerini çalışma zamanında erişilebilir şekilde işaretler. Çoğu zaman yansımaya gerek olmasa da somutlaştırılmış tür parametresiyle kullanılabilir.


Kod:
inline fun <reified T> membersOf() = T::class.members






fun main(s: Array<String>) {


println(membersOf<StringBuilder>().joinToString("\n"))


}

Satır içi işaretlenmemiş işlevler, somutlaştırılmış parametrelere sahip olamaz.

Sealed=> Mühürlü bir sınıf yani kısıtlı alt sınıflandırmaya sahip olan bir sınıfı bildirir. Mühürlü sınıflar ve arayüzler, sınıf hiyerarşisini temsil eder. mühürlü bir sınıf veya arayüz bildirmek için sealed ibaresinin önüne değiştirici konulur.


Kod:
sealed interface Error






sealed class IOError(): Error






class FileReadError(val file: File): IOError()


class DatabaseError(val source: DataSource): IOError()






object RuntimeError : Error

suspend=> Bir işlevi veya lambda’yı askıya alınmış olarak işaretleyebilir, bir eşyordam olarak kullanılabilir.

Tailrec=> Derleyicinin özyinelemeli olan işaretlenmesini yinelemeyle değiştirilmesini sağlar. Kotlin, kuyruk özyinelemesi şeklinde bilinen işlevsel programlama stilini destekler. Bir işlev işaretlendiğinde gerekli biçimsel koşullarla derleyici özyinelemeyi optimize eder, döngü tabanlı sürümü geride bırakır:


Kod:
val eps = 1E-10 // "good enough", could be 10^-15



tailrec fun findFixPoint(x: Double = 1.0): Double =

if (Math.abs(x - Math.cos(x)) < eps) x else findFixPoint(Math.cos(x))

Vararg=> Diğer bir değişle, değişken sayıda argüman da denilie. Bir parametre için değişken sayısınca argümanın iletilmesine izin verir.bir fonksiyonun parametresi bu değiştiriciyle işaretlenebilir.

fun <T> asList(vararg ts: T): List<T> {

val result = ArrayList<T>()

for (t in ts) // ts is an Array

result.add(t)

return result

}

Kotlin’in desteklediği özel semboller ve operatörler:

+, -, *, /, %- matematiksel operatörlerdir.

* operatörü aynı zamanda bir diziyi vararg parametresine geçirmek için kullanılır.

= atama operatörüdür, parametrelerde varsayılan değerleri belirtmekte kullanılır.

+=, -=, *=, /=, %=- artırılmış atama işleçleridir .

++, --- artırma ve azaltma operatörleridir.


&&, ||, !- mantıksal 've', 'veya', 'değil' operatörleridir.

==, !=- eşitlik operatörleridir.

===, !==- refrans eşitliği operatörleridir.

<, >, <=, >=- karşılaştırma operatörleridir.

[, ]- indekslenmiş erişim operatörüdür.

!! bir ifadenin null olamayacağını belirtir.

?. güvenli bir çağrı oluşturur
?:soldaki değer null iken sağdaki değeri alır.

::bir üye veya sınıf başvurusu oluşturur.

.., aralıklar ..< oluşturulur.

:Bildirimdeki bir adı türden ayırır.

?bir türü null olarak işaretler .

-> lambda ifadesinin parametrelerini, gövdesini ayırır .

Fonksiyon parametreleri ve dönüş tipi bildirimlerini ayırır.

When ifadesi durumunu ve gövdesini ayırır.

@ Bir açıklama belirtir. Döngü etiketini tanıtır.

Lambda etiketini tanıtır

‘this’ ifadesine başvurur.

Dış üst sınıfa başvurur.

;aynı satırda birden fazla ifadeyi ayırır.

$ dize şablonunda değişkene ve ifadeye başvurur.

_ lambda ifadesinde kullanılmayan parametre yerine geçer. Yıkım beyanında kullanılmayan parametre yerine geçer.
Elinize sağlık.
 

aslan aslan

Basın&Medya Ekibi Asistanı
1 Şub 2023
665
250
Eline sağlık..

akeat4u.png
 
Ü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.