Berbicara dengan orang dewasa — FP itu Menyenangkan dan Praktis 2.

Untuk bagian 1 dari seri ini, klik di sini.

Imperatif vs. deklaratif

Ada pepatah "Venkat Subramaniam" yang banyak digunakan untuk membandingkan gaya pemrograman imperatif vs. deklaratif dan saya sangat menyukainya karena sangat ekspresif:

Gaya imperatif adalah saat Anda memberi tahu APA yang harus dilakukan DAN BAGAIMANA CARA melakukannya.
Sedangkan gaya deklaratif adalah saat Anda memberi tahu APA yang harus dilakukan DAN BUKAN BAGAIMANA CARA melakukannya.

Kadang-kadang ia melangkah lebih jauh dan berkata: “Gaya imperatif itu seperti berbicara dengan anak-anak. Anda harus mengatakan semuanya – dan mengulanginya pada hari berikutnya”

Jadi mari kita lihat melalui beberapa contoh kehidupan nyata!

Bagaimana cara meminta susu?

Imperatif

Anda menentukan setiap langkah:

1. Open the fridge
2. Take the box out of the fridge
3. If it is not milk (can be orange juice as well) put it back and take another one.
4. Repeat it, until you get the milk or there are no more boxes
5. Pour it in a glass
...
n. Give it to me

Deklaratif

Anda mendeklarasikan potongan informasi/fungsi dan menyatakan tujuan Anda. Yang harus Anda lakukan adalah menggabungkan (menyusunnya):

- The milk is in the fridge.
- Milk is a thing which is in a box with the text "Milk" on it.     Hopefully :)
- I want (a Glass of*) milk
Here you are.

* jika kita berada di lingkungan yang aman-tipe kita sebenarnya dapat mengatakan bahwa kita menginginkan segelas susu, karena juga diketahui bahwa Kaca adalah format (*batuk… jenis) yang membuat susu dapat dipindahkan dan ditampung di tangan kita serta mudah dikonsumsi oleh kita.

Oke, tapi aku bukan bayi, aku ke sini bukan untuk minum susu! Punya kode?

Oke, izinkan saya menunjukkan situasi di atas dengan p̶s̶e̶u̶d̶o̶-̶c̶o̶d̶e… j̶a̶v̶a̶s̶c̶r̶i̶p̶t… beberapa kode semu yang menyerupai Javascript.
Saya menyukai prinsip KISS, jadi saya membuatnya sangat sederhana dan sangat-sangat bodoh, hanya untuk fokuslah pada cara Anda menerapkan pendekatan-pendekatan yang berbeda ini. Saya menurunkan keinginan saya dalam kualitas dan menjatuhkan lemari es. Sekarang hanya ada beberapa kotak minuman, dan saya tidak memerlukan gelas, tapi saya ingin semua yang (kemungkinan) berisi susu!

const boxes= [
    {text: "orange", content: "orange"},
    {text: "tomato", content: "tomato"},
    {text: "milk", content: "eggnog"},
    {text: "milk", content: "milk"},
    {text: "best before: 2020", content: "yikes"},
    {text: "milk", content: "nothing"}
]

// Be imperative!

function findMilkImperative(boxes) {
    const boxesToGive = [];
    for (const box of boxes) {
        if (box.text == "milk") {
            boxesToGive.push(box);
        }
    }
    return boxesToGive;
} /* So you say: 
     iterate through each of the boxes 
     and if it says "milk" then collect it 
     and then deliver them to me */



// Be functional!

function findMilkDeclarative(boxes) {
    return boxes.filter(box => box.text == "milk")
} // Got it? Gimme! ... Got it?

Kedua fungsi ini akan mengembalikan Anda koleksi semua kotak dengan teks “susu” di dalamnya. Jadi APA yang mereka lakukan adalah sama.

[
    {text: "milk", content: "eggnog"},
    {text: "milk", content: "milk"},
    {text: "milk", content: "nothing"}
]

Namun BAGAIMANA Anda menerapkannya sangat berbeda.

Pergi ke lemari es!

Saya tahu sekarang Anda berkata: “Itu bagus, tapi itu hanya gula sintaksis”.

Dan Anda benar. Sebenarnya pendekatan deklaratif dapat menunjukkan kekuatan sesungguhnya dalam situasi yang lebih kompleks.

Seperti saat kotak-kotak ini ada di lemari es di dapur.

Jika kita adalah 'imperator', kita harus memberi tahu “anak” itu lebih banyak lagi petunjuk langkah demi langkah: cara pergi ke dapur dan mereka harus membuka pintu lemari es untuk mengambil susu tersebut. Tidak lupa untuk menutupnya.

Lalu bagaimana jika pintu lemari es tetap terbuka?

efek samping terjadi…

Efek samping berarti ada hal lain yang diubah selain yang dimaksudkan. Dalam pemrograman, ini adalah perubahan keadaan sesuatu di luar cakupannya (misalnya nilai suatu variabel, penulisan ke disk atau konsol, dll.)

Seperti dalam kehidupan nyata di lemari es Anda — di mana hal-hal buruk dapat muncul dalam makanan lezat Anda —, hal ini dapat membuat kode Anda tidak dapat ditentukan, atau bug aneh dapat muncul.

Sementara kami hanya ingin susu.

Namun, ketika kita hidup di dunia deklaratif, bisa saja orang dewasa yang Anda tanyakan adalah pahlawan super dan bisa mengeluarkan susu dari lemari es tanpa membukanya, terlebih lagi, mungkin saja mereka bisa mengambilkannya untuk Anda dengan berjalan menembus dinding. !

Anda hanya perlu tahu apa yang Anda inginkan, dan bukan bagaimana hal itu bisa dicapai.

Dan Anda bahkan tidak perlu merawat pintu lemari es sialan itu, jadi Anda tidak perlu takut akan efek samping.

Bersulang!