ফাংশনাল প্রোগ্রামিং

Functional Programming ফাংশনাল প্রোগ্রামিং

সফটওয়্যার ডিজাইন সাধারণত বিভিন্ন উপায়ে করা হয়। কিন্তু এর মধ্যে সবচেয়ে অধিক পরিচিত দুটি ডিজাইন ফিলোসোফি অথবা প্রোগ্রামিং প্যারাডিগম হলো- অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) এবং ফাংশনাল প্রোগ্রামিং (FP)

প্রোগ্রামিং প্যারাডিগম হচ্ছে সফটওয়্যার ডিজাইন এবং কন্সট্রাকশনের একটি মাধ্যম। প্রোগ্রামিং প্যারাডিগম কিছু নির্দিষ্ট প্রিন্সিপালের উপর নির্ভর করে এবং সফটওয়্যার অ্যাপ্লিকেশনের ডিজাইন এবং কন্সট্রাকশনকে ক্যারেক্টারাইজ এবং অরগানাইজ করতে ব্যবহৃত হয়।

ফাংশনাল প্রোগ্রামিং হচ্ছে একটি প্রোগ্রামিং প্যারাডিগম যা এক্সপ্রেশন এবং ডিক্লেয়ারেশন এর মাধ্যমে সফটওয়্যার বিল্ড করার দিকে ফোকাস করে। এই প্রকাশনায় আমরা অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) এবং ফাংশনাল প্রোগ্রামিং (FP) এর মূল বিষয়গুলো সম্পর্কে আলোচনা করবো।

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP)

অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং (OOP) হচ্ছে একটি প্রোগ্রামিং প্যারাডিগম যা অবজেক্ট এবং স্টেটমেন্টের উপর নির্ভর করে। অবজেক্ট হচ্ছে প্রোগ্রামিং অ্যাবস্ট্রাক্টশন যা একটি অ্যাপ্লিকেশন অর্গানাইজ করতে ব্যবহার করা হয়। অবজেক্টকে সাধারণত ডাটা ফিল্ড হিসেবে ডিফাইন করা হয় যার মধ্যে ইউনিক অ্যাট্রিবিউট এবং বিহেভিয়ার রয়েছে।

অবজেক্ট মূলত ক্লাসের অন্তর্ভুক্ত। ক্লাস হচ্ছে একটি ব্লু-প্রিন্টের মতো যা ব্যবহার করে কতগুলো আলাদা অবজেক্ট তৈরি করা যায়। এখানে, একই ক্লাসের অন্তর্ভুক্ত অবজেক্টগুলো ভিন্ন ভিন্ন ডাটা সংরক্ষণ করে। অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে, স্ট্যাটমেন্ট হচ্ছে ইন্সট্রাকশন ড্রাইভেন কোড। OOP সফটওয়্যার ডেভেলপমেন্টের জন্য অসংখ্য প্রোগ্রামিং ল্যাংগুয়েজ ব্যবহৃত হয়। এদের মধ্যে অধিক জনপ্রিয় অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং ল্যাংগুয়েজ হচ্ছে সি++, জাভা এবং পাইথন।

ফাংশনাল প্রোগ্রামিং (FP)

ফাংশনাল প্রোগ্রামিং (FP) হচ্ছে এমন একটি প্রোগ্রামিং প্যারাডিগম যা এক্সপ্রেশন এবং ডিক্লেয়ারেশনের উপর নির্ভর করে। ফাংশনাল প্রোগ্রামিং, অ্যাপ্লিকেশন বিল্ড করার ক্ষেত্রে অবজেক্টের উপর নির্ভর না করে ফাংশনগুলোর উপর নির্ভর করে।

ধারণা করা হয় ল্যাম্বডা ক্যালকুলাস থেকে ফাংশনাল প্রোগ্রামিংয়ের উৎপত্তি হয়, যা ১৯৩০ সালে তৈরি হয়েছিল।   ফাংশনাল প্রোগ্রামিং সাতটি মূল কনসেপ্টের উপর নির্ভর করে: ডিক্লারেটিভ ফাংশনস, পিউর ফাংশনস, হাইয়ার অর্ডার ফাংশনস, শেয়ারড স্টেট, ইমিউটাবিলিটি, সাইড ইফেক্টস এবং ফাংশন কম্পোজিশন। 

ফাংশনাল প্রোগ্রামিংয়ের উদ্দেশ্য হচ্ছে কোডকে অধিক সংক্ষিপ্ত করা, প্রেডিক্টেবল এবং টেস্টেবল করা। কিছু কমন ফাংশনাল প্রোগ্রামিং ল্যাংগুয়েজ হচ্ছে জাভাস্ক্রিপ্ট, পিএইচপি, এবং পাইথন

ডিক্লারেটিভ ভার্সেস ইম্পারেটিভ

কোড সাধারণত দুটি উপায়ে লিখা হয়ঃ ডিক্লারেটিভ এবং ইম্পারেটিভ। ফাংশনাল প্রোগ্রামিং প্যারাডিগমে লেখা কোডগুলো সাধারণত ডিক্লারেটিভ হয়।        

ডিক্লারেটিভ কোড হচ্ছে এমন কোড যা কোনো কন্ট্রোল ফ্লো ছাড়া কম্পিউটেশনের লজিকগুলো এক্সপ্রেস করে। ইম্পারেটিভ কোড হচ্ছে এমন কোড যা স্ট্যাটমেন্ট ব্যবহার করে কোনো প্রোগ্রামের স্ট্যাট/অবস্থা পরিবর্তন করে।

ডিক্লারেটিভ এবং ইম্পারেটিভ কোড সম্পর্কে যদি আপনার পূর্ব ধারণা না থেকে থাকে তবে এই ডেফিনিশন থেকে বোঝা আপনার জন্য কঠিন হবে। ডিক্লারেটিভ কোড সাধারণত ফাংশনাল প্রোগ্রামিংয়ে ব্যবহৃত হয় এবং ইম্পারেটিভ কোড অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে ব্যবহার করা হয়। আসলে কোন কোড স্টাইলটি ব্যবহার করা উচিত হবে, এটা সঠিকভাবে বলা সম্ভব না। যাইহোক, ফাংশনাল প্রোগ্রামিং প্যারাডিগমে ইম্পারেটিভের তুলনায় ডিক্লারেটিভ কোড বেশি সুইটেবল।      

ইম্পারেটিভ ফাংশন

ইম্পারেটিভ কোড অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ে অধিক কমন। এটির টেকনিক্যাল ডেফিনেশন একটু কমপ্লিকেটেড, কিন্তু এটা সিপ্লিফাই করা সম্ভব, সহজ কিছু উদাহরণের মাধ্যমে। ইম্পারেটিভ কোডে একটি প্রব্লেম আপনি কিভাবে সলভ করবেন তা বিস্তারিত বলা হয়।

যেমন, একটি রেস্টুরেন্টে আপনি একটি মন মতো টেবিলের খোঁজ করছেন, সেক্ষেত্রে আপনি হোস্ট/হোস্টিসকে বলবেন ” আমি কর্ণারের সীটটি খালি দেখতে পাচ্ছি,  আমি এবং আমার বন্ধু সেখানে বসতে চাই। এটি হচ্ছে একটি ইম্পারেটিভ এপ্রোচ, কারণ আপনি যেমনটি চান ঠিক তেমনি বিবরণ দিয়েছেন।   

ডিক্লারেটিভ ফাংশন

ফাংশনাল প্রোগ্রামিংয়ের ক্ষেত্রে ডিক্লারেটিভ কোড অধিক কমন। যা করা হবে শুধু তা বলে ডিক্লারেটিভ কোডকে সিমপ্লিফাইড করা সম্ভব। পূর্বের রেস্টুরেন্ট উদাহরণের প্যারাগ্রাফকে কন্সিডার করে বলা যায়ঃ একটি টেবিল পাওয়ার ডিক্লারেটিভ এপ্রোচ হচ্ছে হোস্ট/হোস্টিসকে ডাক দেয়া এবং বলা “দুইজনের জন্য টেবিল লাগবে”।

এক্ষেত্রে আমরা শুধুমাত্র তা-ই বলেছি যা আমাদের জন্য  দরকারী, প্রতিটি স্টেপ বর্ননা করা প্রয়োজন হয় না। এ ক্ষেত্রে মেশিনের অপারেশনাল মডেলের চেয়ে ডেভেলপারের মেন্টাল মডেলকে অনুসরণ করা হয়।

উপরের ডেফিনিশনগুলো থেকে আমরা উপলব্ধি করতে পারি যে ডিক্লারেটিভ প্রোগ্রামিং হচ্ছে কিছু ইম্পারেটিভ ইমপ্লিমেন্টেশনের এবস্ট্রাকশন।

এখন, চলুন এই ডেফিনিশন থেকে বাস্তব কোডের দিকে যাওয়া যাকঃ    

function addImperative( arr ) 
{ 
   let result = 0; 

   for ( let i = 0; i < arr.length; i++ ){
   
   result += arr[ i ]; 
}
   return result;
}

function addDeclarative( arr ) 
{ 

   return arr.reduce( ( red, val ) => red + val, 0 );

}

এই উদাহরণে, দুটি ফাংশন নেয়া হয়েছে ভ্যালুগুলো অ্যারেতে এড করার জন্য। প্রথম ফাংশনে, addImperative, এই প্রব্লেমের একটি ইম্পারেটিভ এপ্রোচ। এখানে কোড অ্যারে কিভাবে এড হবে তা স্টেপ বাই স্টেপ দেখায়।

দ্বিতীয় ফাংশনে, addDeclarative, এই একই প্রব্লেমের একটি ডিক্লারেটিভ এপ্রোচ। আ্যরে কিভাবে এড হবে এই কোড বর্ননা করে। এটি জাভাস্ক্রিপ্ট অ্যারে রিডিউস অপারেশন ব্যবহার করে ইম্পারেটিভ সলিউশনের (for loop) বেশিরভাগ বাদ দিয়ে দেয়।                

ইম্পারেটিভ কোডের পরিবর্তে ডিক্লারেটিভ কোড লিখা শুরু করার সহজ উপায় হচ্ছে ফাংশন ক্রিয়েট করা। এই ফাংশনগুলো ইম্পারেটিভ কোডের স্টেপ বাই স্টেপ নেচারকে/অংশকে বাদ দিয়ে দিবে। অ্যারে অপারেশন যেমন- find, map, এবং reduce. এই ফাংশনগুলো অ্যারে ফাংশন যা ডিক্লারেটিভ।

এই ফাংশনগুলো ব্যবহার করার ফলে আপনার কোড ডিক্লারেটিভ কনসেপ্টকে পরিচয় দিতে সাহায্য করবে এবং আপনার লিখা কিছু ইম্পারেটিভ কোডও রিডিউস করবে।  

মন্তব্য করুন

আপনার ই-মেইল এ্যাড্রেস প্রকাশিত হবে না। * চিহ্নিত বিষয়গুলো আবশ্যক।

You May Also Like
deno vs nodejs
আরও পড়ুন

ডেনো এবং নোড জেএসের মধ্যে এখন পর্যন্ত কোনটির জনপ্রিয়তা বেশি?

ডেনো কি? ডেনো হচ্ছে জাভাস্ক্রিপ্ট ও টাইপস্ক্রিপ্টের একটি সিকিউর রানটাইম, এটি জাভাস্ক্রীপ্টের V8 ইঞ্জিন এবং Rust ল্যাঙ্গুয়েজ ব্যবহার…
পিএইচপি'র আদ্যপান্ত
আরও পড়ুন

পিএইচপি কি? কেন কিছু মানুষের কাছে এটি পছন্দনীয় নয়?

ওয়েবের ৭৮.৯% ওয়েবসাইটই পিএইচপি তে রান হওয়া স্বত্বেও এটি ভবিষ্যতের ইকোসিস্টেমের সাথে যাচ্ছেনা। বিশেষ করে বর্তমানে সবাই জ্যাম স্ট্যাক (JAMStack) কে খুবই আপন করে নিয়েছে।
প্রোগ্রামিং- সহজ নাকি কঠিন?
আরও পড়ুন

প্রোগ্রামিং- সহজ নাকি কঠিন?

প্রোগ্রামিং শুরু করার আগে একটি প্রচলিত লাইন যা প্রায় সকল বিগিনারদের শুনতে হয়- “প্রোগ্রামিং খুব সহজ এবং এটি…
Projuktir Avijatri Rust Programming language
আরও পড়ুন

Rust নতুন প্রজন্মের প্রোগ্রামিং ল্যাংগুয়েজ

Rust এর জন্ম ২০০৯ সালে মজিলার একটি রিসার্চ প্রজেক্ট হিসেবে। ২০০৯ এ তারা চিন্তা করছিল কিভাবে একটি উন্নত…
Web-Development-career-roadmap Projuktir Avijatri ওয়েব ডেভেলাপমেন্ট ক্যারিয়ার যেভাবে শুরু করতে হবে প্রযুক্তির অভিযাত্রি Front End Back End Developer ক্যারিয়ার Career
আরও পড়ুন

ওয়েব ডেভেলপমেন্টে ক্যারিয়ার গড়তে যা শিখতে হবে

নতুন সব টেকনোজির পাশাপাশি প্রতিদিন অসংখ্য ওয়েবসাইট ইন্টারনেটে যুক্ত হচ্ছে, যার ফলে ওয়েব ডেভেলপারদের চাহিদা ক্রমশ বাড়ছে। ওয়েব…
Bangla C programming Resource Projuktir Avijatri c programming tutorial c resources bangla c for beginner বাংলায় সি প্রোগ্রামিং রিসোর্স সি প্রোগ্রামিং ল্যাঙ্গুয়েজ সি প্রোগ্রামিং টিউটোরিয়াল বাংলা বই সি প্রোগ্রামিং ব্লগ সি প্রোগ্রামিং অনলাইন টিউটোরিয়াল
আরও পড়ুন

সি প্রোগ্রামিং শুরু করার রিসোর্স

সি প্রোগ্রামিং টুকিটাকিসংগ্রহ করা বাংলা রিসোর্স; তো এখান থেকেই সি শেখা শুরু করা যাক! যখন আমাদের হাতে কিছু সময় থাকে,…