Dizinleme ve Çağırma
get, set ve invoke
Dizinleme ve Çağırma, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.
Dizin Operatörü
operator fun get tanımlamak, köşeli ayraç sözdizimiyle okuma yapmanızı sağlar: obj[i].
class Row(val cells: List<String>) {
operator fun get(i: Int) = cells[i]
}
fun main() {
val r = Row(listOf("a", "b", "c"))
println(r[1])
}set ile Yazma
operator fun set atamayı etkinleştirir: obj[i] = value. Son parametre değerdir.
class Grid {
private val data = IntArray(3)
operator fun get(i: Int) = data[i]
operator fun set(i: Int, value: Int) { data[i] = value }
}
fun main() {
val g = Grid()
g[0] = 42
println(g[0])
}Birden Çok Bağımsız Değerle Dizinleme
get ve set birden çok dizin alabilir; bu, matrisler için idealdir.
class Matrix {
private val d = Array(2) { IntArray(2) }
operator fun get(r: Int, c: Int) = d[r][c]
operator fun set(r: Int, c: Int, v: Int) { d[r][c] = v }
}
fun main() {
val m = Matrix()
m[1, 1] = 9
println(m[1, 1])
}Int Olmayan Anahtarlarla Dizinleme
Dizin parametreleri herhangi bir türde olabilir ve eşleme benzeri erişim sağlar.
class Settings {
private val map = mutableMapOf<String, String>()
operator fun get(key: String) = map[key]
operator fun set(key: String, value: String) { map[key] = value }
}
fun main() {
val s = Settings()
s["theme"] = "dark"
println(s["theme"])
}Çağırma Operatörü
operator fun invoke tanımlamak, bir örneği işlev gibi çağırmanızı sağlar: obj().
class Greeter(val name: String) {
operator fun invoke() = "Hello, $name"
}
fun main() {
val g = Greeter("Sam")
println(g())
}Bağımsız Değerlerle Çağırma
invoke parametre alabilir ve nesnenin parametreli bir işlev gibi davranmasını sağlayabilir.
class Multiplier(val factor: Int) {
operator fun invoke(x: Int) = x * factor
}
fun main() {
val triple = Multiplier(3)
println(triple(5))
}Durum Tutan Çağrılabilir Nesneler
Nesne durumu tuttuğu için invoke, yapılandırılabilir işlev benzeri nesneler oluşturabilir.
class Accumulator {
var total = 0
operator fun invoke(n: Int) { total += n }
}
fun main() {
val acc = Accumulator()
acc(5)
acc(10)
println(acc.total)
}Birden Çok invoke Aşırı Yüklemesi
Farklı parametrelerle birkaç invoke aşırı yüklemesi bildirebilirsiniz.
class Printer {
operator fun invoke(s: String) = println(s)
operator fun invoke(n: Int) = println("num: $n")
}
fun main() {
val p = Printer()
p("hi")
p(7)
}İfadelerde İndeks
İndeks erişimi diğer işlemlerle doğal biçimde birleşir.
class Scores(private val list: List<Int>) {
operator fun get(i: Int) = list[i]
}
fun main() {
val s = Scores(listOf(10, 20, 30))
println(s[0] + s[2])
}get ve invoke Birlikte
Bir tür, etkileyici bir API için hem indekslemeyi hem de çağrılmayı destekleyebilir.
class Lookup(private val data: Map<String, Int>) {
operator fun get(key: String) = data[key]
operator fun invoke() = data.size
}
fun main() {
val l = Lookup(mapOf("a" to 1))
println(l["a"])
println(l())
}Standart Kitaplık Bunu Nasıl Kullanır
Listelerin list[i] ve eşlemelerin map[key] kullanımı tam olarak bu işleçlere dayanır. Kendi türleriniz de aynı ölçüde doğal hissettirebilir.
fun main() {
val list = listOf(1, 2, 3)
val map = mapOf("x" to 9)
println(list[0])
println(map["x"])
}Hızlı Sınama
İndeks ve invoke konusundaki anlayışınızı sınayın.
Özet
indeks ve invoke konularını öğrendiniz:
get,obj[i]ifadesini;setiseobj[i] = vifadesini destekler.- İndeks işleçleri birden çok anahtarı ve Int olmayan anahtarları destekler.
invoke, örneklerin bağımsız değişkenli veya bağımsız değişkensiz işlevler gibi çağrılmasını sağlar.- Standart koleksiyonlar tam olarak bu işleçleri kullanır.
class Box {
private val m = mutableMapOf<String, Int>()
operator fun get(k: String) = m[k]
operator fun set(k: String, v: Int) { m[k] = v }
}
fun main() {
val b = Box()
b["x"] = 5
println(b["x"])
}Sıkça Sorulan Sorular
“Dizinleme ve Çağırma” dersi ücretsiz mi?
Evet — “Dizinleme ve Çağırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.
“Dizinleme ve Çağırma” dersinde ne öğreneceğim?
get, set ve invoke Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.
“Dizinleme ve Çağırma” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- İşleç İşlevleri
- Karşılaştırma İşleçleri
- Dizinleme ve Çağırma
- En İyi Uygulamalar