fonksiyonel paradigma

55
FONKSİYONEL PARADİGMA #direnstate #nedirtv muhammed cuma tahiroğlu @devmucit 18 ekim 2014

Upload: muhammed-cuma-tahiroglu

Post on 17-Jul-2015

76 views

Category:

Technology


4 download

TRANSCRIPT

FONKSİYONEL PARADİGMA

#direnstate#nedirtv

muhammed cuma tahiroğlu

@devmucit18 ekim 2014

?

1950model

Akademi > Endüstri

FONKSİYONEL PROGRAMLAMA KONSEPTLERİ

IMMUTABILITY

REFERENTIAL TRANSPARENCY

CURRYING IDEMPOTENCE

SIDE-EFFECT

LAZY EVALUATION

RECURSION

PATTERN MATCHING

OOP:ABSTRACTION

ENCAPSULATION

Nesne Yönelimli Programlama, hareketli parçaları enkapsüle ederek kodu anlaşılır kılıyor. Fonksiyonel Programlama ise hareketli parçaları en aza indirgeyerek kodu anlaşılır kılıyor.

— Michael Feathers

SIDE EFFECT

S T A T E

M U T A B L E

FP

STATE

Variable

Değişkent

1;

var x = 1;

x = x + 1;

İlginç bir anekdot

250 sayfa boyunca atama (assignment) yok!

y = f(x)AssertEquals(f(x), f(x));

f(x) = f(x)

string«IMMUTABLE» SINIFLARIN EFENDİSİ

KODA GEL

https://www.flickr.com/photos/norfolkodyssey/3863851867

MAP

C# 3.0

MAP

C# 3.0

FILTER

C# 3.0

FILTER

C# 3.0

REDUCE

C# 3.0

REDUCE

C# 3.0

STRATEGY PATTERN

MOTİVASYON

Unit Test yazmak, fonksiyonel programlamayı fonksiyonel olmayan dillerdeyeniden icat etmektir

Asıl problem, «stateful» programların büyüdükçeiyi olmayan bir yöne doğru evrilmesidir.

Gerektiğinde imperative programlayın; mümkün olduğunda ise fonksiyonel.

YAZMASI VE BAKIM YAPMASI DAHA BASİT

DAHA AZ «CONCURRENCY» SORUNU

«TEMPORAL COUPLING» YOK

«STATE NEDİR?» DİYE SORMAK YOK#direnstate

HAFIZA KULLANIMI

8 byte vs 8 Gb

MULTI-CORE COMPUTING (PARALEL PROGRAMLAMA)

AssertEquals(f(x), f(x));

Çekirdek - 1Çekirdek - 2

FONKSİYONEL DİLLER

Clojure (Lisp)

ML

F#2002’de Microsoft Research yayınladı

MARTIN ODERSKY

C# Java (8)

FONKSİYONEL OLANLA OLMAYAN MODÜLLERİ AYIRIN

«İyi bir yazılım mühendisi olmak için en uygun teknikleri bulup bir denge sağlamak gerekir. Ayrıca teknik olmayan yanlar ve hedefler de var. Mesela kodun her ekip elemanı tarafından anlaşılabilmesi gibi. Doğru olan, en verimli yaklaşım hedeflerini net olarak belirleyerek, teknikleri o amaçla tutarlı bir şekilde kullanmaktir bence. Yoksa mesela her For döngüsünü Map'e çevirdiğinizde kodunuzun kalitesi artmaz; düşebilir bile.»

BURAK EMİRGoogle - İsviçre

TEŞEKKÜRLER

@devmucit

FONKSİYONEL PARADİGMA

muhammed cuma tahiroğlu

tahiroglu.com#nedirtv