Rust’ta Fonksiyonel Programlamaya Giriş
Merhaba! Fatih Soysal olarak, bugün sizlerle Rust programlama dilinde fonksiyonel programlamanın inceliklerini keşfedeceğiz. Rust, performansıyla bilinen bir dil olsa da, güçlü fonksiyonel programlama yeteneklerine de sahiptir. Bu makalede, Rust’ın fonksiyonel özelliklerini ayrıntılı olarak ele alacağız ve örneklerle pekiştireceğiz. Öncelikle, fonksiyonel programlamanın temel kavramlarını hatırlayalım.
Fonksiyonel Programlamanın Temel Kavramları
Fonksiyonel programlama, verinin değiştirilmesi yerine, yeni verilerin oluşturulmasına odaklanır. Bu, yan etkisiz (side-effect free) fonksiyonların kullanımıyla sağlanır. Yan etkisiz bir fonksiyon, sadece girdi değerlerine bağlı olarak çıktı üretir ve global değişkenleri veya dış dünyayı etkilemez. Örneğin, bir listeyi sıralayan bir fonksiyon, orijinal listeyi değiştirmek yerine, sıralanmış yeni bir liste döndürür. Bu yaklaşım, kodun daha okunabilir, test edilebilir ve paralel hale getirilmesini kolaylaştırır.
Rust’ta fonksiyonel programlama, yüksek dereceli fonksiyonlar (higher-order functions), fonksiyonel koleksiyon metodları (iterators) ve closure’lar (kapalı fonksiyonlar) aracılığıyla gerçekleştirilir. Şimdi, bu kavramları detaylı olarak inceleyelim.
Yüksek Dereceli Fonksiyonlar
Yüksek dereceli fonksiyonlar, diğer fonksiyonları argüman olarak alabilir veya fonksiyon döndürebilir. Bu, kodun tekrar kullanımını azaltır ve daha modüler bir yapı oluşturur. İşte basit bir örnek:
fn apply(f: F, x: T) -> T
where
F: FnOnce(T) -> T,
{
f(x)
}
fn main() {
let num = 5;
let doubled = apply(|x| x * 2, num); // Lambda fonksiyonu kullanımı
println!("Doubled: {}", doubled);
}
Bu örnekte, apply fonksiyonu, başka bir fonksiyonu (burada bir lambda fonksiyonu) argüman olarak alır ve uygular.
İteratörler (Iterators)
Rust’taki iteratörler, koleksiyonlar üzerinde yinelemeyi sağlayan güçlü bir araçtır. map, filter, fold gibi fonksiyonel metodlar, verileri işlemeyi kolaylaştırır ve kodun okunabilirliğini artırır.
fn main() {
let numbers = vec![1, 2, 3, 4, 5];
let doubled_numbers: Vec = numbers.iter().map(|&x| x * 2).collect();
println!("Doubled numbers: {:?}", doubled_numbers);
}
Bu örnekte, map metodu, her bir sayıyı ikiyle çarparak yeni bir vektör oluşturur. collect metodu ise, sonuçları bir vektör halinde toplar.
Closure’lar (Kapalı Fonksiyonlar)
Closure’lar, çevresindeki değişkenlere erişebilen anonim fonksiyonlardır. Bu, kodun daha özlü ve okunabilir olmasını sağlar. Yüksek dereceli fonksiyonlarla birlikte sıkça kullanılırlar.
Örneğin, önceki apply fonksiyonunda kullanılan lambda fonksiyonu bir closure’dır.
Sonuç
Rust’ın fonksiyonel programlama özellikleri, kodun daha güvenilir, okunabilir ve sürdürülebilir olmasını sağlar. Bu makalede ele aldığımız yüksek dereceli fonksiyonlar, iteratörler ve closure’lar, Rust’ta fonksiyonel programlamanın temel taşlarıdır. Daha fazla bilgi edinmek için, Rust resmi dokümanlarını inceleyebilirsiniz. Ayrıca, Rust ile ilgili daha fazla makale için web sitemi ziyaret edebilirsiniz. Umarım bu makale, Rust’ta fonksiyonel programlamaya başlamanız için size yardımcı olmuştur.
Not: Bu makale, bu makaleden esinlenerek yazılmıştır.
#Etiketler
Rust, Fonksiyonel Programlama, Yüksek Dereceli Fonksiyonlar, İteratörler, Closure’lar, Rust Örnekleri, Programlama Dili, Fonksiyonel Programlama Kavramları, Rust Dokümanları