December 6, 2022

Funktsional dasturlash tamoyillari

Funktsional dasturlash bu paradigma bo'lib, uning ildizlari matematikada, birinchi navbatda lambda hisobidan kelib chiqadi. Funktsional dasturlash deklarativ bo'lishni maqsad qilib qo'yadi va ilovalarni bir-biridan tuzilgan sof funktsiyalar natijasi sifatida ko'rib chiqadi.

Ushbu dasturlash uslubining asosiy maqsadi ob'ektga yo'naltirilgan dasturlashda keng tarqalgan umumiy holat, o'zgaruvchan ma'lumotlar va nojo'ya ta'sirlar bilan bog'liq muammolardan qochishdir.

Funktsional dasturlash ob'ektga yo'naltirilgan dasturlashdan ko'ra ko'proq bashorat qilinadigan va sinovdan o'tkazish osonroq bo'ladi, lekin yangi kelganlar uchun zich va o'rganish qiyin bo'lib tuyulishi mumkin, ammo funktsional dasturlash birinchi qarashda ko'rinadigan darajada qiyin emas.

Sof funksiyalar
Sof funksiya bu quyidagi funksiyadir:

1. Xuddi shu kirishlarni hisobga olgan holda, har doim bir xil chiqishni qaytaradi
2. Hech qanday yon ta'siri yo'q

// pure
function getSquare(x) {
   return x * x;
}

// impure
function getSquare(items) {
  var len = items.length;
  for (var i = 0; i < len; i++) {
    items[i] = items[i] * items[i];
  }
  return items;
}

Asosan, o'z kirishlarini yoki ba'zi tashqi o'zgaruvchilarning qiymatini o'zgartiradigan har qanday funktsiya no`tog`ri funktsiyadir.

Hech qanday yon ta'siri yo'q

Yon ta'sirlar funktsional dasturlash paradigmasi tomonidan yomon deb hisoblanadi. Yon ta'sirlar - kirish/chiqarish, konsolga kirish, o'chirilgan va to'xtatilgan xatolar, tarmoq qo'ng'iroqlari va tashqi ma'lumotlar strukturasi yoki o'zgaruvchining o'zgarishi. Umuman olganda, tizimni oldindan aytib bo'lmaydigan narsa.

Buni aytganda, funktsional dasturlash sizda nojo'ya ta'sirlar bo'lishi mumkin emas, demaydi, chunki ular ba'zan talab qilinadi, lekin bu kabi effektlarning paydo bo'lishini iloji boricha kamaytirishga qaratilgan.

Agar funktsiyada nojo'ya ta'sirlar bo'lsa, u protsedura deyiladi.

O'zgarmaslik

O'zgarmaslik funktsional dasturlashning asosidir. O'zgarmaslik - bu qiymat e'lon qilingandan so'ng, u o'zgarmas bo'lib, dasturingizdagi xatti-harakatlarni ancha oldindan aytib bo'ladigan qiladi degan fikrdir.

Yo'naltiruvchi shaffoflik

Yo'naltiruvchi shaffoflik, agar siz funktsiya chaqiruvini uning qaytariladigan qiymati bilan almashtirsangiz, dasturning xatti-harakati avvalgidek bashorat qilinadigan bo'lishini aytishning ajoyib usuli. Yo'naltiruvchi shaffof funktsiyalar faqat ularning kirishlariga tayanadi va shuning uchun sof funktsiyalar va o'zgarmaslik tushunchasi bilan chambarchas bog'liq.

function two() {
  return 2;
}

const four = two() + two(); // 4
// or
const four = two() + 2; // 4
// or
const four = 2 + two(); // 4
// or
const four = 2 + 2; // 4

To'rt o'zgaruvchini yaratishning ushbu usullarining barchasi ikkinchi funktsiya mos ravishda shaffof ekanligini ko'rsatadi, chunki men uni chaqirishni uning qaytariladigan qiymati bilan almashtira olaman va dastur kutilganidek ishlaydi.

Birinchi darajali ob'ektlar sifatida ishlaydi

Bu shuni anglatadiki, funktsiyalar boshqa funktsiyalarga argument sifatida uzatilishi, boshqa funktsiyalardan qiymatlar sifatida qaytarilishi, ma'lumotlar tuzilmalarida saqlanishi va o'zgaruvchilarga tayinlanishi mumkin.

Masalan, JavaScript funksiyalarni birinchi darajali ob'ektlar sifatida ko'rgani uchun men quyidagilarni qila olaman:

function add(left, right) {
 return left + right;
}

const adder = add;

adder(2,3);

Yuqori tartibli funktsiyalar


Yuqori tartibli funksiyalar quyidagilardan kamida bittasini bajaradigan funksiyalardir:

1.Argument sifatida bir yoki bir nechta funksiyalarni oladi
2.Funktsiyani natijasi sifatida qaytaradi

Boshqa barcha funktsiyalar birinchi darajali funktsiyalar deb ataladi.

Intizomli holat

Intizomli holat umumiy, o'zgaruvchan holatga qarama-qarshidir. Birgalikda, o'zgaruvchan holatning kamchiliklariga misol sifatida quyidagilar bo'lishi mumkin:

function logElements(arr) {
  while (arr.length > 0) {
    console.log(arr.shift());
  }
}

function main() {
  const arr = ['banana', 'orange', 'apple'];

  console.log('Before sorting:');
  logElements(arr);

  arr.sort();

  console.log('After sorting:');
  logElements(arr);
}

main();
// Before sorting:
// "banana"
// "orange"
// "apple"
// After sorting:
// undefined

Biz ikkinchi qo'ng'iroq hech qanday natija bermasligini ko'rishimiz mumkin, chunki birinchi qo'ng'iroq kirish massivini bo'shatdi va shu tariqa dastur holatini o'zgartirib, kutilmagan natijani keltirib chiqardi.

Buni tuzatish uchun biz o'zgarmaslikka va dastlabki holatni shaffof va o'zgarmas saqlash uchun nusxalardan foydalanishga murojaat qilamiz.

function logElements(arr) {
  while (arr.length > 0) {
    console.log(arr.shift());
  }
}

function main() {
  const arr = ['banana', 'orange', 'apple'];

  console.log('Before sorting:');
  logElements([...arr]);

  const sorted = [...arr].sort();

  console.log('After sorting:');
  logElements([...sorted]);
}

main();
// Before sorting:
// "banana"
// "orange"
// "apple"
// After sorting:
// "apple"
// "banana"
// "orange"

Alohida funktsiyalar doirasida davlatni inkapsulyatsiya qilish, tashqi holat yoki ma'lumotlar tuzilmalarini o'zgartirmaslik va sayoz yoki chuqur nusxalar va kirishlardan foydalanish sizning holatingizni intizomli va oldindan aytib bo'ladigan saqlashga yordam beradi.

Tip tizimlari

Turlardan foydalanish orqali biz ishlab chiqish jarayonida yuzaga kelishi mumkin bo'lgan keng tarqalgan xatolar va xatolardan qochishimizga yordam beradigan kompilyatordan foydalanamiz.

JavaScript yordamida biz quyidagilarni amalga oshirishimiz mumkin:

function add(left, right) {
  return left + right;
}

add(2, 3) // 5
add(2, "3"); // "5"

Xulosa


Funktsional dasturlash bizga kodimizni yanada o'qilishi, oldindan aytib bo'ladigan va sinab ko'rishga imkon beradigan ba'zi printsiplarni beradi. Bu bizga kamroq xatolarni o'z ichiga olgan kodga ega bo'lish imkonini beradi, ishga kirishni osonlashtiradi va tajribamdan ko'ra yaxshiroq kod bazasiga ega bo'ladi. Keyingi maqolalarda biz ko'proq funktsiyaga asoslangan ilovalarni ishlab chiqishga yordam beradigan ba'zi funktsiyalarni ko'rib chiqamiz.

@ozbekdasturchi — keyingi maqolalarda ko`rishguncha