Fonksiyonel programlamaya hazırlanırken düşünme biçimimi değiştir


9

Prosedürel ve OOP'tan geldikten sonra işlevsel bir programlama stiline geçerken, "bu yeni düşünme şekli" hakkında ne bilmem gerekir?

Kendinizi FP dünyasında dalmaya nasıl hazırlıyorsunuz ve ilk kez etrafta geziyorsunuz?

Önce öğrenmek ve ayarlamak için temel bilgiler nelerdir?


2
Bu çok genel, imho. Sadece okumaya başlayın! Günümüzde fonksiyonel programlama ile ilgili çoğu kitap ve kılavuz, sorunuzun cevaplarıyla başlar.
devmiles.com

Deneyin ve ardından bir şeye takılırsanız bir soru gönderin
Tom Squires

@Vladimir Volodin: Güzel olurdu ama her kitap için zorunlu değil. Bazı iyi olanları önerebilir misiniz (tercihen dil bilimi yok)?
JohnDoDo

Dalış yapmak zorunda değilsiniz . OOP'dan FP'ye geçişi düzeltmek için lambda ifadesini c # gibi bir OOP dilinde deneyebilirsiniz.
TomCaps

4
Bence geriye doğru sahipsin. Fonksiyonel programlamayı deneyin, düşünme şekliniz değişecektir.
kevin cline

Yanıtlar:



6

Sorunları çözme prosedürü yerine "önce bunu sonra sonra bunu, sonra bunu yap ..." prosedürü yerine deklaratif düşünceye ihtiyacınız olacak . Özyinelemeyi anlamak iyi bir başlangıç ​​noktası olabilir, çünkü prosedürel ve deklaratif düşünme arasında bir tür tatlı noktadır.


4

Arabayı atın önüne koydun. Hazırlamanıza gerek yok. İlginç görünen bir dil seçin, bazı belgeler bulun ve deneyin. Sıkışırsanız, durun ve bir cevap arayın. Siz ilerledikçe, düşünme şekliniz değişecektir.


3

FP lamdba analizine dayanmaktadır. Bunu bilmen gerek. İyi bir başlangıç ​​noktası. Fonksiyonlar her şeydir. Devlet kavramı yoktur (daha yüksek bir seviyede taklit edebilirsiniz).

OOP'ta,

a = 1 a = a + 1

kabul edildi. FP'de öyle değil. Değişkene başka bir değer atayamazsınız. Uzun vadede FP öğrenmek istiyorsanız Haskell'i öğrenin. Orada FP en saf versiyonu ve oldukça karmaşık da (ben yeni öğrenmeye başladım) ama yine de öğrenmeye değer.

Fonksiyonel Programlamaya Giriş, FP'nin ne hakkında olduğu hakkında üst düzey bir genel bakış sunar.

Gerçi iki uyarı

  1. İşler için FP öğrenmek istiyorsanız, orada çok fazla boş yer yoktur. Prosedür ve OOP halen iş piyasasını yönetmektedir. Ancak FP, bir sorunu çözmenin yeni yollarını keşfetmenize çok yardımcı olabilir.
  2. FP derleyicileri çok hızlı değil. FP sorunu çözmekle daha ilgili olduğundan, C hızını bekleyemezsiniz. Ancak yine de yürütme sürecini hızlandırmak için derleyiciye (Haskell'de) talimatlar verebilirsiniz. Takas, yangınla mücadele böcekleri yerine eldeki programa odaklanarak çok fazla zaman geçirmenizdir.

8
"FP lamdba hesabına dayanıyor. Bunu bilmen gerek." Hayır. Lambda hesabını bilmek, fonksiyonel programlamayı anlamak için zorunlu değildir. Zorunlu programlamayı anlamak için Turing makineleri (veya montajı) bilmek gereklidir.
sepp2k

@ sepp2k Uzun vadeli bir hedefle FP'de başarılı olmak için, dürüstçe lambda hesabı öğrenmenin gerekli olduğuna inanıyorum. Bunu lambda hesabı olmadan öğrenebilirsiniz, ancak öğrenmek FP'de daha iyi olur.
Ubermensch

2
FP certianly sadece bu devlet genellikle değişmez olduğunu, aynı zamanda derleyiciler yavaş
jk

@jk. Şüphesiz, devletleri vardır ancak OO yolunda değildir (Devletler işlevlere veya eşleşen örüntüler olarak ve daha ince şekillerde dahil edilebilir). Ve değişmez bir durum sadece tek bir durumunuz olduğu anlamına gelir. Bu nedenle bir işlev her zaman aynı değeri döndürmelidir. Derleyiciler ile ilgili olarak, C / C ++ 'ı saf hız açısından eşleştirebileceklerini sanmıyorum çünkü derleyici, siparişi belirtmek yerine sonucu hesaplamak için gerekli adımları halleder. FP'nin en büyük avantajı, saf CPU hızından ziyade düşük geliştirici maliyetleri ve paralel hesaplamadadır.
Ubermensch

3

Aşağıdaki mantrayı hatırlamak için elimden geleni yapıyorum:

Veri girişi -> Veri Dönüşümü -> Veri çıkışı

veya

TransformData (Veri Girişi) -> Veri Çıkışı


1
TransformData (DataIn) -> DataOut
Ubermensch olmalı

:) bir matra olarak "Veri Girişi, Veri Dönüştürme, Veri Çıkışı" demek daha kolay "TransformData, Açık Parantez, Veri Girişi, Parantez Kapat, Veri Çıkışı" Şaka yapıyorum sadece sana katılıyorum.
Darknight

Sadece dostça bir yorum arkadaşı. Yanıt için teşekkürler.
Ubermensch

Biliyorum, sadece seninle şaka yapıyordum, suç yok, aslında sanırım matrumu güncelleyeceğim.
Darknight

Adamım beceri setin oldukça büyük.
Ubermensch
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.