0Pricing
Scala for Backend Engineering & Functional Programming · Ders

Ö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çin implicit def.
  • implicitly veya companion'daki apply ile ö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

  1. Tür Sınıfı Örüntüsü
  2. Örnekler Tanımlama
  3. Yaygın Tür Sınıfları
  4. Tür Sınıfı Türetme
← Scala for Backend Engineering & Functional Programming Sayfasına Dön