Kotlin bir programlama dilidir yaygın olarak kullanılan bir teknoloji. Bu konu bir Kotlin olarak sunuluyor hızlıca öğrenmenizi sağlayacak hızlandırılmış kursu izleyebilirsiniz.
Değişken bildirimi
Kotlin, değişkenleri bildirmek için iki farklı anahtar kelime kullanır: val ve var.
- Değeri hiç değişmeyen bir değişken için
valkullanın. Bir değeri yeniden atayamazsınız işlevivalkullanarak bildirilen bir değişkene dönüştürülür. - Değeri değişebilen bir değişken için
varkullanın.
Aşağıdaki örnekte, count Int türünde bir değişkendir ve
10 başlangıç değeri:
var count: Int = 10
Int, bir tam sayıyı temsil eden bir türdür. Bu tür bir sayıdaki sayısal türlerden biri
Kotlin biçiminde temsil edilebilir. Diğer dillerle benzer şekilde,
Sayısal verilerinize bağlı olarak Byte, Short, Long, Float ve Double.
var anahtar kelimesi, değerleri count öğesine gerektiği gibi yeniden atayabileceğiniz anlamına gelir. Örneğin,
10 olan count değerini 15 olarak değiştirebilirsiniz:
var count: Int = 10
count = 15
Bununla birlikte, bazı değerler değiştirilmek zorunda değildir. Şu ada sahip bir String düşünün:
languageName. languageName öğesinin her zaman bir değere sahip olmasını istiyorsanız
Örneğin, val anahtar kelimesini kullanarak languageName belirtebilirsiniz:
val languageName: String = "Kotlin"
Bu anahtar kelimeler, nelerin değiştirilebileceği konusunda açık olmanızı sağlar. Bu araçları şu amaçlarla kullanabilirsiniz:
gerektiği şekilde ele alacağız. Bir değişken referansının yeniden atanabilir olması gerekiyorsa
bunu var olarak tanımlamalısınız. Aksi durumda val politikasını kullanın.
Tür çıkarımı
Önceki örnekten devam edersek,
languageName gibi bir komut dosyası kullanıyorsanız, Kotlin derleyicisi,
atanan değeri ifade eder.
"Kotlin" değeri String türünde olduğu için derleyici,
languageName aynı zamanda String. Kotlin'in statik olarak yazılmış bir yöntem olduğunu unutmayın
dili'ne dokunun. Bu, türün derleme sırasında çözümlendiği ve hiçbir zaman
anlamına gelir.
Aşağıdaki örnekte languageName, bir String olarak tahmin edildiği için
String sınıfının parçası olmayan işlevleri çağırın:
val languageName = "Kotlin"
val upperCaseName = languageName.toUpperCase()
// Fails to compile
languageName.inc()
toUpperCase(), yalnızca şu türdeki değişkenlerde çağrılabilen bir işlevdir:
String. Kotlin derleyicisi, languageName sonucunu String olarak tahmin ettiğinden,
toUpperCase() hattını güvenle arayabilirsiniz. Ancak inc(), bir Int operatörüdür
işlevi, dolayısıyla String üzerinde çağrılamaz. Kotlin’in türe yaklaşımı
hem özlü hem de tür güvenliğini sağlar.
Boş güvenlik
Bazı dillerde, referans türü değişkeni sağlanmadan bildirilebilir açıkça belirten bir başlangıç değeridir. Bu durumlarda, değişkenler genellikle bir null değer. Kotlin değişkenleri varsayılan olarak boş değer içeremez. Bu, şu snippet geçersiz:
// Fails to compile
val languageName: String = null
Bir değişkenin null değer alabilmesi için null türünde olması gerekir. Şunları yapabilirsiniz:
türünü son eki ? olarak ekleyerek bir değişkeni boş değer olarak belirtin (gösterildiği gibi)
aşağıdaki örnekte:
val languageName: String? = null
Bir String? türüyle, şunlara bir String değeri veya null değeri atayabilirsiniz:
languageName.
Boş değer atanabilir değişkenleri dikkatli bir şekilde işlemelisiniz. Aksi takdirde
NullPointerException Örneğin, Java'da bir yöntem çağırmaya çalışırsanız
çalışırsanız programınız kilitlenir.
Kotlin, boş değer atanarak güvenli bir şekilde çalışmak için çeşitli mekanizmalar sağlar değişkenlerine karşılık gelir. Daha fazla bilgi için bkz. Android'de yaygın Kotlin kalıpları: Boşluk.
Koşullar
Kotlin, koşullu mantığı uygulamak için çeşitli mekanizmalara sahiptir. En
if-else ifadesi de en yaygın olanıdır. Sarmalanmış bir ifade
if anahtar kelimesinin yanındaki parantezler true sonucunu verir, ardından içindeki kod
(ör. kıvrık bir şekilde sarmalanmış ve hemen takip eden kod)
küme ayraçları) yürütülür. Aksi takdirde else dalındaki kod yürütülür.
if (count == 42) {
println("I have the answer.")
} else {
println("The answer eludes me.")
}
else if kullanarak birden fazla koşulu ifade edebilirsiniz. Bu sayede,
aşağıdaki örnekteki gibi tek bir koşullu ifadede daha ayrıntılı, karmaşık bir mantık
aşağıdaki örneği inceleyin:
if (count == 42) {
println("I have the answer.")
} else if (count > 35) {
println("The answer is close.")
} else {
println("The answer eludes me.")
}
Koşullu ifadeler, durum bilgili mantığı temsil etmek için yararlıdır ancak
kendinizi tekrarladığınızı fark edeceksiniz. Yukarıdaki örnekte
her dal için bir String yazdırmanız yeterlidir. Bu tekrardan kaçınmak için Kotlin,
koşullu ifadeleri kullanın. Son örnek aşağıdaki gibi yeniden yazılabilir:
val answerString: String = if (count == 42) {
"I have the answer."
} else if (count > 35) {
"The answer is close."
} else {
"The answer eludes me."
}
println(answerString)
Dolaylı olarak, her koşullu dal, kendi
son satırda olduğundan return anahtar kelimesi kullanmanız gerekmez. Çünkü
üç dal da String türündeyse, if-else ifadesinin sonucu
ayrıca String türünde. Bu örnekte, answerString işlevine
değeri-else ifadesinin sonucundaki değerdir. Tür çıkarımı,
answerString için açık tür bildirimini çıkarın ancak bu genellikle iyi bir sonuçtur
bunu daha anlaşılır hale getirmek
düşünülebilir.
Koşullu ifadenizin karmaşıklığı arttıkça, aşağıdakileri göz önünde bulundurabilirsiniz: if-else ifadenizi bir when ifadesiyle değiştirin; şu örneği inceleyin:
val answerString = when {
count == 42 -> "I have the answer."
count > 35 -> "The answer is close."
else -> "The answer eludes me."
}
println(answerString)
Bir when ifadesindeki her dal bir koşul, ok ve
(->) ve bir sonuç. Okun sol tarafındaki durum
doğru olarak değerlendirilirse, sağ taraftaki ifadenin sonucu
geri döndü. Yürütme işleminin bir daldan diğerine geçmediğini unutmayın.
when ifadesi örneğindeki kod,
ancak daha kolay okunduğu anlaşılabilir.
Kotlin'in koşulları, Kotlin'in daha güçlü özelliklerinden birini öne çıkarıyor. akıllı yayınlama. Güvenli arama operatörü veya not-null yerine onay operatörünün boş değerlerle çalışmak üzere kullanılabilmesini sağlayın. Bunun yerine, değişkeni, koşullu bir ifade kullanan boş bir değere, aşağıdaki örnekte gösterilmektedir:
val languageName: String? = null
if (languageName != null) {
// No need to write languageName?.toUpperCase()
println(languageName.toUpperCase())
}
Koşullu dal içinde languageName, null olamaz olarak değerlendirilebilir.
Kotlin, dalı yürütme koşulunun ne olduğunu öğrenecek kadar akıllıdır.
languageName, null bir değer içermez. Bu nedenle,
Bu dal içinde null değer olarak languageName. Bu akıllı yayınlama null için çalışır
kontroller,
tür kontrolleri
ve bir şartları karşılayan
sözleşme.
Fonksiyonlar
Bir veya daha fazla ifadeyi bir işlev halinde gruplandırabilirsiniz. Tekrarlamaktansa her sonuca ihtiyacınız olduğunda aynı ifade dizisini fonksiyonunda çağırın ve bunun yerine bu işlevi çağırın.
Bir işlev tanımlamak için fun anahtar kelimesini ve ardından işlev adını kullanın.
Ardından, fonksiyonunuzun aldığı giriş türlerini (varsa) tanımlayın ve
döndürdüğü çıkış türünü belirtmelidir. Bir fonksiyonun gövdesi,
işleviniz çağrıldığında çağrılan ifadelerdir.
Önceki örneklere dayanarak, aşağıda eksiksiz bir Kotlin fonksiyonunu görebilirsiniz:
fun generateAnswerString(): String {
val answerString = if (count == 42) {
"I have the answer."
} else {
"The answer eludes me"
}
return answerString
}
Yukarıdaki örnekte bulunan fonksiyon generateAnswerString adına sahiptir. Google
giriş kabul etmiyor. String türünde bir sonuç verir. Bir
işlevini kullanın, adını ve ardından çağrı operatörünü (()) kullanın.
aşağıdaki örnekte, answerString değişkeni
generateAnswerString().
val answerString = generateAnswerString()
İşlevler, aşağıdaki örnekte gösterildiği gibi, bağımsız değişkenleri giriş olarak alabilir:
fun generateAnswerString(countThreshold: Int): String {
val answerString = if (count > countThreshold) {
"I have the answer."
} else {
"The answer eludes me."
}
return answerString
}
Bir işlev tanımlarken istediğiniz sayıda bağımsız değişken ve bağımsız değişkenleri belirtebilirsiniz.
bulunur. Yukarıdaki örnekte, generateAnswerString() adlı bir bağımsız değişken adlı bir bağımsız değişken alır
Int türünde countThreshold. Fonksiyonun içinde
bağımsız değişkeni hakkında daha fazla bilgi edinin.
Bu işlevi çağırırken işlevin içine bir bağımsız değişken eklemeniz gerekir çağrının parantezleri:
val answerString = generateAnswerString(42)
Fonksiyon açıklamalarını basitleştirme
generateAnswerString() oldukça basit bir işlevdir. Fonksiyon, bir
değişkeninden hemen sonra döndürülür. Tek bir ifadenin sonucu
bir işlevden döndürüldüyse doğrudan değişken içeren bir
işlevde yer alan if-else ifadesinin sonucunu döndürmek için
aşağıdaki örnekte gösterilmektedir:
fun generateAnswerString(countThreshold: Int): String {
return if (count > countThreshold) {
"I have the answer."
} else {
"The answer eludes me."
}
}
Return anahtar kelimesini atama operatörüyle de değiştirebilirsiniz:
fun generateAnswerString(countThreshold: Int): String = if (count > countThreshold) {
"I have the answer"
} else {
"The answer eludes me"
}
Anonim işlevler
Her işlevin bir adı olması gerekmez. Bazı fonksiyonlar Google Analytics 4'te geri bildirim vermelidir. Bu işlevlere anonim işlevler adı verilir. Siz isimsiz bir işleve referans tutabilir, bu referansı işlevini çağırabilirsiniz. Ayrıca referansı kullanıcılarınıza diğer referans türlerinde olduğu gibidir.
val stringLengthFunc: (String) -> Int = { input ->
input.length
}
Adlandırılmış işlevler gibi anonim işlevler de herhangi bir sayıda ifade içerebilir. İşlevin döndürülen değeri, son ifadenin sonucudur.
Yukarıdaki örnekte, stringLengthFunc anonim bir
girdi olarak String alan ve girişin uzunluğunu döndüren işlev
Int türünün çıktısı olarak String. Bu nedenle, fonksiyonun türü
(String) -> Int olarak belirtilir. Ancak bu kod, işlevi çağırmaz.
İşlevin sonucunu almak için aşağıdaki gibi çağrılmalısınız:
adlandırılmış işlev. stringLengthFunc numaralı telefonu ararken bir String sağlamalısınız.
aşağıdaki örnekte gösterilmektedir:
val stringLengthFunc: (String) -> Int = { input ->
input.length
}
val stringLength: Int = stringLengthFunc("Android")
Daha üst düzey işlevler
Bir işlev, bağımsız değişken olarak başka bir işlevi alabilir. Diğer bağımsız değişkenler olarak kullanılan işlevlere üst düzey işlevler adı verilir. Bu kalıp her bir bileşen arasında, her bir birimde olduğu gibi JavaScript'teki geri çağırma arayüzü.
Aşağıda, daha yüksek düzeyli bir işlev örneği verilmiştir:
fun stringMapper(str: String, mapper: (String) -> Int): Int {
// Invoke function
return mapper(str)
}
stringMapper() işlevi, String ile birlikte şu işleve sahip bir işlev alır:
ona aktardığınız bir String'dan Int değeri türetir.
Bir String ve aşağıdaki gibi bir işlev ileterek stringMapper() öğesini çağırabilirsiniz:
diğer giriş parametresini, yani bir String öğesini alan
aşağıdaki örnekte gösterildiği gibi bir Int girişi ve çıkışını sağlar:
stringMapper("Android", { input ->
input.length
})
Anonim işlev, bir işlevde tanımlanan last parametresiyse şunu yapabilirsiniz: işlevi çağırmak için kullanılan parantezlerin dışında ( şu örneği inceleyin:
stringMapper("Android") { input ->
input.length
}
Anonim işlevler Kotlin standart kitaplığında bulunabilir. Örneğin, daha fazla bilgi için Daha Yüksek Sıralı İşlevler ve Lambdas.
Sınıflar
Şimdiye kadar bahsedilen tüm türler Kotlin programlamasına dahil edilmiştir
dili'ne dokunun. Kendi özel türünüzü eklemek isterseniz bir sınıf tanımlayabilirsiniz
aşağıdaki örnekte gösterildiği gibi class anahtar kelimesi kullanılır:
class Car
Özellikler
Sınıflar, özellikleri kullanarak durumu temsil eder. CEVAP
property özelliği
alıcı, belirleyici ve destek alanı içerebilen sınıf düzeyinde bir değişkendir.
Araba sürmek için tekerlek gerektiğinden Wheel nesne listesini
özelliği: Car özelliği:
class Car {
val wheels = listOf<Wheel>()
}
wheels öğesinin bir public val olduğunu, yani wheels öğesinin şuradan erişilebilir olduğunu unutmayın:
Car sınıfının dışındadır ve yeniden atanamaz. Bir web sitesi
Car örneği için ilk olarak oluşturucusunu çağırmanız gerekir. Bu bölümden
erişilebilir özelliklerine erişebilir.
val car = Car() // construct a Car
val wheels = car.wheels // retrieve the wheels value from the Car
Tekerleklerinizi özelleştirmek isterseniz, tekerleklerinizi istediğiniz şekilde sınıf özelliklerinizin nasıl başlatıldığını belirtir:
class Car(val wheels: List<Wheel>)
Yukarıdaki örnekte, sınıf oluşturucusu bir List<Wheel> öğesini
kurucu bağımsız değişkeninden biridir ve wheels bağımsız değişkenini başlatmak için bu bağımsız değişkeni kullanır.
Sınıf işlevleri ve kapsülleme
Sınıflar, davranışı modellemek için işlevleri kullanır. İşlevler durumu değiştirebilir. Böylece, seçeneğini belirleyin. Bu erişim denetimi, kapsülasyon olarak bilinen daha geniş nesne odaklı bir kavram.
Aşağıdaki örnekte, doorLock özelliği her şeyden gizli tutulur
Car sınıfının dışında. Arabanın kilidini açmak için unlockDoor() numarasını aramalısınız
işlevi (aşağıdaki örnekte gösterildiği gibi) geçerli bir anahtarda iletmelidir:
class Car(val wheels: List<Wheel>) {
private val doorLock: DoorLock = ...
fun unlockDoor(key: Key): Boolean {
// Return true if key is valid for door lock, false otherwise
}
}
Bir mülke referans verme şeklini özelleştirmek isterseniz bir mülk
belirleyicidir. Örneğin, bir mülkün
bulunurken, belirleyicisine erişimi kısıtlarken, o belirleyiciyi
private:
class Car(val wheels: List<Wheel>) {
private val doorLock: DoorLock = ...
var gallonsOfFuelInTank: Int = 15
private set
fun unlockDoor(key: Key): Boolean {
// Return true if key is valid for door lock, false otherwise
}
}
Özellikleri ve işlevlerin bir arada kullanılmasıyla, kolay kullanım olanağı sunan modeller.
Birlikte çalışabilirlik
Kotlin’in en önemli özelliklerinden biri, Java ile akıcı birlikte çalışabilmesidir. Kotlin kodu JVM bayt koduna derlendiği için Kotlin kodunuz ve tam tersi de geçerlidir. Bu da yeni paydaşlardan mevcut Java kitaplıklarını doğrudan Kotlin'den içe aktarın. Dahası, Android API'leri Java'da yazılır ve doğrudan Kotlin'den çağrılabilir.
Sonraki adımlar
Esnek ve pragmatik bir dil olan Kotlin'in desteği ve ivmesi artıyor. Biz (henüz denemediyseniz de denemenizi öneririm). Sonraki adımlar için: resmi Kotlin dokümanlarına göz atın kılavuz ile birlikte nasıl başvuracağınızla yaygın Kotlin kalıpları hakkında daha fazla bilgi edinin.