Hatalar için Option, Try ve Either
Değerin yokluğunu belirtmek için `Seçenek`, özel durumlar için `Deneme`, farklı başarısızlık ve başarı yolları için `Either` kullanarak sağlam hata işleme uygulayın.
Hatalar için Option, Try ve Either, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 3 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 3 dersten oluşur.
Hataları Sorunsuzca Yönetme
Programlamada işler her zaman planlandığı gibi gitmez. Dosyalar mevcut olmayabilir, ağ istekleri başarısız olabilir veya hesaplamalar geçersiz sonuçlara yol açabilir.
- Bu durumları sorunsuzca yönetebilen sağlam kodu nasıl yazarız?
- Scala, her yerde `null` kullanmaya veya istisnalar fırlatmaya başvurmadan hataları ve eksik değerleri yönetmek için güçlü araçlar sunar.
Null Sorunu
Birçok dil, bir değerin yokluğunu belirtmek için null kullanır. Ancak null, korkulan NullPointerException gibi hataların yaygın bir kaynağıdır.
Scala, null kullanımını önermez. Bunun yerine bir değerin eksik olabileceğini açıkça belirten türler sunar; böylece kodunuz daha güvenli ve anlaşılır olur.
Scala Option'a Giriş
Option[A], A türünde bir değer (Some[A] ile gösterilir) veya hiçbir değer (None ile gösterilir) barındırabilen bir kapsayıcıdır.
- Bir değerin bulunmayabileceği durumu göz önünde bulundurmanızı zorunlu kılar.
- Bu, beklenmeyen
NullPointerExceptionsoluşmasını önler ve kodunuzu daha açık hâle getirir.
Uygulamada Option: Some ve None
Option'ın nasıl çalıştığını görelim. Bir ID'ye bağlı olarak bir ad döndürebilen veya döndürmeyebilen bir işlev tanımlayacağız.
object Main {
def findUser(id: Int): Option[String] = {
if (id == 1) Some("Alice")
else None
}
def main(args: Array[String]): Unit = {
val user1 = findUser(1) // Some("Alice")
val user2 = findUser(2) // None
println(s"User 1: $user1")
println(s"User 2: $user2")
}
}Option ile Çalışma: map ve getOrElse
Bir Option içindeki değeri map kullanarak dönüştürebilir veya değer None olduğunda getOrElse ile varsayılan bir değer sağlayabilirsiniz.
object Main {
def findUser(id: Int): Option[String] = {
if (id == 1) Some("Alice")
else None
}
def main(args: Array[String]): Unit = {
val userGreeting = findUser(1).map(name => s"Hello, $name!")
val defaultGreeting = findUser(2).map(name => s"Hello, $name!").getOrElse("Hello, Guest!")
println(s"User greeting: $userGreeting")
println(s"Default greeting: $defaultGreeting")
}
}Scala Try'a Giriş
Option eksik değerleri ele alırken Try[A], istisna fırlatabilecek hesaplamaları ele almak için tasarlanmıştır.
- Bir
Try, hesaplama normal şekilde tamamlanırsaSuccess[A], bir istisna oluşursaFailure[Throwable]olabilir. - İstisnaları kapsüller ve bunlarla işlevsel bir biçimde ilgilenmenizi sağlar.
Uygulamada Try: Success ve Failure
Bir istisna (örneğin sıfıra bölme) fırlatabilecek bir işlev tanımlayalım ve yürütülmesini bir Try içine alalım.
import scala.util.{Try, Success, Failure}
object Main {
def divide(a: Int, b: Int): Try[Int] = Try {
a / b
}
def main(args: Array[String]): Unit = {
val result1 = divide(10, 2) // Success(5)
val result2 = divide(10, 0) // Failure(java.lang.ArithmeticException: / by zero)
println(s"Result 1: $result1")
println(s"Result 2: $result2")
}
}Try ile Çalışma: recover ve fold
Try, belirli istisnaları ele almak için recover veya hem başarı hem de başarısızlık durumlarını düzenli biçimde işlemek için fold gibi yöntemler sunar.
import scala.util.{Try, Success, Failure}
object Main {
def parseNumber(s: String): Try[Int] = Try(s.toInt)
def main(args: Array[String]): Unit = {
val num1 = parseNumber("123").getOrElse(0)
val num2 = parseNumber("abc").getOrElse(0)
val message = parseNumber("456").fold(
ex => s"Failed to parse: ${ex.getMessage}",
num => s"Parsed number: $num"
)
println(s"Parsed num1: $num1")
println(s"Parsed num2: $num2")
println(s"Message: $message")
}
}Scala Either'a Giriş
Either[L, R], iki olası değerden birini temsil eden bir türdür. Geleneksel olarak:
Left[L]bir başarısızlığı (veyaLhata türünü) temsil eder.Right[R]bir başarıyı (veyaRsonuç türünü) temsil eder.
Try'ın aksine Either, hatanız için yalnızca Throwable yerine anlamlı bir tür belirtmenize olanak tanır.
Uygulamada Either: Left ve Right
Burada bir e-postayı doğrulayan bir işlev bulunuyor. İşlev, bir String hata iletisi (Left) veya doğrulanmış e-postayı (Right) döndürür.
object Main {
def validateEmail(email: String): Either[String, String] = {
if (email.contains("@") && email.contains(".")) Right(email)
else Left("Invalid email format")
}
def main(args: Array[String]): Unit = {
val email1 = validateEmail("test@example.com") // Right("test@example.com")
val email2 = validateEmail("invalid-email") // Left("Invalid email format")
println(s"Email 1: $email1")
println(s"Email 2: $email2")
}
}Hızlı Denetim: Hata Yönetimi
Bir eşlemden yapılandırma değeri okuyan bir işlev yazıyorsunuz. Anahtar mevcutsa dize değerini bir tamsayıya dönüştürmek istiyorsunuz. Anahtar eksikse veya dönüştürme başarısız olursa 0 varsayılan değerini döndürmek istiyorsunuz.
Bu görev için hangi Scala türleri ve yöntemleri birleşimi en uygun olur?
Tekrar: Option, Try, Either
Sağlam hata yönetimi için üç güçlü Scala türünü inceledik:
Option[A]: Bir değerin yokluğunu ele almak için (Some[A]veyaNone).Try[A]: İstisna fırlatabilecek hesaplamaları kapsüllemek için (Success[A]veyaFailure[Throwable]).Either[L, R]: Genellikle bir başarısızlık türüLve bir başarı türüRolmak üzere iki farklı sonucu temsil etmek için (Left[L]veyaRight[R]).
Bu türleri kullanmak Scala kodunuzu daha güvenli, daha açık ve daha işlevsel hâle getirir!
Sıkça Sorulan Sorular
“Hatalar için Option, Try ve Either” dersi ücretsiz mi?
Evet — “Hatalar için Option, Try ve Either” 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 3 dersten oluşur.
“Hatalar için Option, Try ve Either” dersinde ne öğreneceğim?
Değerin yokluğunu belirtmek için `Seçenek`, özel durumlar için `Deneme`, farklı başarısızlık ve başarı yolları için `Either` kullanarak sağlam hata işleme uygulayın. 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, 3 dersinin 3. dersidir.
“Hatalar için Option, Try ve Either” 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
- Değişmez Koleksiyonları Derinlemesine İnceleme
- Koleksiyonlarda İşlevsel İşlemler
- Hatalar için Option, Try ve Either