Örnekler Tanımlama
Örtük örnekler
Örnekler Tanımlama, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 2. 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, Scala for Backend Engineering & Functional Programming öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.
Örnekleri Tanımlama
Bir instance, tür sınıfının belirli bir tür için nasıl davranacağını derleyiciye bildirir. Scala'da örnekler genellikle implicit olarak işaretlenir (Scala 2) veya otomatik olarak bulunmaları için given ile tanımlanır (Scala 3).
Bir implicit val Instance
Basit bir tür sınıfı için implicit val yeterlidir. Bir işlev Show[Int] gerektirdiğinde derleyici onu bulur.
trait Show[A] { def show(a: A): String }
object Main {
implicit val intShow: Show[Int] = (a: Int) => s"Int=$a"
def display[A](a: A)(implicit s: Show[A]): String = s.show(a)
def main(args: Array[String]): Unit = {
println(display(123))
}
}implicitly: Örnek Çağırma
implicitly[Show[Int]], derleyiciden kapsam içindeki örneği getirmesini ister. Bir örneğin varlığını sınamak veya örneğe doğrudan erişmek için kullanışlıdır.
trait Show[A] { def show(a: A): String }
object Main {
implicit val intShow: Show[Int] = (a: Int) => s"<$a>"
def main(args: Array[String]): Unit = {
val s = implicitly[Show[Int]]
println(s.show(8))
}
}Özel Türler İçin Örnekler
Kendi vaka sınıfınız için bir örnek tanımlayın. Veri sınıfı temiz kalır; biçimlendirme örnekte bulunur.
trait Show[A] { def show(a: A): String }
case class Point(x: Int, y: Int)
object Main {
implicit val pointShow: Show[Point] = (p: Point) => s"(${p.x}, ${p.y})"
def display[A](a: A)(implicit s: Show[A]): String = s.show(a)
def main(args: Array[String]): Unit = {
println(display(Point(3, 4)))
}
}Genel Örnekler İçin implicit def
Bir örnek başka bir örneğe bağlı olduğunda implicit def kullanın. Burada bir Show[List[A]], bir Show[A]'dan oluşturulur.
trait Show[A] { def show(a: A): String }
object Main {
implicit val intShow: Show[Int] = (a: Int) => a.toString
implicit def listShow[A](implicit s: Show[A]): Show[List[A]] =
(xs: List[A]) => xs.map(s.show).mkString("[", ", ", "]")
def display[A](a: A)(implicit s: Show[A]): String = s.show(a)
def main(args: Array[String]): Unit = {
println(display(List(1, 2, 3)))
}
}Companion Object İçindeki Örnekler
Örnekleri tür sınıfının companion object'ine yerleştirmek, herhangi bir içe aktarma olmadan otomatik olarak bulunmalarını sağlar. Varsayılan örnekler için önerilen yer burasıdır.
trait Show[A] { def show(a: A): String }
object Show {
implicit val intShow: Show[Int] = (a: Int) => s"i:$a"
implicit val strShow: Show[String] = (a: String) => s"s:$a"
}
object Main {
def display[A](a: A)(implicit s: Show[A]): String = s.show(a)
def main(args: Array[String]): Unit = {
println(display(5))
println(display("hi"))
}
}Implicit Kapsamı ve Öncelik
Derleyici bir örneği çeşitli yerlerde arar: önce yerel/içe aktarılmış kapsamda, ardından ilgili türlerin companion object'lerinde. İki örnek aynı ölçüde özelse belirsiz implicit hatası alırsınız.
Context Bound Kısa Yazımı
def f[A: Show](a: A) sözdizimi bir context bound'dur: kapsam içinde bir implicit Show[A] bulunması gerektiği anlamına gelir. İşlevin içinde bunu implicitly ile alabilirsiniz.
trait Show[A] { def show(a: A): String }
object Main {
implicit val intShow: Show[Int] = (a: Int) => s"n=$a"
def display[A: Show](a: A): String = implicitly[Show[A]].show(a)
def main(args: Array[String]): Unit = {
println(display(77))
}
}Summoner Yardımcısı
Kütüphaneler, kullanışlı bir summoner olarak companion'a bir apply yöntemi ekler: Show[Int] örneği döndürür. Bu, implicitly'den daha temizdir.
trait Show[A] { def show(a: A): String }
object Show {
def apply[A](implicit s: Show[A]): Show[A] = s
implicit val intShow: Show[Int] = (a: Int) => s"=$a"
}
object Main {
def main(args: Array[String]): Unit = {
println(Show[Int].show(10))
}
}Yetim Örneklerden Kaçınma
Yetim örnek, ne tür sınıfıyla ne de türle birlikte tanımlanan örnektir. Bunlar geçerlidir; ancak içe aktarmalar arasında tutarsız davranışlara yol açabilir. Tutarlılığı korumak için companion-object örneklerini tercih edin.
Parçaları Birleştirme
Eksiksiz bir program: companion-object örnekleri, türetilmiş bir liste örneği ve bir summoner.
trait Show[A] { def show(a: A): String }
object Show {
def apply[A](implicit s: Show[A]): Show[A] = s
implicit val intShow: Show[Int] = _.toString
implicit def listShow[A](implicit s: Show[A]): Show[List[A]] =
(xs: List[A]) => xs.map(s.show).mkString(", ")
}
object Main {
def main(args: Array[String]): Unit = {
println(Show[List[Int]].show(List(4, 5, 6)))
}
}Kısa Kontrol
Örnek tanımlama bilginizi sınayın.
Özet
Örnek tanımlamayı öğrendiniz:
- Basit örnekler için
implicit val, türetilmiş örnekler içinimplicit def. implicitlyveya companion'dakiapplyile örnek çağırın.- Kısa yazım olarak context bound
[A: Show]kullanın. - Yetim örneklerden kaçınmak için örnekleri companion object'lere yerleştirin.
Sıkça Sorulan Sorular
“Örnekler Tanımlama” dersi ücretsiz mi?
Evet — “Örnekler Tanımlama” 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 Scala for Backend Engineering & Functional Programming kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Scala for Backend Engineering & Functional Programming kursu toplamda 4 dersten oluşur.
“Örnekler Tanımlama” dersinde ne öğreneceğim?
Örtük örnekler Scala for Backend Engineering & Functional Programming 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.
Scala for Backend Engineering & Functional Programming öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Scala for Backend Engineering & Functional Programming, 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 2. dersidir.
“Örnekler Tanımlama” 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 Scala for Backend Engineering & Functional Programming dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Scala for Backend Engineering & Functional Programming 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
- Tür Sınıfı Örüntüsü
- Örnekler Tanımlama
- Yaygın Tür Sınıfları
- Tür Sınıfı Türetme