Türler Arasında Dönüştürme
Option, Either, Try
Türler Arasında Dönüştürme, 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.
Üç hata modeli
Scala, yokluk ve başarısızlık için birbirini tamamlayan üç tür sunar:
Option— varlık veya yokluk (neden belirtilmez).Either— başarı veya türü belirtilmiş hata.Try— başarı veya fırlatılmış istisna.
Bunlar arasında nasıl dönüşüm yapılacağını bilmek, bir API'yi diğerine uyarlamanızı sağlar.
Option'dan Either'a
toRight, bir Option'ı Either'a dönüştürür ve None durumu için bir Left hatası sağlar. toLeft ise eşlemeyi ters yönde yapar.
@main def run(): Unit = {
val some: Option[Int] = Some(5)
val none: Option[Int] = None
println(some.toRight("missing"))
println(none.toRight("missing"))
}Either'dan Option'a
toOption hatayı yok sayar: Right(x), Some(x)'e; Left(_) ise None'a dönüşür. Başarısızlığın nedeninin artık önemli olmadığı durumlarda bunu kullanın.
@main def run(): Unit = {
val r: Either[String, Int] = Right(42)
val l: Either[String, Int] = Left("err")
println(r.toOption)
println(l.toOption)
}Try'dan Option'a
Try.toOption, bir Success'ı Some'a, bir Failure'ı ise istisnayı yutarak None'a dönüştürür.
import scala.util.Try
@main def run(): Unit = {
println(Try("7".toInt).toOption)
println(Try("x".toInt).toOption)
}Try'dan Either'a
Try.toEither, bir Either[Throwable, T] üretir: Success, Right'a; Failure ise Left(throwable)'a dönüşür. Böylece istisna, türü belirli bir sol değer olarak korunur.
import scala.util.Try
@main def run(): Unit = {
val ok = Try("7".toInt).toEither
val no = Try("x".toInt).toEither
println(ok)
println(no.left.map(_.getMessage))
}Either'dan Try'a
Basit bir hatayla Either'dan Try'a doğrudan yerleşik bir dönüşüm yoktur; ancak bunu kendiniz oluşturabilirsiniz: bir Right'ı Success içine, bir Left'i ise istisna taşıyan bir Failure içine sarın.
import scala.util.{Try, Success, Failure}
object Main {
def toTry(e: Either[String, Int]): Try[Int] = e match {
case Right(v) => Success(v)
case Left(m) => Failure(new RuntimeException(m))
}
def main(args: Array[String]): Unit = {
println(toTry(Right(1)))
println(toTry(Left("bad")))
}
}Option'dan Try'a
Boş durum için bir istisna seçerek bir Option'ı Try'a dönüştürün. Bu, bir API'nin Try beklediği durumlarda kullanışlıdır.
import scala.util.{Try, Success, Failure}
object Main {
def toTry[A](o: Option[A]): Try[A] = o match {
case Some(v) => Success(v)
case None => Failure(new NoSuchElementException("empty"))
}
def main(args: Array[String]): Unit = {
println(toTry(Some(9)))
println(toTry(None))
}
}Bir İşlem Hattını Normalleştirme
Türleri karıştırmak sorunlara yol açar. Yaygın bir yaklaşım, her şeyi erken aşamada tek tip bir hata türüne sahip Either'a dönüştürmek ve ardından serbestçe birleştirmektir.
import scala.util.Try
object Main {
def parse(s: String): Either[String, Int] =
Try(s.toInt).toEither.left.map(_ => s"invalid: $s")
def lookup(n: Int): Either[String, String] =
Map(1 -> "one", 2 -> "two").get(n).toRight(s"no entry for $n")
def main(args: Array[String]): Unit = {
val result = for {
n <- parse("2")
w <- lookup(n)
} yield w
println(result)
}
}Türler Arasında getOrElse
Her üç tür de bir değeri almak veya varsayılan bir değer sağlamak için getOrElse'ı destekler. Bu, genellikle hata işleme dünyasından çıkılan son adımdır.
import scala.util.Try
@main def run(): Unit = {
val a = Some(1).getOrElse(0)
val b = (Right(2): Either[String, Int]).getOrElse(0)
val c = Try("x".toInt).getOrElse(0)
println(s"$a $b $c")
}Doğru Türü Seçme
Yönergeler:
- Yokluğun açıklama gerektirmediği durumlarda Option kullanın.
- Alana özgü bir hata değeri istediğinizde Either kullanın.
- İstisna fırlatan Java/kütüphane koduyla sınır noktalarında Try kullanın.
Baştan Sona Örnek
İstisna fırlatan kodu Try ile okumak, alan hataları için Either'a dönüştürmek ve son olarak yalnızca değerin varlığıyla ilgilenen bir çağıran için Option'a dönüştürmek.
import scala.util.Try
object Main {
def safeDiv(a: Int, b: Int): Option[Int] =
Try(a / b).toEither.left.map(_ => "math error").toOption
def main(args: Array[String]): Unit = {
println(safeDiv(10, 2))
println(safeDiv(10, 0))
}
}Kısa Kontrol
Dönüştürme bilginizi sınayın.
Özet
Option, Either ve Try arasında dönüşüm yapmayı öğrendiniz:
Option.toRight→ Either;Either.toOption→ Option.Try.toOptionveTry.toEither, istisnalar ile değerler arasında köprü kurar.- Bir işlem hattını erken aşamada tek bir hata türüne normalleştirin.
- İhtiyaç duyduğunuz hata ayrıntısının düzeyine uygun türü seçin.
Sıkça Sorulan Sorular
“Türler Arasında Dönüştürme” dersi ücretsiz mi?
Evet — “Türler Arasında Dönüştürme” 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ürler Arasında Dönüştürme” dersinde ne öğreneceğim?
Option, Either, Try 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.
“Türler Arasında Dönüştürme” 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
- Hatalar için Either
- Try, Success, Failure
- Either Birleştirme
- Türler Arasında Dönüştürme