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
Person
Sınıfın nesnesi oluşturulduğunda "Joe"
ve 25
değerler bir işlevmiş gibi aktarılır Person
.
Bu başlangıç durumuna firstName
ve age
person1 özellikleri için nesne "Joe"
ve 25
sı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 init
anahtar 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 25
sırasıyla person1 nesnesi oluşturulduğunda. Ancak, fName ve personAge, var
veya kullanılmadan kullanılır val
ve Person
sınıfın özellikleri değildir .
Person
Sınıf iki özellik firstName vardır ve yaş ilan edilir.
Ne zaman person1
nesne 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. constructor
Anahtar 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, Log
sı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.