Fonksiyonel programlama
- İngilizcesi
- Functional Programming
- Türkçe karşılığı
- işlevsel programlama
- Okunuşu
- fankşınıl progreming
Kısaca
Fonksiyonel programlama, paylaşılan verileri değiştirmeyen saf fonksiyonlarla yazılım kurma stilidir; kodu daha öngörülebilir ve test etmesi kolay yapar.
Fonksiyonel programlama nedir?
Çoğunlukla FP olarak kısaltılan fonksiyonel programlama, programları esas olarak girdi alıp başka hiçbir şeyi etkilemeden çıktı döndüren fonksiyonlarla kurar. Değişkenleri ve nesneleri adım adım değiştirmek yerine, verinin bir biçimden diğerine nasıl dönüştürüldüğünü tarif edersiniz. Yaklaşımın kökleri matematikte ve Lisp ile Haskell gibi dillerdedir, ancak fikirleri artık JavaScript, Python, Kotlin, Scala ve Rust'ta yaygındır.
Birkaç temel fikir bu stili tanımlar. Saf fonksiyonlar aynı girdi için her zaman aynı çıktıyı döndürür ve global bir değişkeni değiştirmek ya da bir veritabanına yazmak gibi yan etkileri yoktur. Değişmezlik (immutability), verinin asla yerinde değiştirilmemesi, bunun yerine yeni ve güncellenmiş bir kopya oluşturulması demektir. Diğer fonksiyonları alan ya da döndüren yüksek dereceli fonksiyonlar (higher-order functions), örneğin map, filter ve reduce, küçük fonksiyonları birleştirerek daha büyük davranışlar kurmanızı sağlar.
Montaj hattı yararlı bir benzetmedir: her istasyon bir öğe alır, iyi tanımlanmış tek bir iş yapar ve önceki istasyonları değiştirmek için geriye uzanmadan yeni bir sonucu bir sonraki istasyona iletir. Saf fonksiyonlar gizli duruma bağlı olmadığı için test etmesi, yeniden kullanması ve paralel çalıştırması kolaydır. React bileşenleri ve Redux gibi durum yönetimi kütüphaneleri bu fikirlerden büyük ölçüde yararlanır.
Fonksiyonel programlama genellikle değişen durumu ve davranışı nesnelerin içinde birleştiren nesne yönelimli programlamayla ve her adımı ayrıntılı yazıp değişkenleri ilerledikçe güncelleyen buyurgan (imperative) programlamayla karşılaştırılır. Bu stiller birbirini dışlamaz ve gerçek dünyadaki kodların çoğu bunları karıştırır. Gerçek programların dosya kaydetmek ya da API çağırmak gibi yan etkilere yine de ihtiyacı vardır; bu yüzden fonksiyonel kod bunları ortadan kaldırmak yerine programın kenarlarına itme eğilimindedir.
Önemli noktalar
- Fonksiyonel programlama, yazılımı yan etkisiz saf fonksiyonlarla kurar.
- Veri değişmez kabul edilir: mevcut değerleri değiştirmek yerine yeni değerler oluşturulur.
map,filtervereducegibi yüksek dereceli fonksiyonlar küçük fonksiyonları daha büyüklerde birleştirir.- Saf kodu test etmek, üzerinde akıl yürütmek ve paralel çalıştırmak daha kolaydır.
- Bir dil özelliği değil bir stildir ve çoğu zaman nesne yönelimli kodla karıştırılır.
Örnek
const orders = [
{ item: "book", price: 12, paid: true },
{ item: "lamp", price: 30, paid: false },
{ item: "pen", price: 3, paid: true },
];
// Imperative style: update a variable step by step
let total = 0;
for (const order of orders) if (order.paid) total += order.price;
// Functional style: pure transformations, nothing is modified
const paidTotal = orders
.filter((order) => order.paid)
.map((order) => order.price)
.reduce((sum, price) => sum + price, 0); // 15Sık sorulan sorular
Saf fonksiyon (pure function) nedir?
Saf fonksiyon, aynı argümanlar için her zaman aynı sonucu döndürür ve yan etkisi yoktur; yani dışarıdaki değişkenleri değiştirmez, girdilerini değiştirmez ve girdi/çıktı işlemi yapmaz. Math.max saftır; geçerli saati okuyan ya da bir veritabanına yazan bir fonksiyon ise saf değildir.
JavaScript fonksiyonel bir programlama dili midir?
JavaScript çok paradigmalı bir dildir. Birinci sınıf fonksiyonlar, closure'lar ve map ile reduce gibi dizi metotlarıyla fonksiyonel programlamayı iyi destekler; ancak nesne yönelimli ve buyurgan stilleri de destekler.
Fonksiyonel programlama ile OOP arasındaki fark nedir?
Nesne yönelimli programlama, veriyi onu değiştiren metotlarla birlikte nesnelerin içinde gruplar. Fonksiyonel programlama ise veriyi ayrı ve değişmez tutar ve saf fonksiyonlarla dönüştürür; birçok kod tabanı her iki yaklaşımı da birleştirir.
Sık karşılaştırılanlar
İlgili sayfalar
- FonksiyonProgramlamanın Temelleri, s. 20Fonksiyon, belirli bir işi yapan, isteğe bağlı olarak parametre denen girdiler alıp sonuç döndürebilen, adlandırılmış ve yeniden kullanılabilir kod bloğudur.
- ClosureProgramlamanın Temelleri, s. 6Closure, oluşturulduğu kapsamdaki değişkenleri hatırlayan bir fonksiyondur; dıştaki fonksiyon sona erdikten sonra bile bu değişkenleri kullanabilir.
- OOPProgramlamanın Temelleri, s. 41OOP, yani nesne yönelimli programlama, kodu ilişkili verileri onlar üzerinde işlem yapan fonksiyonlarla birleştiren nesneler etrafında düzenleme yöntemidir.
- ÖzyinelemeProgramlamanın Temelleri, s. 42Özyineleme, bir fonksiyonun sorunu, basit bir temel duruma ulaşana dek aynı sorunun daha küçük sürümleri için kendisini çağırarak çözdüğü tekniktir.
- ReactWeb Geliştirme, s. 37React, veri değişince otomatik güncellenen, yeniden kullanılabilir bileşenlerle kullanıcı arayüzü kurmaya yarayan açık kaynaklı JavaScript kütüphanesidir.
- EşzamanlılıkProgramlamanın Temelleri, s. 19Eşzamanlılık, bir programın birden çok görevde örtüşen zaman dilimlerinde ilerleyebilme yeteneğidir; örneğin birçok kullanıcıya aynı anda hizmet vermek gibi.
Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin