0Pricing
Scala for Backend Engineering & Functional Programming · Ders

Case Class'lara Kod Çözme

JSON'u kendi türlerinize eşleyin.

Case Class'lara Kod Çözme, 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.

Kod Çözücüler JSON'ı Türlere Eşler

Bir Decoder[A], bir Json değerini Scala'daki A türüne okumayı bilir.

Circe, temel türler ve koleksiyonlar için kod çözücüleri hazır olarak sağlar; ayrıca kendi durum sınıflarınız için otomatik olarak kod çözücüler oluşturabilir.

Hedef Durum Sınıfı

API'nizin kullanıcı kayıtları döndürdüğünü varsayalım. JSON anahtarlarıyla eşleşen alan adlarına sahip bir durum sınıfıyla yapıyı modelleyin.

Adların eşleşmesi, Circe'nin elle bağlantı kurmadan bir kod çözücü türetmesini sağlar.

case class User(name: String, age: Int, admin: Boolean)

Otomatik Türetme

io.circe.generic.auto._ içe aktarın; Circe, ihtiyaç duyulan her yerde talep üzerine örtük olarak bir Decoder[User] türetir.

Ardından ek gereksiz kod yazmadan decode[User] çağırabilirsiniz.

import io.circe.generic.auto._
import io.circe.parser.decode

val json = "{\"name\":\"Ada\",\"age\":36,\"admin\":true}"
val user = decode[User](json)
println(user)  // Right(User(Ada,36,true))

Yarı Otomatik Türetme

Daha iyi derleme süreleri ve açık denetim için io.circe.generic.semiauto.deriveDecoder kullanın.

Kod çözücüyü genellikle eşlik eden nesnede bir kez tanımlar ve bu tek örneği her yerde yeniden kullanırsınız.

import io.circe.Decoder
import io.circe.generic.semiauto._

object User {
  implicit val dec: Decoder[User] = deriveDecoder[User]
}

Kod Çözme Hataları

Zorunlu bir alan eksikse veya yanlış türdeyse kod çözme işlemi DecodingFailure ile başarısız olur.

Hata, imleç işlemlerinin bir geçmişini taşır ve soruna tam olarak hangi alanın yol açtığını gösterir.

val bad = decode[User]("{\"name\":\"Ada\"}")
println(bad)
// Left(DecodingFailure at .age: Missing required field)

Sınıflardaki İsteğe Bağlı Alanlar

JSON anahtarı eksik veya null olabilecekse bir alanı Option[A] yapın.

Circe, eksik bir anahtarı otomatik olarak None değerine kodunu çözer; bu nedenle yalnızca isteğe bağlılık için özel bir kod çözücü yazmanız gerekmez.

case class Account(id: Long, nickname: Option[String])

val a = decode[Account]("{\"id\":7}")
println(a)  // Right(Account(7,None))

Varsayılan Değerler

Durum sınıfının varsayılan değerleri eksik JSON anahtarlarını doldurabilir; ancak bu yalnızca varsayılanları etkinleştiren yapılandırılmış türetmeyle türetim yaptığınızda geçerlidir.

circe-generic-extras modülü bunu Configuration.default.withDefaults aracılığıyla sağlar.

import io.circe.generic.extras._

implicit val cfg: Configuration =
  Configuration.default.withDefaults

@ConfiguredJsonCodec
case class Settings(theme: String = "dark")

İç İçe Durum Sınıfları

Kod çözme işlemi birleşimlidir: Circe her alanın türünün kodunu çözebiliyorsa, başka durum sınıflarını içeren bir sınıfın da kodunu çözebilir.

Türetme işlemi otomatik olarak iç içe devam eder; böylece tek bir içe aktarma, derinlemesine iç içe yapıları ele alır.

case class Address(city: String)
case class Person(name: String, address: Address)

val p = decode[Person](
  "{\"name\":\"Ada\",\"address\":{\"city\":\"London\"}}")
println(p)

Alanları Yeniden Adlandırma

JSON anahtarları Scala adlarından farklı olduğunda (örneğin snake_case), Configuration.default.withSnakeCaseMemberNames ile yapılandırılmış türetmeyi kullanın.

Bu, created_at anahtarını elle yazılmış bir kod çözücüye gerek kalmadan Scala alanı createdAt ile eşler.

import io.circe.generic.extras._

implicit val cfg: Configuration =
  Configuration.default.withSnakeCaseMemberNames

@ConfiguredJsonCodec
case class Event(createdAt: String)

Hataları Biriktirme

Varsayılan olarak kod çözme işlemi ilk hatada durur. decodeAccumulating ise bunun yerine tüm hataları bir ValidatedNel içinde toplar.

Bu, tüm sorunları aynı anda bildirmek istediğiniz form doğrulama işlemlerinde kullanışlıdır.

import io.circe.Decoder

val result = Decoder[User]
  .decodeAccumulating(json.hcursor)
// Validated[NonEmptyList[DecodingFailure], User]

Türetme Tarzını Seçme

Hızlı prototipler için auto, sabit örnekler ve daha hızlı derlemeler istediğiniz üretim kodu için semiauto kullanın.

Yeniden adlandırma, varsayılan değerler veya ayırt ediciler gerektiğinde generic-extras'a başvurun.

Kısa Kontrol

Durum sınıflarına kod çözme konusundaki anlayışınızı sınayın.

Özet

Bir Decoder[A], JSON'ı türü belirli değerlere dönüştürür. Anahtar adlarıyla eşleşen durum sınıfları için generic.auto veya semiauto.deriveDecoder kullanın.

Eksik anahtarlar, Option alanlarına None olarak kod çözülür; generic-extras varsayılan değerler ve yeniden adlandırma ekler; decodeAccumulating ise tüm hataları toplar.

Sıkça Sorulan Sorular

“Case Class'lara Kod Çözme” dersi ücretsiz mi?

Evet — “Case Class'lara Kod Çözme” 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.

“Case Class'lara Kod Çözme” dersinde ne öğreneceğim?

JSON'u kendi türlerinize eşleyin. 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.

“Case Class'lara Kod Çözme” 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. JSON Ayrıştırma
  2. Case Class'lara Kod Çözme
  3. JSON'a Kodlama
  4. Özel Kodlayıcılar
← Scala for Backend Engineering & Functional Programming Sayfasına Dön