if ile Süzme
Comprehension'larda koruyucular
if ile Sü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.
For-anlamlandırmalarında Koşul Denetimleri
Bir for-anlamlandırması içinde if koşulu ekleyebilirsiniz; buna koşul denetimi denir. Tıpkı filter gibi yalnızca koşulu sağlayan öğeleri tutar.
object Main {
def main(args: Array[String]): Unit = {
val evens = for (x <- 1 to 10 if x % 2 == 0) yield x
println(evens)
}
}Koşul denetimleri withFilter işlemine sadeleştirilir
if cond koşul denetimi, withFilter çağrısına yeniden yazılır (filter işleminin tembel bir çeşididir).
for (x <- xs if p(x)) yield x- şuna dönüşür:
xs.withFilter(p).map(x => x)
object Main {
def main(args: Array[String]): Unit = {
val sugar = for (x <- List(1, 2, 3, 4) if x > 2) yield x
val desugared = List(1, 2, 3, 4).withFilter(_ > 2).map(x => x)
println(sugar == desugared)
}
}Neden filter değil de withFilter?
withFilter tembel çalışır: ara bir koleksiyon oluşturmaz. Koşul yalnızca sonraki map veya flatMap çalıştığında uygulanır; bu da bellek ve işlem tasarrufu sağlar.
object Main {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5, 6)
val result = for (n <- nums if n % 3 == 0) yield n * 100
println(result)
}
}Birden Çok Koşul Denetimi
Birden fazla koşul denetimini zincirleyebilirsiniz. Bunlar mantıksal AND gibi birleşir: bir öğenin kalabilmesi için tüm koşulları sağlaması gerekir.
object Main {
def main(args: Array[String]): Unit = {
val result = for {
x <- 1 to 20
if x % 2 == 0
if x % 3 == 0
} yield x
println(result)
}
}Birden Çok Üreticiyle Koşul Denetimleri
Koşul denetimleri herhangi bir üreticiden sonra yer alabilir ve yinelemenin o düzeyini filtreler. Koşul denetimini, değerlerini sınadığı üreticinin hemen arkasına yerleştirin.
object Main {
def main(args: Array[String]): Unit = {
val coprimeSums = for {
x <- 1 to 3
y <- 1 to 3
if x != y
} yield (x, y)
println(coprimeSums)
}
}Koşul Denetimi ile Değer Bağlamasını Birleştirme
Koşul denetimlerini (if) değer bağlamalarıyla (=) serbestçe karıştırabilirsiniz. Sıra önemlidir: bir koşul denetiminden önce tanımlanan bağlama, o koşul denetimi içinde başvurulabilir.
object Main {
def main(args: Array[String]): Unit = {
val result = for {
x <- 1 to 6
square = x * x
if square > 10
} yield square
println(result)
}
}String Koleksiyonlarında Koşul Denetimleri
Koşul denetimleri yalnızca sayısal olanlarla sınırlı değildir; her yüklemle çalışır. Burada sözcükleri uzunluklarına göre filtreliyoruz.
object Main {
def main(args: Array[String]): Unit = {
val words = List("scala", "go", "java", "rust", "c")
val longWords = for (w <- words if w.length >= 4) yield w.toUpperCase
println(longWords)
}
}Option'ları Filtreleme
Bir Option için başarısız olan bir koşul denetimi sonucu None yapar. Bu, for-anlamlandırmalarını isteğe bağlı değerleri doğrulamak için temiz bir yöntem hâline getirir.
object Main {
def main(args: Array[String]): Unit = {
val ok = for (x <- Some(8) if x > 5) yield x
val bad = for (x <- Some(3) if x > 5) yield x
println(ok)
println(bad)
}
}Koşul Denetiminin Konumu Anlamı Değiştirir
Bir guard yalnızca kendisinden önce bağlanan değerleri görür. İhtiyaç duyduğu bir üreticiden önce yerleştirilirse derlenmez. Guard'ı her zaman ilgili üreticiden sonra yerleştirin.
object Main {
def main(args: Array[String]): Unit = {
val result = for {
x <- 1 to 3
y <- 1 to 3
if x + y == 4
} yield s"$x + $y = ${x + y}"
result.foreach(println)
}
}Guard'lar ve sondaki filter
Sonucu for-comprehension'dan sonra filter ile süzebilirsiniz; ancak bir guard, yineleme sırasında filtreleme yapar. Birden çok üretici olduğunda guard'lar dalları erkenden eleyerek toplamda daha az iş yapılmasını sağlayabilir.
object Main {
def main(args: Array[String]): Unit = {
val withGuard = for {
x <- 1 to 100
if x % 25 == 0
} yield x
println(withGuard)
}
}Okunabilir doğrulama işlem hatları
Guard'ları art arda eklemek, koşulların bir kontrol listesi gibi okunmasını sağlar. Bu, gerçek Scala kodunda for-comprehension'ların en deyimsel kullanımlarından biridir.
object Main {
def main(args: Array[String]): Unit = {
val valid = for {
n <- List(4, 7, 12, 15, 20)
if n > 5
if n < 18
if n % 2 == 0
} yield n
println(valid)
}
}Kısa Kontrol
Bir for-comprehension içindeki guard (if) hangi yönteme dönüştürülür?
Özet
For-comprehension'larda guard'ları öğrendiniz:
if cond, yineleme sırasında öğeleri filtreler- Guard'lar
withFilter'a (tembel filtrelemeye) dönüştürülür - Birden çok guard, mantıksal AND gibi birleşir
- Bir guard yalnızca kendisinden önce bağlanan değerleri görür
- Guard'lar, üreticiler ve
=bağlamalarıyla serbestçe birlikte kullanılabilir
Sıkça Sorulan Sorular
“if ile Süzme” dersi ücretsiz mi?
Evet — “if ile Sü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.
“if ile Süzme” dersinde ne öğreneceğim?
Comprehension'larda koruyucular 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.
“if ile Sü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.