Javascript-də Funksional Proqramlama
Məqsədim son zamanlar yenidən diqqət qazanan Funksional Proqramlama (FP) haqqında ümumi təsvir yaratmaq və javascript-də necə tətbiq edildiyini göstərmək və onun funksional programlama prinsiplərinin nə dərəcədə dəstəklədiyini və ona yer verdiyini anlatmaqdır.
Funksional Proqramlama (FP) Object Oriented Proqramlamadan (OOP) fərqli olaraq, məsələləri obyekt yönlü düşünməklə yox, riyazi funksiyalar ilə yanaşmaqla həll etməkdir.
Onu qeyd edim ki, Javascript ilə əlaqədar funksional proqramlama OOP kimi asan, geniş öyrədilən və internetdə çox tapılan mövzu deyil. Ona görə onu kitablardan öyrənmək daha yaxşı olardı. Aşağıdakı kitabları tövsiyə edirəm.
Functional Programming in JavaScript
burdan yükləyə bilərsiz. link işləməsə google-dan asan tapılacaq.
Funksional proqramlama haqda digər kitablar
Javascript multi-paradigm dildir. yəni bir neçə paradiqmanı — event-driven, functional, imperative, object-oriented(prototype-based) dəstəkləməsidir. Javascript-in 50-ci illərdən yaranan Lisp və Scheme kimi pure(saf) funksional programlama dillərindən ilhamlanaraq bu paradiqmanı dəstəkləməsi və Java-dan fərqli olaraq funksiyalara özündə first-class citizen yer verməsi onu daha da “elastik“ edir.
Modern dillərdən həmçinin funksional proqramlamanı dəstəkləyən Python, Julia, Ruby, Clojure, Elm, Erlang, Haskell, Elixir, Scala, Rust və s. göstərmək olar.
Scheme, Lisp, Haskel isə pure funksional — yəni tamamilə funksional olub object oriented dəstəkləmir.
Funksional Proqramlama əsasında proqramın data ilə davranışını (behavior) bir-birindən ayırmaq və bununla da yan təsirləri (side effects) azaltmaq, asan test — debug edilə bilən , deklarativ predictable (oxunaqlı, qabaqcadan bildirilə bilən), modular, təkrar istifadə edilən təmiz kod yazmaq məqsədi dayanır. Gəlin bunu 2 ölçülü (2d) array -i 1ölçülü array-ə çevirən kod ilə göstərim.
aşağıdakı adi qaydada olan üsuldur.
Bu isə funksional yazılmış şəkildə olandır.
Təsadüfi deyil ki , hər dəqiqə 29 milyon mesaj göndərilən Whatsapp, Amazon, Bet365 və s. kimi böyük şirkətlərdə və Security, Blockchain və IoT kimi sahələrdə Erlang, Elixir kimi funksional dillərdən istifadə edilir.
Funksional Proqramlam ilə OOP fərqi
Qeyd etdiyim kimi Funksiyalara Javascript-də first-class obyektlər olaraq yer verilir. Yəni siz bir funksiyanı digər funksiyanın argumenti olaraq göndərə, ya da digər funksiyadan return-qayatara — belə funksiyalara Higher Order functions deyilir , adsız funksiyalar— anonim funksiyalar yarada, anonymous functions, Funksiyalar ilə closures yarada və bir çox şəkildə istifadə edə bilərsininz.
Aşağıdakı nümunədə Closure (qapanma) effekti göstərilmişdir. zipCode() icra olunub “qapandıqdan” sonra onun daxilindəki data-nı ya da ki, dəyişkənləri yalnız onun return etdiyi funksiyalar vasitəsilə əldə edə bilərik.
Javascript-də funksional programlamanı daha rahat tətbiq etmək üçün bir neçə kitabxana vardır.
Underscore.js , Lodash , Ramda.js, Lazy.js , RxJS və s.
və sonda onu qeyd etmək istərdim ki, seçdiyiniz bu günün trend dillərindən asılı olmayaraq sizi sürətlə dəyişən texnologiyalar dövründə xilas edən öyrənəcəyiniz OOP , FP konseptləri və alqoritmlər haqda daimi bilikləriniz olacaq. Dil ölə bilər — məntiq yox…
Hələlik.