fonksiyonel programlama hk

118 views
Skip to first unread message

suley...@gmail.com

unread,
Apr 2, 2013, 7:12:45 PM4/2/13
to scala-...@googlegroups.com
Merhabalar ,

Fonksiyonel programlama hakkında bilgiye ihtiyacım var , paradigma olarak neyi ifade eder ?
staja başvurduğum şirketin yönelttiği soru ; Neden fonksiyonel programlama oop den daha üstündür , örnek vererek açıklayınız ?
3 gün süre verdiler, 2 gündür stackoverflow ile akademik makaleler arasında gidip geldim biraz bilgi sahibi oldum ,
anladığım kadarıyla oop'deki objelerin yerini fonksiyonlar alıyor , fonksiyona gelen parametrelere göre sonuç oluşuyor , parametre değişmediği sürece sonuçta değişmiyor , f(x) = y 'de x dğişmedikçe y nin değişmemesi gibi.
her fonksiyon kendi içinde çalışabiliyor buda programin paralelleştirilmesini ve hata ayıklama işlemini kolaylaştırıyor.
matematiksel ifadelere yakın bir şekilde tasarım yapılıyor , durum içermiyor , fonksiyonların çalışırken birbirini etkileme durumu olmuyor.
anlıyabildiğim kadarıyla tabi onuda doğru anlayabildiysem fonksiyonlarda değişebiliyor , normal değişken gibi. oop'te böyle bir durum yok önceden tanımlanmış fonksiyonlar (sınıfa ait metodlar) veri üzerinde işlemler yapıyor. sanırım bu artı bi özellik olabilir. tabi bu bilgiler yetersiz , bu konuda yardımınıza ihtiyacım var , şimdiden teşekkür ederim.

cagdas senol

unread,
Apr 3, 2013, 3:04:19 AM4/3/13
to scala-...@googlegroups.com

Aslinda en onemli 2 kismundan birini cozmussun. Imutabality kismi tamam. Fonksiyonlarin yan etkisi olmamasi sebebiyle calisma sirasinin onemsiz olusu ve kolayca parallel calisabilmesi.

Diger kisim ise fonksiyonlarin 1.sinif vatandas olmasi. Yani array, integer, object ten farkinin olmamasi. Bunu biraz acmak gerekirse; fonksiyonlar  parametre olarak nasil object, integer vs aliyorsa fonksiyon da alabiliyorlar.

Bunlar nasil bir degiskene ya da sabite atanabiliyorsa fonksiyonlar da degisken ve ya sabite atanabiliyor.Bunlar nasil bir fonksiyonun icinde tanimlanabiliyorsa, fonksiyonlar da ayni sekilde fonksiyonlarin icinde tanimlanabiliyor.Ve en guclusu, bunlar nasil fonksiyonlarin donus degeri oluyorsa, fonksiyonlardan fonksiyon donebiliyor.

Bunlarin hepsi fonksiyonlarin 1. Sinif olmasi sayesinde oluyor. İlk asamada bu cok da onemli bir ozellik gibi gozukmeyecek belki sana. Nesne dayali programlama dunyasindan geliyorsan,  soyutlamayi simof ve nesnelerle yapmaya alismissindir. 

Bir programi cumle olarak dusunursek(ozne nesne yuklem), oop bize ozne/nesneler  uzerinden soyutlama imkani yapmayi imkani veriyor.Fonksiyonel programla ile bu soyutlamayi yuklemler uzerinden yapiyoruz. Bir programi is yapan bir alet olarak dusunursek,  yapilan soyutlama yuklem(yapilan is) uzerinden oldugu icin cok daha guclu oluyor.

Guclu soyutlamalar daha az kod yazmamizi sagliyor. Daha az kod daha az bug demek.
Daha az bug ise daha az dert demek. Daha az dert ise daha mutlu programci demek.

İlk fonksiyon alan fonksiyonunu yazdigin gun, daha mutlu programci olma yolunda ilk adimini atmis olursun.(Havalı cümle ile maili bitirdim)

Kolay gelsin.


Not: sirketin adini paylasabilirsen cok sevinirm. Türkiye'de fonksiyonel programlama kullanan şirketleri bilmek bizim için faydalı oluyor.

03 Nis 2013 02:12 tarihinde <suley...@gmail.com> yazdı:
--
Bu e-postayı Google Grupları'ndaki "Scala Türkiye" adlı gruba abone olduğunuz için aldınız.
Bu grubun aboneliğinden çıkmak ve bu gruptan artık e-posta almamak için scala-turkiy...@googlegroups.com adresine e-posta gönderin.
Daha fazla seçenek için, https://groups.google.com/groups/opt_out adresiniz ziyaret edin.
 
 

Ömer Sinan Ağacan

unread,
Apr 3, 2013, 3:14:28 AM4/3/13
to scala-...@googlegroups.com
Şirketin adı Kartaca, bir başka arkadaş bana aynı soruyu mail
üzerinden sormuştu :-D

Fakat ben herhangi bir şekilde FP kullandıklarına inanmıyorum,
sordukları soru bile yanlış bir kere. Diğer arkadaşa attığım cevaptan:

> Öncelikle nereye başvurduğunu merak ettim. Soru bence yanlış. "Neden
> fonksiyonel programlama, nesneye yönelik programlamadan daha üstündür"
> böyle birşey yok, OOP FP'den veya FP OOP'den daha üstün olması diye
> birşeyden bahsedemeyiz. Sorunun doğru şekli şu olmalıydı "FP'nin
> OOP'den üstün olduğu yönler nelerdir?".


---
Ömer Sinan Ağacan
http://osa1.net/


3 Nisan 2013 10:04 tarihinde cagdas senol <cagda...@gmail.com> yazdı:

cagdas senol

unread,
Apr 3, 2013, 3:24:37 AM4/3/13
to scala-...@googlegroups.com
Staj soruları burada dönüyor demek =)
Üstünlük konusunda haklısın. İkisi de ayrıl şekilde yer alacaklar diye bir durum yok. FP ile OOP u. OOP ile FP yi mimic etmek mümkün.
Mimic etmeden olduğu gibi bu işi yapmaya ise Scala deniyor :D (Aha reklamlar)


2013/4/3 Ömer Sinan Ağacan <omera...@gmail.com>



--
Cagdas Senol

Fehmi Can Saglam

unread,
Apr 3, 2013, 3:38:24 AM4/3/13
to scala-...@googlegroups.com
Özgür Yazılım Günleri'ndeki "Neden Scala" seminerimize de bekleriz:)

http://www.ozguryazilimgunleri.org.tr/2013/etkinlik-programi/

2013/4/3 cagdas senol <cagda...@gmail.com>:
sözlerim hazinem, sözlerim ben;
bir elimde kalem, bir elimde sen;

Yagiz Erkan

unread,
Apr 3, 2013, 4:08:23 AM4/3/13
to scala-...@googlegroups.com
> Neden fonksiyonel programlama oop den daha üstündür

Tuhaf bir soru. "FP OOP'den üstündür" kanun gibi söylenemez. Yapılan ise göre değişir. "FP'nin OOP'ye göre avantajları nelerdir?" dese anlarım. Bence istenilen cevap bu yonde.

- Yagiz -

cagdas senol

unread,
Apr 3, 2013, 4:52:36 AM4/3/13
to scala-...@googlegroups.com

2013/4/3 cagdas senol <cagda...@gmail.com>

soyutlamayi simof ve nesnelerle yapmaya alismissindir. 
Simof un ne odluğunu ben de bilmiyorum. Android'te mail yazmanın kötü yönleri. Bişileri tamamlamış ama nedir anlamadım =)



--
Cagdas Senol

deniz silahcılar

unread,
Apr 3, 2013, 4:54:11 AM4/3/13
to scala-...@googlegroups.com
Sınıf ? :)


2013/4/3 cagdas senol <cagda...@gmail.com>

--

cagdas senol

unread,
Apr 3, 2013, 4:56:26 AM4/3/13
to scala-...@googlegroups.com
typo-debugger =) Aynen oyle sanırım. Sınıf yazmaya çalışmışım

2013/4/3 deniz silahcılar <dsila...@gmail.com>



--
Cagdas Senol

Mehmet Ali GÖZAYDIN

unread,
Apr 3, 2013, 7:50:39 AM4/3/13
to scala-...@googlegroups.com
Aynı soru bana da dün akşam mesajla geldi, boşluğuma gelmiş 12 mesajlık aşağıdaki cevabı yazmışım :)

"Neden olmaz da hangi durumlarda dersek belki daha yerinde olur.

Fonksiyonel programlamada değişken yapısı biraz farklı mesela, değişkenler immutable, Yani bir kere tanımlandıktan sonra değerleri değiştirilemiyor. Yani değişken değiller aslında :)

Bunun avantajı ne dersen side effectlerden kurtarıyor, hani mesela paralel dersinde vardı ya iki fonksiyon bir değişkeni aynı anda değiştirince tutarlılık bozuluyordu. Semaforlar, mutual exclusionlar, message passingler kullanıyorduk. Onlara gerek kalmıyor, çünkü değişken zaten değiştirilemez.

Netice olarak immutability farkı var. Ondan sonra fonksiyonların side effectleri yok, birini çağırdın mı işini yapıp sonucu döndürüyor. Ötede beride bir şey değiştirdi mi diye düşünmeye gerek kalmıyor. Diyeceksin ki nasıl kullanacam o zaman, onu da ayarlıyorlar :)

Higher order  fonksiyonlar var, öyle bir fonksiyon düşün ki parametre olarak başka bir fonksiyon alıyor(manyak bir şey).

Fonksiyonel programlama native dillere daha yakın(İngilizce, Türkçe gibi bir söz dizimi var) bu da kodu okunabilir kılıyor.

Fonksiyonel programlama adı üstünde fonksiyonlar üzerine kurulu bir mimari içeriyor, yani belirli fonksiyonlar var bir şey ver bir şey al şeklinde. Nesne yönelimli programlamada ise her şey bir nesne. Murat hocanın anlattığı araba örneğini hatırlarsan nesneler var, birbirleriyle akrabalıkları var, bu nesnelerin metotları var filan.

Bir de dipnot; immutability paralel ve concurrent işler için çok kolaylık sağlıyor."


Grup üyeleri çevrelerinde nasıl tanınıyor sorusuna da cevap oldu sanırım bu durum.
Ayrıca cevapları görünce çok da sallamadığımı fark ederek sevindim açıkçası :)


3 Nisan 2013 11:56 tarihinde cagdas senol <cagda...@gmail.com> yazdı:

Fehmi Can Saglam

unread,
Apr 3, 2013, 10:29:08 AM4/3/13
to scala-...@googlegroups.com
Benim blogdaki Bora Gönül röportajı[1] son 3 gündür günde 200 tekil
ziyaretçinin üzerinde almaya başladı. Şimdiye dek aldığı toplam hit
ancak o kadardı. Nedeni Kartaca'nın yönelttiği bir soru mu yani?
İlginç:)


[1]: http://fehmicansaglam.net/bora-gonul-ile-fonksiyonel-programlama-dilleri-uzerine-bir-soylesi/

2013/4/3 Mehmet Ali GÖZAYDIN <kub...@gmail.com>:

cagdas senol

unread,
Apr 3, 2013, 10:49:05 AM4/3/13
to scala-...@googlegroups.com
Cuma/Cumartesi öğreniriz işin aslını. Onların ekip de geliyor

2013/4/3 Fehmi Can Saglam <fehmica...@gmail.com>



--
Cagdas Senol

Mehmet Ali GÖZAYDIN

unread,
Apr 3, 2013, 10:52:00 AM4/3/13
to scala-...@googlegroups.com
Merakla bekliyoruz (:

Yasin Okumus

unread,
Apr 3, 2013, 12:46:54 PM4/3/13
to scala-...@googlegroups.com
Fonksiyonel programlama native dillere daha yakın(İngilizce, Türkçe gibi bir söz dizimi var) bu da kodu okunabilir kılıyor.

Selamlar hocam. Bu bahsettiginiz sey fonksiyonel dillerin bir ozelligi mi, yani fonksiyonel programlamanin temeliyle alakali bir sey mi yoksa scala buna yoneldiginden mi boyle bir cikarim yapiyorsunuz?

Ilk hangoutlardan birinde DSL mevzuu gecmisti ornegin. Bu mevzuu bu alinti yaptigim sozlerinizle alakali, degil mi? (yanlis anlamamak adina soruyorum) Cagdas hocam bunu Scala'nin yonelimi olarak bahsetti gibi hatirliyorum. Diger fonksiyonel dillerde de bu sekilde bir yonelis mi var?



2013/4/3 Mehmet Ali GÖZAYDIN <kub...@gmail.com>
Aynı soru bana da dün akşam mesajla geldi, boşluğuma gelmiş 12 mesajlık aşağıdaki cevabı yazmışım :)

Mehmet Ali GÖZAYDIN

unread,
Apr 4, 2013, 8:04:59 AM4/4/13
to scala-...@googlegroups.com
Tekrardan merhaba,

Çağdaş hocamın söylediklerinden bi alıntı yaparsak:


Bir programi cumle olarak dusunursek(ozne nesne yuklem), oop bize ozne/nesneler  uzerinden soyutlama imkani yapmayi imkani veriyor.Fonksiyonel programla ile bu soyutlamayi yuklemler uzerinden yapiyoruz. Bir programi is yapan bir alet olarak dusunursek,  yapilan soyutlama yuklem(yapilan is) uzerinden oldugu icin cok daha guclu oluyor.

Yani kısaca biri yüklem üzerine diğeri nesne üzerine.
Aklıma gelen en basit örnekle anlatmaya çalışırsam:

OOP da çay içeceksen:
 Cay.ic()

FP de çay içeceksen:
 Ic(Cay)

desem başım ağırmaz sanırım :) 

Bunun nasıl bir artısı var diye düşünüyor insan başta. Başta ama :)

Şimdi Çağdaş hocam scalayı haklı olarak övdu ama bahsettiğimiz özellikleri scala üzerinden konuşmak tam doğru olmaz sanırım çünkü(yanlışsan düzeltin) scalayı bir oop dil gibi de kullanmak mümkün. Benim fp geçmişim scala ve haskell le sınırlı ama bu söylediğimin ikisi için de ortak olduğunu söyleyebilirim.

Ayrıca Coursera'daki Fonksiyonel programlama dersinin en azından ilk videosunu izlemenizi tavsiye ederim, programlama paradigmalarından bahsediyor.


İyi çalışmalar,
Mehmet Ali

cagdas senol

unread,
Apr 4, 2013, 12:20:57 PM4/4/13
to scala-...@googlegroups.com

OOP da çay içeceksen:
 Cay.ic()

parametre almıyor. ne donduruyor belli değil. pek FP değil
 
FP de çay içeceksen:
 Ic(Cay)

Parametre alıyor ama side-effect var gibi duruyor. 

Bu derece basite indirgeyince özünden uzaklaşmış oluruz aslında

HN de gördüğüm şu makale gayet güzel.

FP ile yazılan kodların neden daha declarative olduğun dair.

PS: PhDli ya da öğretmen değilim.  Çağdaş Hoca diyip durmayın =) Sizden pek farkım yok.

--
Cagdas Senol

Mehmet Ali GÖZAYDIN

unread,
Apr 4, 2013, 12:29:27 PM4/4/13
to scala-...@googlegroups.com
Üstteki object oriented örneğiydi yalnız :)

roy simkes

unread,
Apr 7, 2013, 7:02:34 PM4/7/13
to scala-...@googlegroups.com
Merhaba,

E soruyu soran kisi olarak bana cevap hakki dogmus :)

Asagi yukari 3 senedir, her staj doneminde 1000in uzerinde staj basvurusu aliyoruz. Bu sene 2000 gorduk. Bunlardan da en fazla 10 kisi alabiliyoruz :)

Insan elemek gercekten cok guc. Gecen sene bir gunde, sadece ben 50 kisi ile gorustum, akin akin geliyor ogrenciler, artik ofiste gorusme yapacak ne yer, ne zaman ne de insan kaliyor. O yuzden belli sekillerde insanlari elemeye calisiyoruz.

Bu soruya verilen cevaplari incelerken, dogru cevaba degil gidis yoluna puan verecegim ben acikcasi. Turkceyi duzgun kullanmasindan, cumle kurabilmesine kadar bakacagim. Bunlar belki komik ama biraz resmi bir yazisma oldugunu varsayarak, biraz ozen gostermesini bekleyecegim. Verdigi cevapta, bu soru sacma derse, e dusunmus bulmus diyecegim :) risk budur diyen eleman ariyorum diyecegim, risk bodon yazacaklar onun icin abes olacak. Her sene staj basvurulari icin bur seyler deniyoruz iste. Seneye. Fortrani modern programlama dillerinin tamamina tercih ederim cunku diye baslayan bir cumlenin devamini getirmelerini istesek ilginc olabilir :)

Lakin bir farkindalik yaratmayi becermisiz ya iyi olmus :)

roy

Fatih ERİKLİ

unread,
Apr 10, 2013, 3:36:16 AM4/10/13
to scala-...@googlegroups.com
Benim blogumda da fonksiyonel programlama ile ilgili bir örnek vardı. Aynı şekilde bende de trafik olmuştu. İlginçmiş :)

3 Nisan 2013 Çarşamba 17:29:08 UTC+3 tarihinde Fehmi Can Saglam yazdı:
Reply all
Reply to author
Forward
0 new messages