Apa itu fungsi murni?
Nah, fungsi murni terlihat seperti ini, kita memiliki fungsi, jadi alih-alih kotak yang kita miliki sebelumnya berisi
objek dari semua fungsi ini, anggap ini hanya sebagai fungsi sederhana.
Dan katakanlah kita memberikan daftar yang berisi satu, dua dan tiga.
Jika kita memberikan input ini ke fungsi ini, apa yang kita harapkan dengan fungsi murni adalah sesuatu terjadi
pada input ini yang setiap kali menghasilkan hal yang sama.
Jadi katakanlah kita kalikan ini dengan dua, kita akan menerima dua, empat dan enam.
Sekarang, fungsi murni memiliki dua aturan.
Salah satunya adalah yang diberi input yang sama, akan selalu mengembalikan output yang sama yaitu, setiap kali kita memberikan satu, dua dan
tiga ke daftar ini, kita memberikannya ke fungsi yang kita buat.
Itu harus selalu mengembalikan output yang sama.
Jadi jika saya menjalankan fungsi ini jutaan kali dengan input yang sama, itu akan menghasilkan output yang sama.
Dan poin kedua adalah gagasan tentang suatu fungsi seharusnya tidak menghasilkan efek samping apa pun.
Apa itu efek samping?
Efek samping adalah hal-hal yang berfungsi.
Apakah itu mempengaruhi dunia luar?
Misalnya, jika saya mencetak sesuatu di dalam fungsi ini, itu akan mempengaruhi dunia luar, bukan?
Karena saya sedang mencetak sesuatu ke layar.
Layar adalah dunia luar.
Atau, misalnya, jika fungsi ini menyentuh variabel yang hidup di luar lingkup yang berbeda, itu adalah
efek sampingnya.
Mari kita lihat.
Sebuah kode untuk memahami konsep ini sedikit lebih banyak.
Katakanlah kita memiliki sebuah fungsi dan kemudian fungsi ini akan mengalikan.
Dengan ke daftar, jadi katakan saja sekutu, yang akan menjadi daftar kita, dan di sini yang ingin kita
lakukan adalah mengulang item.
Dalam terakhir.
Dan kemudian setiap item yang ingin kita kalikan dan tambahkan ke daftar baru.
Jadi mari kita buat daftar baru yang akan menjadi daftar kosong.
Dan di sini, kami akan mengatakan daftar baru, dot append.
Dan lakukan di kalikan dua.
Dan akhirnya, di akhir fungsi ini, kami ingin mengembalikan daftar baru.
Mari kita coba ini.
Jika saya katakan kalikan dengan dua dan berikan satu, dua, tiga dan mari kita cetak.
Di sini, outputnya.
Jika saya klik, jalankan.
Saya mendapatkan dua, empat, enam.
Apakah ini fungsi murni, mari kita pikirkan ini.
Aturan pertama diberi input yang sama, yaitu satu, dua dan tiga.
Itu akan selalu mengembalikan output yang sama, tidak peduli berapa kali saya menjalankan ini, itu akan selalu memberi
saya output yang sama.
Jadi, oke, kami lulus tes pertama.
Bagaimana dengan tes kedua yang tidak menghasilkan efek samping?
Apakah ini menghasilkan efek samping?
Apakah ini menyentuh sesuatu di dunia luar?
Pikirkan tentang itu.
Tidak, itu tidak menulis apa pun di dunia luar yang penting untuk fungsi ini.
Karena semuanya ada di sini.
Jika, misalnya, alih-alih mencetak di sini, kami hanya mencetak.
Dan di sini.
Jika saya klik, jalankan.
Kami mendapatkan hasil yang sama, tetapi apakah ini memiliki efek samping?
Ya, memang begitu.
Ini berinteraksi dengan dunia luar, yang merupakan pernyataan cetak.
Pernyataan cetak memberi tahu saya, hei, saya akan mencetak pada tampilan apa pun yang dimiliki mesin ini.
Dalam kasus kami, itu akan dicetak di sini, tetapi kami tidak benar-benar tahu apa yang dilakukan pernyataan cetak
karena itu berinteraksi dengan layar di sisi ini.
Jadi ini.
Efek samping, kami memberikan kontrol untuk mencetak, tetapi kami tidak tahu apa yang akan dilakukan pencetakan.
Contoh lain yang bisa saya berikan.
Apakah ini bagaimana jika kita memiliki daftar baru di sini yang sebenarnya kita definisikan di luar?
Seperti begitu.
Sehingga kami memiliki daftar baru seperti ini, jika saya klik jalankan.
Saya masih mendapatkan empat, enam, tetapi apakah ini memiliki efek samping?
Ya, memang begitu.
Itu berinteraksi dengan dunia luar dan apa yang ada di luar dunia ini dari suatu fungsi
yang ingat, adalah ruang lingkupnya, nah, itu berinteraksi dengan daftar baru ini.
Itu terjadi pada daftar baru ini.
Jadi jika seorang programmer datang dan mungkin sebelum kami menjalankan fungsi ini, kami memutuskan untuk mengatakan daftar baru.
Kami mengubahnya menjadi string kosong.
Nah, ketika saya menjalankan fungsi ini.
Saya mendapatkan kesalahan karena sekarang daftar baru ini adalah objek string.
Jadi daftar baru yang hidup di dunia luar dari fungsi ini dapat dimodifikasi oleh pengembang lain atau oleh suatu
program dan kita tidak akan mengetahuinya.
Dan ketika kita menjalankan fungsi ini, itu akan memberi kita kesalahan.
Ini memiliki efek samping.
Jadi idealnya, kita mengandung fungsi kita.
Dan buat mereka murni, karena, seperti yang Anda lihat, kami tidak akan pernah memiliki bug atau kesalahan dalam kode kami kecuali kami
menulis sesuatu yang salah di sini, tetapi karena kami tidak peduli dengan dunia luar, karena semua
yang kami berikan sebagai input akan selalu menghasilkan output yang baik, itu akan menjadi murni.
Sekarang, sulit untuk benar-benar memahami mengapa ini adalah konsep yang sangat kuat tanpa memiliki sedikit pengalaman di tempat
kerja.
Tapi izinkan saya memberi tahu Anda ini, bahwa ketika Anda memiliki fungsi murni.
Anda memiliki lebih sedikit kode buggy, Anda dapat menguji kode Anda dengan lebih baik.
Lebih mudah untuk memahami kode Anda dan secara keseluruhan.
Anda memiliki manfaat ini karena tidak memiliki bagian yang berbeda dari kode Anda, saling menyentuh dan mempengaruhi satu
sama lain, yang membuat hidup Anda sebagai programmer jauh lebih mudah.
Jadi ide fungsi murni ini sangat penting.
Tetapi satu hal yang saya ingin Anda ambil dari ini adalah bahwa fungsi murni lebih merupakan pedoman
daripada absolut.
Tidak mungkin memiliki fungsi murni di mana-mana karena jika suatu fungsi tidak mempengaruhi dunia luar sama sekali, kita
tidak akan memiliki program apa pun.
Kami tidak akan bisa menampilkan sesuatu.
Kami tidak akan dapat menyimpan hal-hal seperti profil game kami.
Jadi tidak mungkin memiliki fungsi murni di mana-mana.
Namun, ketika Anda bisa di mana pun Anda bisa, pemrograman fungsional mengajarkan kita bahwa fungsi Anda baik.
Cobalah untuk membuat fungsi murni dan hanya memiliki beberapa fungsi non murni yang mungkin berinteraksi dengan
dunia luar yang dapat kita kembalikan kapan pun kita memiliki bug dalam kode kita, karena
kemungkinan besar itulah yang akan memiliki bug kemudian fungsi murni seperti ini untuk menyelesaikan konsep pemrograman fungsional kami.
Jika, misalnya, ini adalah wizard kami dari video sebelumnya dengan pemrograman fungsional, kami akan
memiliki objek wizard.
Atau kamus Wizzard yang punya nama.
Sebut saja Marlon.
Dan kekuatan.
Dari 50.
Dan alih-alih mengandung ini di kelas, saya akan memiliki metode yang berbeda seperti serangan.
Dan ini tidak akan menjadi metode, itu akan menjadi fungsi karena tidak hidup di dalam kelas.
Dalam pemrograman fungsional, mereka berkata, hei, kita tidak perlu menggabungkan data dengan fungsi,
mari kita pisahkan, mari kita buat fungsi murni yang dapat dilewatkan seperti karakter.
Dan dengan cara ini, kami memisahkan kedua hal itu sehingga kami dapat fokus pada fungsi murni dan kami
dapat fokus pada data, jadi di situlah perbedaannya.
Pada akhirnya, ini semua tentang mencoba menjaga mantel kita tetap bersih dan menghindari bug di mantel kita,
masalah besar yang selalu dihadapi programmer.
Jadi hanya cara berpikirnya saja yang berbeda.
Mari kita pelajari lebih lanjut di video berikutnya.