Bir proqram xaricdən dataları alır, işə salınır və bir qədər nəticə verir. Riyazi bir gözlə baxsaq, bütün proqramın riyaziyyatda bir funksiyaya bənzədiyini görərik.
proqram (girişlər) = çıxışlar
Funksional paradiqmada proqrama yuxarıdan yanaşırsınız. Sanki bütün girişləri verdiyiniz və bütün nəticəni əldə etdiyiniz tək bir metoddur. Sonra məntiqi olaraq parçalamağa başlayırıq. Funksional proqram bir-birinə zəng vuran və girişlərini istənilən nəticəyə çevirən kiçik proqramların ağacı kimi formalaşır.
Sözümüzü ümumiləşdirsək,funksional proqramlaşdırma tək funksiyalı kiçik funksiyaları kompozisiya prinsipi ilə birləşdirərək qurulmuş bir proqramdır.
Funksional proqramlaşdırmanın bəzi prinsipləri var :
Pure Functions
Saf Funksiya nədir?
1. Saf funksiyalar həmişə öz giriş arqumentlərindən asılıdır. Yəni ki, funksiya həmişə daxil etdiyimiz funksiyaları çıxışa verməlidir.
2. Saf funksiyaların yan təsirləri yoxdur. Yəni yan təsirlər nə bizim arqumentlərdə dəyişikliklər edəcək, nə də çağırıldığı ətraf mühitə təsir edəcək.
İki giriş arqumenti verilən iki ədədin hasilini qaytaran aşağıda göstərilən saf bir funksiyaya baxaq.
function multipleOfNumbers(x, y) {
return x * y;
}
Saf funksiyalar həmişə proqnozlaşdırıla bilən davranışa malik sadə tikinti bloklarıdır. Beləliklə, onlar hər hansı bir xarici təsir olmadan həmişə eyni proqnozlaşdırılan nəticəni qaytarırlar.
Immutability
Dəyişməzlik nədir?
Dəyişməzlik, proqram axını zamanı yaradılan məlumatların heç vaxt dəyişməməsinə əsaslanan bir anlayışdır.Yəni proqram yazarkən, hər hansı bir məlumatda dəyişiklik edilərkən orijinal məlumatların qorunmasını istəyirik. Çünki birdən çox yerdə orijinal məlumatlardan istifadə edilə bilər. Dəyəri qorunmayan məlumatlarda dəyişiklik proqramın sonunda gözlənilməz yerlərə təsir edə bilər
İbtidai tip dəyərlər, dəyərləri ilə yaddaşda saxlandıqları üçün axın boyunca qorunur. Onlar dəyişməz dəyərlərdir. Referans tipi dəyərlər istinad adresləri ilə yaddaşda saxlanıldığından, axıra qədər qorunmasına zəmanət verilmir. Dəyişdirilə bilən dəyərlərdir.
Kodda izah etməyə çalışsaq:
let userName = 'Jale'
let adminName = userName
adminName = 'Mirzayeva'
console.log(userName) // 'Jale'
console.log(adminName) // 'Mirzayeva'
userName
Dəyişəni təyin etdik adminName
və adminName
dəyişənin dəyərini proqram axınının istənilən yerində yenilədik. Bu prosesdə dəyişənin userName
dəyəri adminName
bir-bir dəyişənə köçürülür və nəticədə userName
hər iki adminName
dəyişən üçün yaddaş qorunur. Hər biri üçün yaddaşda fərqli yerlər ayrıldığından, proqram axınındakı bir-birlərinin dəyişikliklərindən təsirlənməyəcək və dəyərləri qorunacaq.
Referential Transparency
Funksional proqramlaşdırmada Referencial Transparency ümumiyyətlə bir proqramdakı ifadənin, proqramın nəticəsini dəyişdirmədən dəyəri (və ya eyni dəyərə malik olan hər hansı bir şey) ilə əvəz edilə bilməsi kimi müəyyən edilir. Bu, metodların başqa bir təsiri olmayaraq müəyyən bir arqument üçün həmişə eyni dəyəri qaytarmalı olduğunu nəzərdə tutur. Bu funksional proqramlaşdırma konsepsiyası, vacib proqramlara da aiddir və kodunuzu daha aydınlaşdırmanıza kömək edə bilər.
İmperativ Proqramlaşdırmada Referential Transparency
Həm vacib, həm də funksional proqramlaşdırma funksiyalarından istifadə edir. Funksional proqramlaşdırma yalnız funksiyalardan istifadə etsə də , məcburi proqramlaşdırma aşağıdakılardan istifadə edir:
Əlavə bir fayda olaraq, referans olaraq şəffaf proqramları oxumaq və anlamaq daha asandır, bu da funksional proqramların daha az şərhə ehtiyacının bir səbəbidir.
First-class functions
Proqramlaşdırmada birinci dərəcəli funksiya funksiyanın dəyişən kimi təyin
edilməsidir. Bu xüsusi vurğulanmalıdır, çünki bir funksiyanın başqa bir
funksiyaya arqument kimi ötürülə bilməsi deməkdir.
Bütün dillər birinci dərəcəli funksiya fikrini dəstəkləmir və bunlar adətən C.
Java və C ++ kimi imperativ dillərdir.
Birinci dərəcəli funksiyalardan söz gedəndə , bir dəyişənə funksiya təyin edə
bilərsiniz, lakin dəyişənin həqiqi dəyəri daxil edilənə qədər təyin olunmur. Bu
qeyri-səlis bir sahədir, çünki tapşırıq dərhal baş vermir. İmperativ
proqramlaşdırma aydınlıq tələb edir və birinci dərəcəli funksiyalar qeyri-
müəyyən bir prosses təqdim edir.
Aşagıdakı koda nəzər salaq:
const say = function () {return 3; }
JavaScript-də funksiyalar çağırılana qədər işləmir, lakin öz aktivliyini qoruyur.
Yuxardakı kodda say funksiyası çağırıb dəyər versək o öz iş prinsipini yerinə
yetirəcək və ekranda cacabı göstərəcək.
Bir dəyişənə birbaşa funksiya təyin etdikdə, buna anonim funksiya deyilir və
sonunda bir cüt mötərizə əlavə edərək dəyişənə çağırabilərsiniz. Beləliklə,
yuxarıdakı dəyişəni çağırmaq üçün say() yazmalısınız.
Bir funksiyanı arqument kimi istifadə etmək üçün funksiya adını daxil
etməlisiniz.
Məsələn:
const say = function () {return 3; }const elaveSay = function(num , func) {console.log(num + say()); }elaveSay(10, say());
Birinci dərəcəli funksiyalarla array ve object de bildirə bilərsiniz.
məsələn : Array
const myArr = [25 , “Elvin “, function() {console.log(“Meherrembeyli”); }]myArr[2]();
məsələn : Object
const myObj = { age: 25, name: “Elvin”, func: function() {console.log(“Elvin Meherrembeyli”); } } ;myObj.func();
Bunlar qısaca JavaScript üçün Birinci dərəcəli funksiyalardır.
Higher-order functions
High order funksiyalar: Sizin yazdığınız funksiyalar parametr olaraq başqa bir funksiya alırsa və ya nəticə olaraq basqa funksiya verirsə belə funksiyalara high order funksiyalar deyirlər. High order funksiyalara nümunə olaraq Array obyektində olan filter(),map() və reduce() nümünə verə bilərik. Biz nümunədə filter() funksiyasından istifadə edərək higher order functionlari izah edəcəyik.Mövzunu izah etmək üçün filter() funksiyasindan istifadə edək.
Verilmis arrayda 10 dan kicik ededleri gostermek lazimdir.Bunun üçün for dovrundən və ya filter() funksiyasindan istifadə edə bilərik.
İlk olaraq for dövründən istifade edək:
let reqemler=[3,6,56,87,32,1,67,10,9]; let res=[ ]; for (let i = 0; i < reqemler.length; i++) { if(reqemler[i]<10){ res+=reqemler[i]; } } console.log(res);
Nəticə: res=3,6,9 olacaq
Bu nəticəni daha az kod yazaraq da ala bilərik:
let reqemler=[3,6,56,87,32,1,67,10,9];let res = reqemler.filter((element) => element < 10); console.log(res)
Nəticə: res=3,6,9 olacaq
Göründüyü kimi hər iki kodda eyni nəticəni aldıq . Amma bir fərq var ikinci kodda filter() funksiyasindan istifadə edərək hamısını bir kod şəklində yazdıq.
Məqalə Yazarları :
Logolar, bəlkə də bir markanın və ya şirkətin marketinq müvəffəqiyyəti üçün bir müştəri və ya işə götürənlə ilk görüş...
22.04.2021
Bu gün bir şirkətin web sayta sahib olmağı bir dükana, ofisə və ya telefon nömrəsinə sahib olmaq qədər əhəmiyyətlidir. Tədqiqatlar nəticəsində öyənil...
22.04.2021
Bəzən bəzilərinizin eşitmədiyi bir sözə rast gəlirik.
”Rebranding” Rebranding nədir? Necə edilir və bunun insanlarla, şirkətlərlə, firmalarlara nə ...
22.04.2021
Bakı şəhəri Heydər Əliyev prs. 115
Caspian Sport Plaza, 3-cü bina, 12-ci mərtəbə.