Python ile Fonksiyonel Programlamaya Giriş

Cem Ayan
2 min readDec 23, 2018

--

Fonksiyonel Programlamanın prensipleri

Konuya başlamadan önce neden bu yazıyı yazdığımdan kısaca bahsedeyim.

Bazı problemlerde OOP yaklaşımının biraz eksik kaldığını farkettim ve araştırmalarım sonucu fonksiyonel programlama ile bu sorunların üstesinden gelebileceğimi gördükten sonra öğrendiğim bilgileri paylaşmak istedim. 🤓

Fonksiyonel programlama şudur diye bir şey söylemiyorum fakat prensiplerinden bahsederek bir çerçeve çizmeye çalışacağım.

First-class functions

Bir fonksiyon diğer fonksiyonlara argüman olarak geçirilebilir, başka bir fonksiyon tarafından döndürülebilir ve bir değişkene değer olarak atanabilir.

High-order functions

Genelde fonksiyon yazdığımızda bir şeyler return ederiz.(String, Integer, Array,.. ).

func = lambda name : name

High-order functions ise geriye fonksiyon döner.

Klasik örneğini vereyim :

Immutable data

Bir fonksiyona bir global’de tanımlı Array verdiğimizi hayal edelim. Senaryomuz şöyle olacak → Bu fonksiyonumuz içerde bir takım işlemler yapıyor(ekleme, silme, güncelleme …)

Başka bir fonksiyonumuz ise bu globaldeki dizi ile işlemler yapmak istiyor fakat ilk fonksiyon globaldeki diziyi değiştirdiği için bu dizi artık değişmiş oldu.

Bu durum ise istemediğimiz bir olay ve buna yan etki(side effect) deniyor. Fonksiyonel programlamanın başka bir prensibi olan pure functions(saf fonksiyonlar) bu durumun önüne geçmesi için var.

Bunu Python’da tuple ile sağlayabiliriz(**)

** tuple içinde array olduğu durumlarda array içine veri manipülasyonu yapabiliriz. Daha detaylı açıklamayı Fluent Python kitabında bulabilirsiniz.

Pure functions

Pure functions(Saf fonksiyonlar) kısaca açıklamak gerekirse :

  • Aynı giriş verildiğinde, her zaman aynı çıkışı döndürür.
  • Side effect(Yan etki) olmasını engeller.
adder = lambda x,y : x + y

Yani buradaki amaca verdiğim değerlerin değişmeden işlem yapılıp bir değer döndürme işlemi diyebiliriz.

Recursion

Bunu palindrome(Terstden okununca aynı kelimeler) kelimeler üzerinden anlatmaya çalışayım.

Klasik yoldan for, while ile yapılan işleri fonksiyonlar yardımı ile yapmamızı sağlar(Kendini tekrar çağırarak)

Lazy evaluation

Bunu da örnekle açıklamak istiyorum örneğin elimizde fonksiyonumuz var ve bu fonksiyon sonsuza kadar giden bir şeyler üretiyor. (Asal sayılar, fibonacci, …)

Lazy evaluation burda devreye giriyor.

Bunu daha iyi anlamak için generators konusuna bakılabilir.

Kullanılan fonksiyonlar

Map

Dizinin her elemanı için, parametre olarak verilen fonksiyonu çağırır ve oluşan sonuçlarla da yeni bir dizi oluşturur.

Filter

Dizinin her elemanı için belirtli şartlara göre filtre yapıp yeni bir dizi döndürür

Reduce

Faktoriyeli alan bir uygulama :

Sonuç

Fonksiyonel programlamanın neden kullanmalıyız ?

  • Side effect leri ortadan kaldırmak için
  • Pure function oluşturarak immutability sağlamak için

Fonksiyonel programlamayı elimden geldiği şekilde anlatmaya çalıştım.

İyi okumalar,

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Cem Ayan
Cem Ayan

No responses yet

Write a response