Cebirsel Veri Türleri
Alanınızı modelleyin
Cebirsel Veri Türleri, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming 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, 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.
ADT Nedir?
cebirsel veri türü (ADT), diğer türlerin birleştirilmesiyle oluşturulan bir türdür. Scala'da ADT'leri bir sealed trait ile case class ve case object varyantlarını kullanarak modelliyorsunuz.
ADT'ler, alan verilerinizin yapısını kesin biçimde açıklamanızı sağlar.
Toplam Türleri
toplam türü, bir değerin çeşitli alternatiflerden biri olduğu anlamına gelir (bir OR). Trafik ışığı Kırmızı OR Sarı OR Yeşil olabilir.
Bunu bir sealed trait ve birkaç varyantla ifade edersiniz.
sealed trait Light
case object Red extends Light
case object Yellow extends Light
case object Green extends Light
object Main {
def main(args: Array[String]): Unit = {
val l: Light = Yellow
println(l)
}
}Çarpım Türleri
çarpım türü, bir değerin birkaç alanı birleştirdiği anlamına gelir (bir AND). Bir noktanın bir x AND bir y değeri vardır.
Case class'lar çarpım türleridir.
case class Point(x: Int, y: Int)
object Main {
def main(args: Array[String]): Unit = {
val p = Point(3, 4)
println(s"${p.x} and ${p.y}")
}
}Toplam ve Çarpımı Birleştirme
Gerçek ADT'ler her ikisini de birleştirir: varyantları case class olan bir sealed trait (toplam).
Burada bir Shape, yarıçapı olan bir Circle OR genişliği ve yüksekliği olan bir Rectangle'dır.
sealed trait Shape
case class Circle(radius: Double) extends Shape
case class Rectangle(w: Double, h: Double) extends Shape
object Main {
def main(args: Array[String]): Unit = {
val s: Shape = Rectangle(3, 4)
println(s)
}
}ADT Üzerinde İşlem Yapma
Bir ADT'yi varyantları üzerinde kalıp eşleştirme yaparak işlersiniz. Her dal bir şekli ele alır.
sealed trait Shape
case class Circle(radius: Double) extends Shape
case class Rectangle(w: Double, h: Double) extends Shape
object Main {
def area(s: Shape): Double = s match {
case Circle(r) => 3.14159 * r * r
case Rectangle(w, h) => w * h
}
def main(args: Array[String]): Unit = {
println(area(Circle(2)))
println(area(Rectangle(3, 4)))
}
}Bir Alanı Modelleme
ADT'ler geçersiz durumların temsil edilememesini sağlar. Bir ödeme yöntemini, geçerli seçeneklerden oluşan kapalı bir küme olarak modelleyin.
sealed trait PaymentMethod
case class CreditCard(number: String) extends PaymentMethod
case class BankTransfer(iban: String) extends PaymentMethod
case object Cash extends PaymentMethod
object Main {
def main(args: Array[String]): Unit = {
val m: PaymentMethod = Cash
println(m)
}
}Özyinelemeli ADT'ler
Bir ADT kendisine başvurabilir; ağaçları ve listeleri bu şekilde modelliyorsunuz. Burada basit bir ikili ağaç gösterilmektedir.
sealed trait Tree
case object Leaf extends Tree
case class Node(value: Int, left: Tree, right: Tree) extends Tree
object Main {
def main(args: Array[String]): Unit = {
val t: Tree = Node(1, Leaf, Node(2, Leaf, Leaf))
println(t)
}
}Özyinelemeli Bir ADT Üzerinde Katlama
Özyineleme ve eşleştirme, yapının tamamını işlemenizi sağlar. Burada bir ağaçtaki her değeri topluyoruz.
sealed trait Tree
case object Leaf extends Tree
case class Node(value: Int, left: Tree, right: Tree) extends Tree
object Main {
def sum(t: Tree): Int = t match {
case Leaf => 0
case Node(v, l, r) => v + sum(l) + sum(r)
}
def main(args: Array[String]): Unit = {
val t = Node(1, Node(2, Leaf, Leaf), Node(3, Leaf, Leaf))
println(sum(t))
}
}Neden ADT Kullanılır?
ADT'ler şu nedenlerle güçlüdür:
- Verileri toplamlar ve çarpımlar olarak kesin biçimde açıklar
- Geçersiz durumların oluşturulmasını imkânsız kılar
- Tüm durumları kapsayan kalıp eşleştirmeyle kusursuz biçimde çalışır
- Ağaçlar ve listeler gibi özyinelemeli yapılara ölçeklenir
ADT'ler ve Kalıtım
Geleneksel nesne yönelimli programlama, davranışı alt sınıflara dağıtırdı. ADT'ler veri tanımlarını kapalı tutar ve davranışı kalıp eşleştiren fonksiyonlara yerleştirir.
Veri ile davranışın bu şekilde ayrılması, işlevsel tasarımın ayırt edici özelliklerinden biridir.
Hepsini Bir Araya Getirme
Her varyantı ele alan bir fonksiyona sahip, eksiksiz ve küçük bir ADT.
sealed trait Json
case class JNum(n: Double) extends Json
case class JStr(s: String) extends Json
case object JNull extends Json
object Main {
def render(j: Json): String = j match {
case JNum(n) => n.toString
case JStr(s) => "\"" + s + "\""
case JNull => "null"
}
def main(args: Array[String]): Unit = {
List(JNum(3.0), JStr("hi"), JNull).foreach(j => println(render(j)))
}
}Kısa Kontrol
ADT'leri anlayışınızı test edin.
Özet
Cebirsel veri türleri oluşturmayı öğrendiniz:
- Toplam türleri: birden çok varyanta sahip sealed trait (OR)
- Çarpım türleri: alanlara sahip case class'lar (AND)
- Alanları kesin biçimde modellemek için bunları birleştirin
- ADT'ler özyinelemeli olabilir (ağaçlar, listeler)
- Bunları kalıp eşleştirmeyle işleyin
Sıkça Sorulan Sorular
“Cebirsel Veri Türleri” dersi ücretsiz mi?
Evet — “Cebirsel Veri Türleri” 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.
“Cebirsel Veri Türleri” dersinde ne öğreneceğim?
Alanınızı modelleyin 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 3. dersidir.
“Cebirsel Veri Türleri” 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
- Case Sınıfları
- Mühürlü Trait'ler
- Cebirsel Veri Türleri
- Eksiksiz Eşleştirme