0Pricing
Scala for Backend Engineering & Functional Programming · Ders

Alanları Birleştirme

Daha büyük modeller oluşturun

Alanları Birleştirme, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming 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, 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.

Daha Büyük Modeller Oluşturma

Gerçek alanlar daha küçük parçalardan oluşturulur. Alanları birleştirmek; iyi modellenmiş ADT'leri, newtype'ları ve doğrulanmış değerleri daha büyük, doğruluğunu koruyan yapılar hâline getirmek demektir.

  • Küçük ve odaklanmış türler daha büyük türler hâlinde birleştirilebilir.
  • Her parça kendi değişmez koşullarını korur.
case class Money(cents: Long)
case class Product(name: String, price: Money)

object Main:
  def main(args: Array[String]): Unit =
    println(Product("Book", Money(1999)))

Ürünleri İç İçe Yerleştirme

Vaka sınıflarını iç içe yerleştirerek ürün türlerini birleştirin. Her düzey, okunabilirliği korurken yapıya yenisini ekler.

case class Address(city: String, zip: String)
case class Customer(name: String, address: Address)

object Main:
  def main(args: Array[String]): Unit =
    val c = Customer("Ada", Address("London", "E1"))
    println(c.address.city)

Koleksiyonlarla Birleştirme

Alanınız içindeki bire-çok ilişkileri modellemek için List, Map ve Set kullanın.

case class Item(name: String, qty: Int)
case class Order(id: Int, items: List[Item])

object Main:
  def main(args: Array[String]): Unit =
    val order = Order(1, List(Item("pen", 2), Item("ink", 1)))
    println(order.items.map(_.qty).sum)

Toplam Türlerini Birleştirme

Daha büyük seçenekler, daha küçük seçenekleri bir araya getirir. Bir numaralandırma seçeneği, kararları katmanlandırarak kendi içinde başka bir ADT barındırabilir.

enum Payment:
  case Card(last4: String)
  case Cash

enum Checkout:
  case Completed(payment: Payment)
  case Abandoned

object Main:
  def main(args: Array[String]): Unit =
    val c: Checkout = Checkout.Completed(Payment.Card("1234"))
    println(c)

Alanları Birleştiren İşlevler

Alan işlemleri, girdi türlerinden çıktı türlerine eşleyen saf işlevlerdir. Bunları birleştirmek iş akışları oluşturur.

case class Cart(total: Long)
case class Receipt(total: Long, tax: Long)

object Main:
  def checkout(c: Cart): Receipt =
    Receipt(c.total, (c.total * 0.2).toLong)

  def main(args: Array[String]): Unit =
    println(checkout(Cart(1000)))

Doğrulamaları Birleştirme

Her alan akıllı bir oluşturucu ile oluşturulduğunda, bunları bir for kapsamlı ifadesiyle birleştirin. Nesnenin tamamı yalnızca her parça doğrulamadan geçtiğinde oluşturulur.

object V:
  def name(s: String): Option[String] = if s.nonEmpty then Some(s) else None
  def age(n: Int): Option[Int] = if n >= 0 then Some(n) else None

case class Person(name: String, age: Int)

object Main:
  def make(n: String, a: Int): Option[Person] =
    for nm <- V.name(n); ag <- V.age(a) yield Person(nm, ag)

  def main(args: Array[String]): Unit =
    println(Main.make("Bob", 30))
    println(Main.make("", 30))

Bileşik Veriler Üzerinde Katlama

Bileşik yapıları fold veya map ile sum kullanarak toplulaştırın. Verilerin biçimi, hesaplamaya yön verir.

case class Line(price: Long, qty: Int)
case class Invoice(lines: List[Line])

object Main:
  def total(inv: Invoice): Long =
    inv.lines.foldLeft(0L)((acc, l) => acc + l.price * l.qty)

  def main(args: Array[String]): Unit =
    val inv = Invoice(List(Line(100, 2), Line(50, 4)))
    println(total(inv))

Değişmez Modelleri Güncelleme

Değişiklikleri, seçili alanların yenileriyle değiştirildiği yeni bir değer döndüren copy ile birleştirin. Özgün değer olduğu gibi kalır.

case class Account(id: Int, balance: Long)

object Main:
  def deposit(a: Account, amt: Long): Account =
    a.copy(balance = a.balance + amt)

  def main(args: Array[String]): Unit =
    val a = Account(1, 100)
    println(deposit(a, 50))

Durum Makinesi Modelleme

Yalnızca geçerli geçişlerin var olduğu bir durum makinesini modellemek için toplam türlerini ve geçiş işlevlerini birleştirin.

enum Light:
  case Red, Green, Yellow

object Main:
  def next(l: Light): Light = l match
    case Light.Red    => Light.Green
    case Light.Green  => Light.Yellow
    case Light.Yellow => Light.Red

  def main(args: Array[String]): Unit =
    println(next(Light.Red))
    println(next(Light.Green))

Alanı ve İşlemleri Katmanlandırma

Veri türlerini saf tutun; davranışı işlevlere veya yöntemlere yerleştirin. Birleştirilmiş bir model ile dönüşümler kümesi, küçük bir alan kitaplığı oluşturur.

case class Temp(celsius: Double):
  def toF: Double = celsius * 9 / 5 + 32

object Main:
  def main(args: Array[String]): Unit =
    val t = Temp(25.0)
    println(t.toF)

Hepsini Bir Araya Getirme

Tam bir model; newtype'ları, ürünleri, toplamları, koleksiyonları ve doğrulanmış oluşturmayı birleştirir. Sonuç, yanlış kullanılmaya karşı dayanıklı ve anlaşılması kolaydır.

  • Önce küçük türleri oluşturun.
  • Bunları toplu yapılarda birleştirin.
  • İşlemleri saf işlevler olarak ifade edin.
case class Sku(value: String)
case class Line(sku: Sku, qty: Int)
case class Basket(lines: List[Line]):
  def count: Int = lines.map(_.qty).sum

object Main:
  def main(args: Array[String]): Unit =
    val b = Basket(List(Line(Sku("A"), 2), Line(Sku("B"), 3)))
    println(b.count)

Kısa Test

Alanları birleştirme konusundaki anlayışınızı test edin.

Özet

Alanları birleştirmeyi öğrendiniz.

  • Zengin yapıları modellemek için ürünleri ve toplamları iç içe yerleştirin.
  • Bire-çok ilişkileri için koleksiyonları kullanın.
  • Doğrulamaları for kapsamlı ifadeleriyle birleştirin.
  • copy ile değişmez biçimde güncelleyin.
  • Verileri saf tutun ve işlemleri işlevler olarak ifade edin.
case class User(id: Int, name: String)
case class Post(author: User, text: String)

object Main:
  def main(args: Array[String]): Unit =
    val p = Post(User(1, "Ada"), "hello")
    println(p.copy(text = "hi"))

Sıkça Sorulan Sorular

“Alanları Birleştirme” dersi ücretsiz mi?

Evet — “Alanları Birleştirme” 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.

“Alanları Birleştirme” dersinde ne öğreneceğim?

Daha büyük modeller oluşturun 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 4. dersidir.

“Alanları Birleştirme” 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. ADT'lerle Modelleme
  2. Akıllı Oluşturucular
  3. Yeni Türler
  4. Alanları Birleştirme
← Scala for Backend Engineering & Functional Programming Sayfasına Dön