Tür Sınıfı Örüntüsü
Özel durumlu çok biçimlilik
Tür Sınıfı Örüntüsü, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 4 dersinin 1. 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.
Tür Sınıfı Nedir?
Tür sınıfı, türleri değiştirmeden onlara davranış eklemeye yönelik bir kalıptır. Bu, özel durumlu çok biçimliliğin bir biçimidir: aynı işlem, birbiriyle ilgisiz birçok tür için çalışır ve tür bilgisine göre derleyici tarafından seçilir.
Bu yaklaşım Haskell'den gelir ve Cats gibi Scala kütüphanelerinde yaygın olarak kullanılır.
Çözdüğü Sorun
Kalıtım, davranışı tür tanımlandığı anda o türe zorla bağlar. Ancak çoğu zaman bir türü düzenleyemezsiniz (tür bir kütüphanededir) veya farklı bağlamlarda farklı davranışlar istersiniz. Tür sınıfları, davranışı dışarıdan eklemenizi sağlar.
1. Adım: Trait'i Tanımlama
Tür sınıfı, bir türle parametreleştirilmiş bir trait'tir. Burada Show[A], herhangi bir A'yı String olarak nasıl oluşturacağımızı açıklar.
trait Show[A] {
def show(value: A): String
}
@main def run(): Unit = {
println("Show trait defined")
}2. Adım: Örnekler Sağlama
Desteklemek istediğiniz her somut tür için trait'in bir instance'ını oluşturun. Bunlar tür sınıfı örnekleridir.
trait Show[A] { def show(value: A): String }
object Main {
val intShow: Show[Int] = (v: Int) => s"Int($v)"
val strShow: Show[String] = (v: String) => s"Str($v)"
def main(args: Array[String]): Unit = {
println(intShow.show(7))
println(strShow.show("hi"))
}
}3. Adım: Örneği Kullanma
Bir işlev, örneği parametre olarak alır. Aynı render işlevi, Show örneğine sahip her tür için çalışır.
trait Show[A] { def show(value: A): String }
object Main {
def render[A](value: A, s: Show[A]): String = s.show(value)
val intShow: Show[Int] = (v: Int) => s"<$v>"
def main(args: Array[String]): Unit = {
println(render(99, intShow))
}
}Örtük Hale Getirme
Örnekleri elle geçirmek zahmetlidir. Örneği implicit, parametreyi de implicit olarak işaretlemek (veya Scala 3'te using kullanmak), derleyicinin örneği otomatik olarak sağlamasını mümkün kılar.
trait Show[A] { def show(value: A): String }
object Main {
implicit val intShow: Show[Int] = (v: Int) => s"<$v>"
def render[A](value: A)(implicit s: Show[A]): String = s.show(value)
def main(args: Array[String]): Unit = {
println(render(42))
}
}Özel Durumlu Çok Biçimlilik
Aynı işlev adı, bağımsız değişkenin türüne göre farklı uygulamalara yönlendirilir. Bu, alt tür çok biçimliliğinden (kalıtım) ve parametrik çok biçimlilikten (jenerikler) farklı olan özel durumlu çok biçimliliktir.
trait Show[A] { def show(value: A): String }
object Main {
implicit val intShow: Show[Int] = (v: Int) => s"int:$v"
implicit val boolShow: Show[Boolean] = (v: Boolean) => s"bool:$v"
def render[A](value: A)(implicit s: Show[A]): String = s.show(value)
def main(args: Array[String]): Unit = {
println(render(5))
println(render(true))
}
}Özel Türlerle Çalışma
Asıl güç şuradadır: kendi türlerinize temiz bir şekilde davranış ekleyebilir ve veri sınıfını biçimlendirme kaygılarından uzak tutabilirsiniz.
trait Show[A] { def show(value: A): String }
case class User(name: String, age: Int)
object Main {
implicit val userShow: Show[User] = (u: User) => s"${u.name} (${u.age})"
def render[A](value: A)(implicit s: Show[A]): String = s.show(value)
def main(args: Array[String]): Unit = {
println(render(User("Ada", 36)))
}
}Tür Sınıfları ve Arayüzler
Bir arayüz, davranışı türün tanımına bağlar; tür sınıfı ise bunları birbirinden ayırır.
- Sahibi olmadığınız bir tür için tür sınıfı örneği ekleyebilirsiniz.
- Farklı bağlamlar için birden çok örneğe sahip olabilirsiniz.
- Davranış, çağrı konumunda derleyici tarafından seçilir.
Üç Bileşen
Her tür sınıfının üç bölümü vardır:
- trait (soyut işlem).
- örnekler (tür başına uygulamalar).
- arayüz (bir örnek gerektiren işlevler).
Sonraki derslerde her birini inceleyeceksiniz.
Eksiksiz Bir Mini Örnek
Örtük bir örnek kullanan genel bir işlevle bu kalıbın bütün parçalarını bir araya getirme.
trait Show[A] { def show(value: A): String }
object Main {
implicit val intShow: Show[Int] = (v: Int) => s"#$v"
implicit val strShow: Show[String] = (v: String) => '"' + v + '"'
def printAll[A](xs: List[A])(implicit s: Show[A]): Unit =
xs.foreach(x => println(s.show(x)))
def main(args: Array[String]): Unit = {
printAll(List(1, 2, 3))
printAll(List("a", "b"))
}
}Kısa Kontrol
Tür sınıfı kalıbını ne kadar kavradığınızı sınayın.
Özet
Tür sınıfı kalıbını öğrendiniz:
- Parametreleştirilmiş bir
trait, bir işlemi açıklar. - Örnekler, bu işlemi tür başına uygular.
implicitparametreler, derleyicinin örneği sağlamasına olanak tanır.- Bu yaklaşım, özel durumlu çok biçimlilik sağlar ve sahibi olmadığınız türleri genişletmenize olanak verir.
Sıkça Sorulan Sorular
“Tür Sınıfı Örüntüsü” dersi ücretsiz mi?
Evet — “Tür Sınıfı Örüntüsü” 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.
“Tür Sınıfı Örüntüsü” dersinde ne öğreneceğim?
Özel durumlu çok biçimlilik 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 1. dersidir.
“Tür Sınıfı Örüntüsü” 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