Functional Programming - suckerman7/JavaRestAPI-Demo GitHub Wiki

Functional Programming Nedir?

image

Functional Programming, namı diğer Fonksiyonel Programlama, her şeyi saf matematiksel fonksiyonlar olarak ifade etemeye çalıştığımız bir programlama paradigmasıdır. "Problemin nasıl çözüleceği" üzerine odaklanan Imperative Programming'in aksine; "Programın neyi yerine getireceğine" odaklanan Declarative Programming paradigmasına dayanır.

Functional Programming Dayanağı ve Kavramları

Fonksiyonel programlama, Lambda Calculus temeline dayanır.

Lambda Calculus nedir? Kendisi, Alonzo Church tarafından matematiksel fonksiyonların hesaplanması için geliştirilen bir çerçevedir. Tek bir cümleyle anlatmak gerekirse: "Dünyanın en küçük programlama dili" olarak anlatabiliriz. Amacı ise neyin hesaplanabilir olduğunu tanımlamaktır. Lambda Calculus'de hesaplanabilir her şey hesaplanır. (Computable)

Peki Fonksiyonel Programlama kavramları nedir?

  • Saf (Pure) Fonksiyonlar

  • Yineleme (Recursion)

  • Değişkenlerin değiştirilemez (Immutable) olması

  • Şeffaf referans

Saf Fonksiyon'dan kasdedilen şey, yazılan fonksiyonun aynı argüman değerleri için daima aynı sonucu vermesi ve fonksiyonların bir argümanı değiştirince hiçbir şekilde etkilememesidir. Bu fonksiyonu çağırmamızdaki sebep, fonksiyonun geri döneceği değere ulaşmaktır. Bu bahsettiğimiz özelliklerden ötürü saf fonksiyonlar, paralel/eş zamanlı uygulama yazmayı kolaylaştırır. Akıllı bir derleyicinin pek çok şey yapmasını sağlar. Girdiğimiz input değişmediği sürece sonuç değişmeyeceği ve herhangi bir yan etkisi olmayacağı için derleyici fonksiyonlar, hem paralel çalışabilir hem de istedikleri fonksiyonları bekletebilir.

Saf Fonksiyon Örnekleri

Saf fonksiyon için örnek olarak strlen (), pow (), sqrt () vs. gösterilebilir. Ve bunların tam zıttı olarak saf olmayan fonksiyonlar için de örnek olarak printf (), rand () ve time () gibileri gösterilebilir.

Recursion:

Fonksiyonel dillerde bulunan fonksiyonlar, for veya while döngüleri içermezler. Fonksiyonel iterasyonlar recursive olarak yapılır.

Şeffaf Referans:

Program yazımı başında eklediğimiz değişkenlere verilen değerler, program boyunca değişmez. Yazılan programda atama durumları yoktur. Bir değer saklanmak istenirse yeni değişkenler yazılır ve tanımlanır. Bunun sonucunda oluşacak yan etki olasılıkları ortadan kalkar, çünkü herhangi bir değişken ne zaman uygulama çalıştırılsa o zaman gerçek değeriyle değiştirilebilir. Böylece herhangi bir değişkenin durumu herhangi bir anda sabittir.

Statement (Durum) ve Expression (Değişken) arasındaki farklar

Değişkenlerin yan etkileri bulunmaz ve Return değeri olması gerekir. Ama durumların yan etkileri bulunur ve Return değeri olamaz.

Örnek olarak;

if expression: (a > 15) ? 9 : 0 (a değeri 15'den büyük ise 9 değil ise 0 dön demektir.)

if statement: if(a > 15) { a = 9; } else { a = 0; }

Fonksiyonel Programlamayı destekleyen diller

Fonksiyonel programlamayı şu programlama dilleri destekler:

  • Haskell

  • JavaScript

  • Scala

  • Erlang

  • Lisp

  • ML

  • Clojure

  • 0Caml

  • Common Lisp

  • Racket

Saf Fonksiyon dilleri de aşağıda belirtilmiştir:

  • Miranda

  • Haskell

  • Clean

Ve en son olarak da, Nesne Tabanlı Saf Fonksiyon dilleri aşağıda yer almaktadır:

  • Ruby

  • R

  • Smaltalk

Sonuç olarak Fonksiyonel Programlamayı özetlemek gerekirsek:

  • Her şey fonksiyonlardan oluşur.

  • Değişkenler veya durumlar yer almaz. (Sadece sabit değerler, argümanlar ve return değerleri bulunur)

  • Loop yoktur. (Recursive)

  • Yan etkiler bulunmaz. (State yoktur, Expression vardır.)

  • Anlaması kolaydır.

  • Bug olma ihtimali azdır.

  • Öğrenmesi zaman alır.

  • Execution'ı verimli değildir.

REFERANSLAR:

https://amineyesilyurt.medium.com/fonksiyonel-programlama-nedir-what-is-the-functional-programming-269d1d83f29e

https://www.geeksforgeeks.org/functional-programming-paradigm/

https://tr.wikipedia.org/wiki/Alonzo_Church