Thet Khine
2 min readJan 4, 2021

--

FP နဲ.ပတ်သတ်တဲ့အလွဲ‌တွေ

ခုတလော functional programming က ခေတ်ထလာတော့ ဒီမှာ ကြောင်တောင်တောင် တွေ တွေ.ရပြန်တယ်။

အဲ့တာဘာလဲဆိုတော့ functional programming ဆိုတာ function တွေသုံးလိုက်ရင် functional programming ဖြစ်တယ်လို.ထင်နေတာကိုပဲ။ function တွေခွဲရေးတာပေါ့။ (အဲ့တာကို procedural programming လို.ခေါ်တာ)

တကယ်က functional programming ဆိုတာ lambda calculus ဆိုတဲ့ computational model အပေါ်အခြေခံတယ်။

ဥပမာ imperative သည် turing machine ပေါ်အခြေခံတယ်။

Lambda Calculus ဆိုတာ နားလည်အောင်ပြောရရင် function ဆောက်မယ် နောက် function application ( function call), alpha reduction, beta reduction အစရှိတဲ့ အခြေခံံံံံံံံံံအဲ့တာလေးနဲ. computation အကုန်ကိုလုပ်ယူတာ။

ဥပမာ function တွေကိုသုံးပြီး number တွေဆောက်တာ၊ control flow မှာ for , while, do မလိုဘူး function တွေနဲ.လုပ်တာ. ကုန်ကုန်ပြောရရင် boolean type ကအစ function တွေနဲ.ဆောက်တာ နောက် အပေါင်းလို arithmetic မှာလဲ + ဆိုတာမရှိဘူး ခုနက function နဲ.ဆောက်ထားတဲ့ number တွေကို plus ကိုလုပ်နိုင်တဲ့ function (+ကို function နဲ.ပဲဆောက်တာ)

ပြောရရင် အားလုံး အားလုံး အကုန်ကို function ဆိုတာလေးနဲ.ဆောက်ပြီးရေးတာကို labmda calculus လို.ခေါ်တယ်

အသေးစိတ်ရေးထားတယ် သိချင်ရှာဖတ်။

နောက်တခု misconception က Java, JS, Swift, Python စတာတွေမှာ lambda function လိုကောင်တွေ ပေးတာလောက်နဲ. FP paradigm ကို အကုန် မလုပ်ပေးနိုင်ဘူး. တစိတ်တပိုင်းကိုပဲ လုပ်ယူလို.ရတယ်။

ဆိုချင်တာက တကယ့့််် Functional Programming ကို ခုနက language တွေကနေ သင်လို.မရဘူး။ (FP concept အကုန်သင်ချင်လို.မဖြစ်နိုင်ဘူး)

ဥပမာ first class function, higher order function အစရှိတာတွေ ခုနက language တွေမှာရမယ်၊ နောက် currying, composition စတာတွေကို library တွေသုံးရင်ရမယ်။

ဒါပေမဲ့ lazy evaluation, algebraic data type, higher kind type, higher kind type polymorphism, pattern matching(C# မှာ အကန်.အသတ်နဲ.ရတယ်), type inferencing, Curry-Howard isomorphism, Hindley-Milner type inference , type signature, record, variant, tail call optimization တွေ မရဘူး F#, Haskell လိုကောင်တွေမှာပဲရတယ်။

နောက် misconception တခုက FP မှာ OO လို OO design pattern တွေသုံးတယ်ထင်တဲ့ အတွေးမျိုးပဲ။ Object မရှိပဲ OO design pattern တွေသုံးမရဘူး။ Monoid, Functor, Monad လို ကောင်တွေ(Category theory က ကောင်တွေ တခြားဟာတွေရောပေါ့ Setoid,Ord,Semigroup blah blah blah) ကို FP design pattern လို.ပြောလို,ရတယ်။ ဥပမာ Java မှာသုံးနေတဲ့ Optional ဆိုတာ Monad ပဲ MayBe monad လို.ပြောလို.ရတယ် Monad ဆိုတာလဲ general concept ပဲ ဆိုချင်တာက specific monad, eg Either, MayBe, IO, List monad အစရှိတာတွေ ရှိတယ် ဒါတွေသည် functional pattern တွေ။ နောက် exception handling ဆို continual passing style သုံးတယ်။

၂၀၂၀ မှာ နောကျဆုံး မတေ််တာ‌ေ ဖောငျးထုသောစာ ။ ဒီနှစျတော့ ဖောငျးမထုတော့ပါဘူး

--

--