Kotlin Kurucuları ve Başlatıcıları (Örneklerle)

Bu makalede, Kotlin'deki yapıcılar (hem birincil hem de ikincil kurucular) ve örnekler yardımıyla başlatıcı bloklar hakkında bilgi edineceksiniz.

Yapıcı, sınıf özelliklerini başlatmanın kısa bir yoludur.

Bir nesne somutlaştırıldığında (oluşturulduğunda) çağrılan özel bir üye işlevidir. Ancak, Kotlin'de nasıl çalıştıkları biraz farklı.

Kotlin'de iki kurucu vardır:

  • Birincil oluşturucu - bir sınıfı başlatmanın kısa yolu
  • İkincil yapıcı - ek başlatma mantığı koymanıza izin verir

Birincil Oluşturucu

Birincil kurucu, sınıf başlığının bir parçasıdır. İşte bir örnek:

 class Person (val firstName: String, var age: Int) (// sınıf gövdesi)

Parantez içine kod bloğu birincil yapıcı geçerli: (val firstName: String, var age: Int).

Yapıcı iki özellik bildirdi: firstName(anahtar kelime kullanılarak bildirildiği için salt okunur özellik val) ve age( anahtar kelimeyle bildirildiği gibi okuma-yazma özelliği var).

Örnek: Birincil Oluşturucu

 fun main(args: Array) ( val person1 = Person("Joe", 25) println("First Name = $(person1.firstName)") println("Age = $(person1.age)") ) class Person(val firstName: String, var age: Int) ( )

Programı çalıştırdığınızda, çıktı:

 Adı = Joe Yaş = 25

PersonSınıfın nesnesi oluşturulduğunda "Joe"ve 25değerler bir işlevmiş gibi aktarılır Person.

Bu başlangıç durumuna firstNameve ageperson1 özellikleri için nesne "Joe"ve 25sırasıyla.

Birincil oluşturucuları kullanmanın başka yolları da vardır.

Birincil Oluşturucu ve Başlatıcı Blokları

Birincil yapıcının kısıtlı bir sözdizimi vardır ve herhangi bir kod içeremez.

Başlatma kodunu koymak için (sadece özellikleri başlatmak için kod değil), başlatıcı bloğu kullanılır. Bu öneki initanahtar kelime. Yukarıdaki örneği başlatıcı bloğu ile değiştirelim:

 fun main(args: Array) ( val person1 = Person("joe", 25) ) class Person(fName: String, personAge: Int) ( val firstName: String var age: Int // initializer block init ( firstName = fName.capitalize() age = personAge println("First Name = $firstName") println("Age = $age") ) )

Programı çalıştırdığınızda, çıktı:

 First Name = Joe Age = 25

Burada parantez içindeki fName ve personAge parametreleri değerleri kabul eder "Joe"ve 25sırasıyla person1 nesnesi oluşturulduğunda. Ancak, fName ve personAge, varveya kullanılmadan kullanılır valve Personsınıfın özellikleri değildir .

PersonSınıf iki özellik firstName vardır ve yaş ilan edilir.

Ne zaman person1nesne oluşturulduğunda, başlatıcı bloğunun içinde kod yürütülür. Başlatıcı bloğu sadece özelliklerini başlatmakla kalmaz, aynı zamanda onları da yazdırır.

İşte aynı görevi gerçekleştirmenin başka bir yolu:

 fun main(args: Array) ( val person1 = Person("joe", 25) ) class Person(fName: String, personAge: Int) ( val firstName = fName.capitalize() var age = personAge // initializer block init ( println("First Name = $firstName") println("Age = $age") ) )

Yapıcı parametresini ve özelliğini ayırt etmek için farklı adlar kullanılır (fName ve firstName ve personAge ve age). Yapıcı parametreleri için tamamen farklı adlar yerine _firstName ve _age kullanmak daha yaygındır. Örneğin:

 class Kişi (_firstName: String, _age: Int) (val firstName = _firstName.capitalize () var age = _age // başlatıcı blok init (…)) 

Birincil Oluşturucudaki Varsayılan Değer

Yapıcı parametrelerine varsayılan değer sağlayabilirsiniz (işlevlere varsayılan argümanlar sağlamaya benzer). Örneğin:

 fun main(args: Array) ( println("person1 is instantiated") val person1 = Person("joe", 25) println("person2 is instantiated") val person2 = Person("Jack") println("person3 is instantiated") val person3 = Person() ) class Person(_firstName: String = "UNKNOWN", _age: Int = 0) ( val firstName = _firstName.capitalize() var age = _age // initializer block init ( println("First Name = $firstName") println("Age = $age") ) )

Programı çalıştırdığınızda, çıktı:

 Ad = Joe Yaş = 25 kişi2 somutlaştırılmış Ad = Jack Yaş = 0 kişi3 örneklenmiş Ad = BİLİNMEYEN Yaş = 0

Kotlin İkincil Yapıcı

Kotlin'de, bir sınıf ayrıca bir veya daha fazla ikincil kurucu içerebilir. constructorAnahtar kelime kullanılarak oluşturulurlar .

İkincil kurucular Kotlin'de o kadar yaygın değildir. İkincil oluşturucunun en yaygın kullanımı, sınıfı farklı şekillerde başlatan birden çok oluşturucu sağlayan bir sınıfı genişletmeniz gerektiğinde ortaya çıkar. Kotlin Inheritance'ı öğrenmeden önce kontrol ettiğinizden emin olun.

Kotlin'de nasıl ikincil bir kurucu oluşturabileceğiniz aşağıda açıklanmıştır:

 class Log (yapıcı (veri: Dize) (// bazı kodlar) yapıcı (veri: Dize, sayıOfData: Int) (// bazı kodlar))

Burada, Logsınıfın iki ikincil kurucusu vardır, ancak birincil kurucu yoktur.

You can extend the class as:

 class Log ( constructor(data: String) ( // code ) constructor(data: String, numberOfData: Int) ( // code ) ) class AuthLog: Log ( constructor(data: String): super(data) ( // code ) constructor(data: String, numberOfData: Int): super(data, numberOfData) ( // code ) )

Here, constructors of the derived class AuthLog calls the corresponding constructor of the base class Log. For that, super() is used.

In Kotlin, you can also call a constructor from another constructor of the same class (like in Java) using this().

 class AuthLog: Log ( constructor(data: String): this(data, 10) ( // code ) constructor(data: String, numberOfData: Int): super(data, numberOfData) ( // code ) ) 

Example: Kotlin Secondary Constructor

 fun main(args: Array) ( val p1 = AuthLog("Bad Password") ) open class Log ( var data: String = "" var numberOfData = 0 constructor(_data: String) ( ) constructor(_data: String, _numberOfData: Int) ( data = _data numberOfData = _numberOfData println("$data: $numberOfData times") ) ) class AuthLog: Log ( constructor(_data: String): this("From AuthLog -> " + _data, 10) ( ) constructor(_data: String, _numberOfData: Int): super(_data, _numberOfData) ( ) )

When you run the program, the output will be:

 AuthLog'dan -> Hatalı Şifre: 10 kez

Not: İkincil kurucu, temel sınıfı başlatmalı veya sınıfın birincil oluşturucusu yoksa başka bir kurucuya (yukarıdaki örnekte olduğu gibi) yetki vermelidir.

Ilginç makaleler...