Ana içeriğe geç

Fonksiyonel programlama

İngilizcesi
Functional Programming
Türkçe karşılığı
işlevsel programlama
Okunuşu
fankşınıl progreming
Güncellendi 2 dk okuma

Bu sayfayı paylaşın

Bağlantıyı gönderin, tanımı bağlantısıyla birlikte alıntılayın ya da kendi sitenizde bir kart olarak gösterin.

https://softwaredictionary.org/tr/terimler/functional-programming

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, filter ve reduce gibi 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

JavaScript'te buyurgan ve fonksiyonel stiljavascript
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); // 15

Sı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

Bu sayfada bir hata ya da eksik mi gördünüz?Düzeltme önerin

Daha fazla

Ayarlar