Ubah cara berpikir saya dalam persiapan untuk pemrograman fungsional

9

Ketika beralih ke gaya fungsional pemrograman setelah datang dari prosedural dan OOP, hal-hal apa yang perlu saya ketahui di muka tentang "cara berpikir baru ini"?

Bagaimana Anda mempersiapkan diri untuk menyelam di dunia FP dan melakukannya pertama kali?

Apa dasar-dasar untuk dipelajari dan diluruskan terlebih dahulu?

JohnDoDo
sumber
2
Ini terlalu umum, imho. Mulailah membaca! Sebagian besar buku dan manual tentang pemrograman fungsional saat ini mulai dengan jawaban atas pertanyaan Anda.
devmiles.com
Cobalah, lalu kirim pertanyaan jika Anda terjebak pada sesuatu
Tom Squires
@Vladimir Volodin: Itu akan menyenangkan tetapi tidak wajib untuk setiap buku. Bisakah Anda merekomendasikan beberapa yang bagus (sebaiknya bahasa agnostik)?
JohnDoDo
Anda tidak harus menyelam . Anda dapat mencoba ekspresi lambda dalam bahasa OOP seperti c # untuk memperlancar transisi dari OOP ke FP.
TomCaps
4
Saya pikir Anda memilikinya mundur. Coba pemrograman fungsional, dan cara berpikir Anda akan berubah.
kevin cline

Jawaban:

6

Anda akan membutuhkan pemikiran deklaratif alih-alih prosedur "pertama lakukan ini, lalu lakukan ini, kemudian lakukan ini ..." cara memecahkan masalah. Memahami rekursi mungkin merupakan titik awal yang baik, karena itu adalah semacam sweet spot antara pemikiran prosedural dan deklaratif.

Joonas Pulakka
sumber
4

Anda telah meletakkan kereta di depan kuda. Anda tidak perlu bersiap. Pilih saja bahasa yang terlihat menarik, temukan beberapa dokumentasi, dan coba. Jika Anda buntu, maka berhentilah dan cari jawaban. Ketika Anda maju, cara berpikir Anda akan berubah.

kevin cline
sumber
3

FP didasarkan pada lamdba calculus. Anda harus tahu itu. Ini adalah titik awal yang baik. Fungsi adalah segalanya. Tidak ada konsep negara (meskipun Anda bisa memalsunya di tingkat yang lebih tinggi).

Dalam OOP,

a = 1 a = a + 1

diterima. Tidak demikian di FP. Anda tidak bisa memberikan variabel nilai yang lain. Jika Anda ingin belajar FP untuk jangka panjang, pelajari Haskell. Ini adalah versi paling murni dari FP di luar sana dan juga cukup rumit (saya baru saja mulai mempelajarinya) tetapi masih layak untuk dipelajari.

Pengantar Pemrograman Fungsional memberi Anda gambaran tingkat tinggi tentang apa itu FP.

Namun dua peringatan

  1. Jika Anda ingin belajar FP untuk pekerjaan, maka tidak ada terlalu banyak lowongan di luar sana. Prosedural dan OOP masih menguasai pasar kerja. Tetapi FP dapat banyak membantu Anda dalam mengeksplorasi cara-cara baru untuk memecahkan masalah.
  2. Compiler FP tidak terlalu cepat. Karena FP lebih mementingkan penyelesaian masalah, Anda tidak dapat mengharapkan kecepatan C. Tetapi Anda masih bisa mengeluarkan instruksi ke compiler (di Haskell) untuk mempercepat proses eksekusi. Imbalannya adalah Anda mendapatkan banyak waktu berfokus pada program di tangan daripada bug pemadam kebakaran.
Ubermensch
sumber
8
"FP didasarkan pada lamdba calculus. Kamu harus tahu itu." Tidak, tidak. Mengetahui kalkulus lambda tidak diperlukan untuk memahami pemrograman fungsional lebih dari mengetahui mesin Turing (atau perakitan) diperlukan untuk memahami pemrograman imperatif.
sepp2k
@ sepp2k Untuk mendapatkan FP yang baik dengan tujuan jangka panjang, saya benar-benar percaya belajar kalkulus lambda diperlukan. Anda dapat mempelajarinya tanpa kalkulus lambda tetapi mempelajarinya akan membuat Anda lebih baik di FP.
Ubermensch
2
FP benar-benar telah menyatakan hanya bahwa negara itu biasanya tidak berubah, juga tidak yakin saya setuju dengan pernyataan tentang kompiler yang lambat
jk.
@jk. Tentunya, mereka memiliki status tetapi tidak dengan cara OO (Negara dapat dimasukkan dalam fungsi atau sebagai pola yang cocok dan dengan cara yang lebih halus). Dan negara yang tidak berubah berarti Anda hanya memiliki satu negara. Itu sebabnya suatu fungsi harus selalu mengembalikan nilai yang sama. Mengenai kompiler, saya tidak berpikir mereka dapat mencocokkan C / C ++ dalam hal kecepatan murni karena kompiler menangani langkah-langkah yang diperlukan dalam menghitung hasilnya alih-alih kami menentukan urutannya. FP memiliki keunggulan terbesar dalam mengurangi biaya pengembang dan komputasi paralel daripada kecepatan CPU murni.
Ubermensch
3

Saya mencoba yang terbaik untuk mengingat mantra berikut:

Data di -> Transform Data -> Data keluar

atau

TransformData (Data Masuk) -> Data Keluar

Malam gelap
sumber
1
Seharusnya TransformData (DataIn) -> DataOut
Ubermensch
:) sebagai matra "Data In, Transform Data, Data Out" lebih mudah untuk mengatakan "TransformData, Open Bracket, Data In, Tutup Bracket, Data Out" Saya hanya bercanda Saya setuju dengan Anda.
Darknight
Itu hanya teman komentar yang ramah. Terima kasih atas tanggapannya.
Ubermensch
Saya tahu, saya hanya bercanda dengan Anda, jangan tersinggung, bahkan saya pikir saya akan memperbarui matra saya.
Darknight
Man skill-set Anda cukup besar.
Ubermensch