Javascript-də Funksional Proqramlama

Emin Qasimov
4 min readJun 22, 2019

--

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.

y kombinator

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

Functional Programming in JavaScript

burdan yükləyə bilərsiz. link işləməsə google-dan asan tapılacaq.

Functional Programming in JavaScript

Functional Programming in JavaScript

bunu da burdan yükləyə bilərsiniz. bunu birinici oxumağınız yaxşı olardı.

Funksional proqramlama haqda digər kitablar

functional programming books in javascript

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 LispScheme 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.

Companies choose Erlang and Elixir, because of the ease with which fault-tolerant and scalable programs deployable in a distributed network can be written. Erlang and Elixir are both functional languages that can use an Actor system to simplify the handling of concurrency and make error recovery possible

Funksional Proqramlam ilə OOP fərqi

FP vs OOP

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.

closures

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.

--

--