Üst Düzey İşlevler ve Kısmi Uygulama
Esnek ve yeniden kullanılabilir kod oluşturmak için üst düzey işlevler ve kısmi uygulama gibi gelişmiş işlevsel kavramları keşfedin.
Üst Düzey İşlevler ve Kısmi Uygulama, CoddyKit'te ücretsiz bir Scala for Backend Engineering & Functional Programming dersidir. Bu, 3 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 3 dersten oluşur.
Yüksek Dereceli İşlevlerin Kilidini Açma
2. Derse hoş geldiniz! İşlevsel programlamada işlevler güçlü araçlardır. Yalnızca değerleri hesaplamak için kullanılmazlar; diğer veriler gibi ele de alınabilirler.
Bu, işlevlerin diğer işlevlere bağımsız değişken olarak geçirilebileceği veya onlardan sonuç olarak döndürülebileceği anlamına gelir. Bir işlev bunu yaptığında ona Yüksek Dereceli İşlev (HOF) denir.
- HOF'lar bir veya daha fazla işlevi bağımsız değişken olarak alır.
- HOF'lar sonuç olarak bir işlev döndürür.
- Ya da her ikisini birden yapar!
Uygulamada HOF: `map`
Scala'daki en yaygın HOF'lardan biri map işlevdir. Bir koleksiyonun her öğesine verilen bir işlevi uygulayarak öğeleri dönüştürür ve yeni bir koleksiyon döndürür.
Bu basit örneği çalıştırmayı deneyin:
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(1, 2, 3)
val doubledNumbers = numbers.map(x => x * 2)
println(s"Original: $numbers")
println(s"Doubled: $doubledNumbers")
}
}Uygulamada HOF: `filter`
Bir başka kullanışlı HOF da filter işlevdir. Bir koleksiyondan, verilen koşulu (boolean döndüren bir işlevi) karşılayan öğeleri seçerek yeni bir koleksiyon oluşturur.
Çift sayıları bulmak için filter işlevini nasıl kullanabileceğinizi görelim:
object Main {
def main(args: Array[String]): Unit = {
val allNumbers = List(1, 2, 3, 4, 5, 6)
val evenNumbers = allNumbers.filter(x => x % 2 == 0)
println(s"All: $allNumbers")
println(s"Even: $evenNumbers")
}
}Kendi HOF'nizi Tanımlama
Yerleşik HOF'lerle sınırlı değilsiniz! Parametre olarak başka işlevleri kabul eden kendi işlevlerinizi tanımlayabilirsiniz. Bir işlev türünün söz dizimi (InputType => ReturnType) şeklindedir.
Bu örnekte, bir Int ve başka bir işlev olan op'u alan (op, bir Int alır ve bir Int döndürür) applyOperation adlı bir işlev tanımlanmaktadır.
object Main {
// A HOF that applies an operation to a number
def applyOperation(x: Int, op: Int => Int): Int = {
op(x)
}
def main(args: Array[String]): Unit = {
val result = applyOperation(10, _ * 3) // Pass an anonymous function
println(s"Result of 10 * 3: $result")
val anotherResult = applyOperation(7, _ + 5)
println(s"Result of 7 + 5: $anotherResult")
}
}Anonim İşlevler ve Kısa Yazım
İşlevleri HOF'lere aktarırken genellikle anonim işlevler (lambda olarak da adlandırılır) kullanırsınız. Scala bunları yazmak için kısa yollar sunar.
x => x * 2: Tam anonim işlev._ * 2: Tek parametreli anonim işlev için kısa yazım.
Her ikisi de yaygın olarak kullanılır ve kodunuzu daha kısa ve okunabilir hâle getirir.
object Main {
def main(args: Array[String]): Unit = {
val numbers = List(10, 20, 30)
// Using full anonymous function syntax
val dividedByTwo = numbers.map(x => x / 2)
println(s"Divided by two: $dividedByTwo")
// Using shorthand `_` syntax
val plusOne = numbers.map(_ + 1)
println(s"Plus one: $plusOne")
}
}Currying'e Giriş
Currying, birden fazla bağımsız değişken alan bir işlevi, her biri tek bir bağımsız değişken alan işlevler dizisine dönüştüren bir tekniktir.
Adı, mantıkçı Haskell Curry'den gelir. Scala'da birden fazla parametre listesine sahip işlevler otomatik olarak currying uygulanmış hâle gelir.
f(arg1, arg2) yerine f(arg1)(arg2) yazarsınız.
Currying Örneği: Birden Fazla Parametre Listesi
Currying'in nasıl çalıştığına bakalım. add işlevinin bağımsız değişkenlerini iki ayrı parametre listesinde aldığına dikkat edin.
Bu, işlevi kısmen uygulamanıza ve bazı bağımsız değişkenleri sabitleyerek yeni işlevler oluşturmanıza olanak tanır.
object Main {
// A curried function with two parameter lists
def add(a: Int)(b: Int): Int = {
a + b
}
def main(args: Array[String]): Unit = {
// Call the function normally
println(s"5 + 3 = ${add(5)(3)}")
// Partially apply the first argument
val addFive = add(5)_ // `_` tells Scala to treat it as a partially applied function
println(s"5 + 10 = ${addFive(10)}")
println(s"5 + 20 = ${addFive(20)}")
}
}Currying'in Faydaları
Currying neden kullanılır? İşlevsel programlamada çeşitli avantajlar sunar:
- Kısmi Uygulama: Bazı bağımsız değişkenleri sabitleyerek bir işlevin özelleştirilmiş sürümlerini oluşturun. Bu, kodun yeniden kullanımını artırır.
- İşlev Birleştirme: Currying uygulanmış işlevleri başka işlevlerle birleştirmek çoğu zaman daha kolaydır.
- Tür Çıkarımı: Özellikle karmaşık genel türlerle çalışırken Scala'nın tür çıkarımına bazen yardımcı olabilir.
Özel Günlük Tutucular için Currying
Aynı temel mantığı kullanarak farklı düzeyler (ör. INFO, ERROR) için farklı günlük tutma işlevleri oluşturmak istediğinizi düşünün. Currying bunun için idealdir!
Genel bir log işlevi tanımlayabilir ve ardından belirli günlük tutucular oluşturmak için bu işlevi kısmen uygulayabilirsiniz.
object Main {
def log(level: String)(message: String): Unit = {
println(s"[$level] $message")
}
def main(args: Array[String]): Unit = {
// Create specialized loggers using partial application
val infoLogger = log("INFO")_
val errorLogger = log("ERROR")_
infoLogger("User logged in successfully.")
errorLogger("Failed to connect to database!")
}
}Hızlı Kontrol: HOF'ler ve Currying
Aşağıdaki Scala kod parçacığını inceleyin:
def calculate(x: Int)(y: Int, op: (Int, Int) => Int): Int = {
op(x, y)
}
val add = (a: Int, b: Int) => a + b
val multiply = (a: Int, b: Int) => a * b
val result1 = calculate(10)(5, add)
val result2 = calculate(2)(3, multiply)result1 ve result2 değerleri nedir?
Özet: HOF'ler ve Currying
Harika iş çıkardınız! İşlevsel programlamadaki iki güçlü kavramı incelediniz:
- Üst Düzey İşlevler (HOF'ler): Başka işlevleri bağımsız değişken olarak alabilen veya sonuç olarak döndürebilen işlevlerdir.
mapvefiltergibi esnek ve yeniden kullanılabilir kod yazmanızı sağlarlar. - Currying: Birden fazla bağımsız değişken alan bir işlevi, her biri tek bir bağımsız değişken alan işlevler dizisine dönüştüren tekniktir. Kısmi uygulama ve özelleştirilmiş işlevler oluşturma için son derece kullanışlıdır.
Bu kavramlar, ifade gücü yüksek ve modüler Scala kodu yazmanın temelini oluşturur!
Sıkça Sorulan Sorular
“Üst Düzey İşlevler ve Kısmi Uygulama” dersi ücretsiz mi?
Evet — “Üst Düzey İşlevler ve Kısmi Uygulama” 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.
“Üst Düzey İşlevler ve Kısmi Uygulama” dersinde ne öğreneceğim?
Esnek ve yeniden kullanılabilir kod oluşturmak için üst düzey işlevler ve kısmi uygulama gibi gelişmiş işlevsel kavramları keşfedin. 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 2. dersidir.
“Üst Düzey İşlevler ve Kısmi Uygulama” 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
- Birinci Sınıf Değerler Olarak İşlevler
- Üst Düzey İşlevler ve Kısmi Uygulama
- Değişmezlik ve Yan Etkiler