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
val
kullanın. Bir değeri yeniden atayamazsınız işlevival
kullanarak bildirilen bir değişkene dönüştürülür. - Değeri değişebilen bir değişken için
var
kullanı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.