Apa itu Pemrograman Fungsional dan Manfaatnya?

Pemrograman fungsional adalah paradigma, atau gaya, yang menghargai kekekalan, fungsi kelas satu, transparansi referensial, dan Pure functions. Jika tidak ada kata-kata itu yang masuk akal bagi Anda, jangan khawatir! Kami akan menjelaskan dalam artikel ini.

Pemrograman fungsional berevolusi dari kalkulus lambda, sistem matematika yang dibangun di sekitar abstraksi dan generalisasi fungsi. Akibatnya, banyak bahasa pemrograman fungsional terlihat sangat matematis. Namun, kabar baiknya: Anda tidak perlu menggunakan bahasa pemrograman fungsional untuk menerapkan prinsip pemrograman fungsional ke kode Anda. Dalam postingan ini, kita akan menggunakan JavaScript, yang memiliki banyak fitur yang membuatnya dapat menerima pemrograman fungsional tanpa terikat pada paradigma tersebut.

Konsep pemrograman fungsional: 

  • Fungsi murni (Pure functions)
  • Transpanasi Referensial
  • Fungsi Tingkat satu ( Frist-Class Functions )
  • Fungsi Tingkat Tinggi (Higher-Order Functions)
  • Komposisi Fungsi( Function Composition)

Fungsi Murni (Pure Functions)

Pure functions tidak memiliki ‘efek samping’ atau tindakan yang tidak terkait dengan keluaran fungsi. Beberapa potensi efek samping akan mencetak nilai atau keluar dengan console.log, atau memanipulasi variabel di luar fungsi. Fungsi di bawah ini murni. Dibutuhkan input dan menghasilkan output.

Fungsi di bawah ini contoh fungsi murni.

// pure function
function squareNumber(number) {
  return number * number;
}

squareNumber(2);

Berikut adalah contoh fungsi yang tidak murni:

et number = 2;

function squareNumber() {
  number = number * number; // impure action: manipulating variable outside function
  console.log(number); // impure action: console log-ing values
  return number;
}

squareNumber();

Pada contoh kedua, kita menggunakan numbervariabel yang dibuat di luar fungsi, dan mengaturnya di dalam.

 

Transparansi referensial

Dalam proses program fungsional, variabel yang pernah ditentukan tidak mengubah nilainya di seluruh program. Program fungsional tidak memiliki pernyataan penugasan. Jika kita harus menyimpan beberapa nilai, sebagai gantinya kita mendefinisikan variabel baru. Ini menghilangkan kemungkinan efek samping karena variabel apa pun dapat diganti dengan nilai aktualnya di setiap titik eksekusi. Status variabel apa pun adalah konstan setiap saat. 

contoh :

// Not referentially transparent
Math.random();
// 0.1406399143589343
Math.random();
// 0.26768924082159495ß

Fungsi Tingkat satu (First-class functions)

Fungsi tingkat satu yaitu dapat menggunakan seperti nilai lainnya , pada fungsi ini kita dapat membuag larik fungsi , meneruskannya sebagai argument ke fungsi lain , dan menyimpan dalam variabel. contoh fungsi tingkat satu :

let myFunctionArr = [() => 1 + 2, () => console.log("hi"), x => 3 * x];
myFunctionArr[2](2); // 6

const myFunction = anotherFunction => anotherFunction(20);
const secondFunction = x => x * 10;
myFunction(secondFunction); // 200

Fungsi tingkat tinggi (Higher-Order Functions)

Fungsi tingkat tinggi adalah fungsi yang melakukan salah satu dari dua hal: mengambil fungsi sebagai satu atau lebih parameternya, atau mengembalikan fungsi. Ada banyak tipe pertama dari fungsi tingkat tinggi yang dibangun ke dalam JavaScript — seperti mapreduce, dan filteryang dapat kita gunakan untuk berinteraksi dengan array.

filter digunakan untuk mengembalikan larik baru dari larik lama yang hanya berisi nilai yang sesuai dengan kondisi, yang kami sediakan.

const myArr = [1, 2, 3, 4, 5];

const evens = myArr.filter(x => x % 2 === 0); // [2, 4]

map digunakan untuk mengulangi item dalam array, memodifikasi setiap item sesuai dengan logika yang disediakan. Dalam contoh di bawah ini, kita menggandakan setiap item dalam array dengan meneruskan fungsi ke map yang mengalikan nilai kita dengan dua.

const myArr = [1, 2, 3, 4, 5];

const doubled = myArr.map(i => i * 2); // [2, 4, 6, 8, 10]

reduce memungkinkan kita mengeluarkan satu nilai berdasarkan larik yang dimasukkan — ini sering digunakan untuk menjumlahkan larik, meratakan larik, atau mengelompokkan nilai dalam beberapa cara.

const myArr = [1, 2, 3, 4, 5];

const sum = myArr.reduce((i, runningSum) => i + runningSum); // 15

Anda juga bisa menerapkan semua ini sendiri! Misalnya, Anda dapat membuat fungsi filter seperti ini:

const filter = (arr, condition) => {
  const filteredArr = [];

  for (let i = 0; i < arr.length; i++) {
    if (condition(arr[i])) {
      filteredArr.push(arr[i]);
    }
  }

  return filteredArr;
};

Komposisi fungsi (Function composition)

Komposisi fungsi adalah saat Anda menggabungkan beberapa fungsi sederhana untuk membuat fungsi yang lebih kompleks. Jadi, Anda bisa memiliki averageArrayfungsi yang menggabungkan averagefungsi dengan sumfungsi yang merangkum nilai array. Fungsi individu kecil dan dapat digunakan kembali untuk tujuan lain, dan dalam kombinasi mereka melakukan tugas yang lebih lengkap.

const sum = arr => arr.reduce((i, runningSum) => i + runningSum);
const average = (sum, count) => sum / count;
const averageArr = arr => average(sum(arr), arr.length);

Manfaat

Pemrograman fungsional mengarah ke kode modular. Anda memiliki fungsi kecil yang dapat digunakan kembali berulang kali. Mengetahui fungsionalitas spesifik dari setiap fungsi berarti menunjukkan dengan tepat bug dan menulis tes harus langsung, terutama karena keluaran fungsi harus dapat diprediksi.

 

Sumber  : www.geeksforgeeks.org , developer.mozilla.org

 

Tolong Bagikan:
Pin Share

Leave a Comment

Your email address will not be published. Required fields are marked *

Translate »
Social media & sharing icons powered by UltimatelySocial

Enjoy this blog? Please spread the word :)

Scroll to Top