En İyi Uygulamalar
İşleçleri sezgisel tutun
En İyi Uygulamalar, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 4. 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.
İşleçleri Sezgisel Tutun
Bir işleci yalnızca anlamı açık olduğunda aşırı yükleyin. Vektörlerdeki + açıktır; e-posta gönderme anlamındaki + ise açık değildir.
data class Vec(val x: Int, val y: Int) {
operator fun plus(o: Vec) = Vec(x + o.x, y + o.y)
}
fun main() {
println(Vec(1, 2) + Vec(3, 4))
}Beklenen Anlamı Koruyun
Alışılmış cebirsel kurallara uyun: a + b, simetrik türlerde değişme özelliğine uygun hissettirmeli ve okuyucuları şaşırtmamalıdır.
data class Money(val cents: Int) {
operator fun plus(o: Money) = Money(cents + o.cents)
}
fun main() {
println(Money(100) + Money(50))
}Değişmezliği Tercih Edin
plus gibi işleçler, alıcıyı değiştirmek yerine sayılardaki davranışa uygun olarak yeni bir değer döndürmelidir.
data class Point(val x: Int) {
operator fun plus(o: Point) = Point(x + o.x)
}
fun main() {
val a = Point(1)
val b = a + Point(2)
println("${a.x} ${b.x}")
}plus ve plusAssign
Değişmez değerler için plus tanımlayın; değiştirilebilir kapsayıcıların yerinde değiştirilmesi için plusAssign tanımlayın. Çelişkili davranışlara sahip ikisini birden tanımlamaktan kaçının.
class Cart {
val items = mutableListOf<String>()
operator fun plusAssign(item: String) { items.add(item) }
}
fun main() {
val c = Cart()
c += "book"
println(c.items)
}Dönüş Türlerini Eşleştirin
Sonuçların doğal biçimde zincirlenebilmesi için ikili işleçlerden aynı türü döndürün.
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
}
fun main() {
println((N(1) + N(2) + N(3)).v)
}Akıllı Görünmek İçin Aşırı Yüklemeyin
Adlandırılmış bir işlev daha iyi okunuyorsa onu kullanın. İşleçler, bulmaca oluşturmak için değil, gerçekten sayısal veya kapsayıcı benzeri anlamlar için kullanılmalıdır.
data class Log(val lines: List<String>) {
fun append(line: String) = Log(lines + line)
}
fun main() {
println(Log(emptyList()).append("start").lines)
}equals ve hashCode Tutarlı Olsun
Karşılaştırmayı veya eşitliği aşırı yüklerseniz, koleksiyonların bozulmasını önlemek için equals ve hashCode değerlerini eşzamanlı tutun.
data class Id(val v: Int)
fun main() {
val set = hashSetOf(Id(1), Id(1))
println(set.size)
}İşleç Önceliğine Dikkat Edin
Aşırı yüklenmiş işleçler yerleşik önceliği korur. Doğal önceliğin beklenen sonuçları vermesini sağlayacak şekilde tasarlayın.
data class N(val v: Int) {
operator fun plus(o: N) = N(v + o.v)
operator fun times(o: N) = N(v * o.v)
}
fun main() {
println((N(2) + N(3) * N(4)).v)
}Şaşırtıcı İşleçleri Belgeleyin
Bir işleç açıkça beklenmeyen bir şey yapıyorsa, çağıranların yanıltılmaması için bir açıklama veya KDoc ekleyin.
data class Range2(val start: Int, val end: Int) {
// contains: is value inside the range?
operator fun contains(v: Int) = v in start..end
}
fun main() {
println(5 in Range2(1, 10))
}in için contains Kullanın
in işleci contains ile eşlenir. Bunu yalnızca türünüz için üyelik iyi tanımlanmışsa geçersiz kılın.
class Team(val members: List<String>) {
operator fun contains(name: String) = name in members
}
fun main() {
val t = Team(listOf("Ann", "Bo"))
println("Ann" in t)
}Şüphede Kaldığınızda İşlev Kullanın
Açıkça adlandırılmış bir yöntem, belirsiz bir işleçten neredeyse her zaman daha güvenlidir. Aşırı yüklemeyi yalnızca okunabilirliği gerçekten artırdığı durumlarla sınırlayın.
data class Temperature(val c: Int) {
fun warmerThan(o: Temperature) = c > o.c
}
fun main() {
println(Temperature(30).warmerThan(Temperature(20)))
}Hızlı Sınama
İşleç aşırı yüklemesiyle ilgili en iyi uygulamalar konusundaki anlayışınızı sınayın.
Özet
İşleç aşırı yüklemesiyle ilgili en iyi uygulamaları öğrendiniz:
- Yalnızca anlamı açık ve geleneksel olduğunda aşırı yükleyin.
- Değişmezliği ve aynı türden dönüşleri tercih edin; sonuçların zincirlenebilir olmasını sağlayın.
plusdeğer işleminiplusAssigndeğiştirme işleminden ayırın.equals/hashCodedeğerlerini tutarlı tutun; daha açık olduğunda adlandırılmış işlevleri tercih edin.
data class V(val x: Int) {
operator fun plus(o: V) = V(x + o.x)
}
fun main() {
println((V(2) + V(5)).x)
}Sıkça Sorulan Sorular
“En İyi Uygulamalar” dersi ücretsiz mi?
Evet — “En İyi Uygulamalar” 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.
“En İyi Uygulamalar” dersinde ne öğreneceğim?
İşleçleri sezgisel tutun 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 4. dersidir.
“En İyi Uygulamalar” 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