0Pricing
Scala for Backend Engineering & Functional Programming · Ders

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.

Bu kursun tüm dersleri

  1. for Yapısını Açma
  2. if ile Süzme
  3. Birden Çok Üretici
  4. Option ve Future ile Kullanım
← Scala for Backend Engineering & Functional Programming Sayfasına Dön