কিছুদিন ধরে Functional Programming এর ব্যাপারে শুনছি। আসলে Functional Programming কি?

Functional Programming কি Object Oriented Programming এর চেয়ে বেশি কার্যকরী?

কোথায় Functional Programming ব্যবহার করা যেতে পারে?

asked 01 Jan '16, 09:19

Kaiser%20Ahmed's gravatar image

Kaiser Ahmed
3.2k522

edited 07 Sep '16, 17:47


খুব সহজ করে যদি বলতে চাই, তাহলে - প্রোগ্রামিং মূলত এমন – একটা ইনপুট থাকে, একটা ফাংশন সেই ইনপুটকে প্রসেস করে একটা আউটপুট তৈরি করে। সুতরাং একটা প্রোগ্রামের মূলত দুইটা অংশ দেখা যায়। একটি হলে যে কাজ করে যাকে আমরা ফাংশন বলি, অন্যটি হলো- ডাটা যাকে প্রসেস করা হয় বা তৈরি করা হয়।

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

এই উপায় গুলো যখন ম্যাটেরিয়ালইজড বা বাস্তবায়ন হয়, তখন একদল মনে করলো যে, আমরা যখন কোড লিখবো, তখন ডাটা গুলো একটা আলাদা যায়গায় থাকবে আর ফাংশন গুলো একটা আলাদা যায়গায় থাকবে। ফাংশনগুলো সেই আলাদা যায়গা থেকেই ডাটা গুলোকে প্রসেস করবে। ফাংশন গুলো পিউর থাকবে অর্থাৎ ফাংশন নিজে থেকে কোন ডাটা পরিবর্তন করবে না, তার কাছে একটা ইনপুট এর জন্যে সবসময় একি আউটপুট পাওয়া যাবে। সহজ কথায়,একটা ফাংশন কখনো ডাটা পরিবর্তন করবে না। ম্যাথ এর ফাংশন এর মতো। অর্থাৎ y = f(x) + c এই ফাংশন এর মাঝে x এর একটি ভ্যালুর জন্যে y এর মান সব সময় একি থাকবে। এর মাঝে যদি অন্য কোন কাজ হয়, যেমন ফ্লাস লাইট জ্বলে উঠে কিংবা অন্য যেকোন কিছু তাহলে সেটা পিউর ফাংশন নয়। এই গরুত্বপূর্ণ বৈশিষ্ট্যটি ফাংশনাল প্রোগ্রামিং এর মূলে রয়েছে। এতে করে যখন একটি একটি ফাংশন আরেকটি ফাংশন করে ডাটা দিচ্ছে বা নিচ্ছে, কেও তার ইনপুটকে পরিবর্তন করছে না, অর্থাৎ একটি একটি ফাংশনকে যে ডাটা দেওয়া হচ্ছে, সে তার নিজের মাঝে তার একটা কপি রেখে সেটাকে প্রসেস করে একটি আউটপুট দিচ্ছে। এতে করে সব থেকে বড়ো সুবিধে হচ্ছে, সবাই ইন্ডিপেন্ডেন্টলি কাজ করতে পারছে, কোন ফাংশন কোন সেইম ডাটা একসেস করছে না, এতে করে আমাদের কনকারেন্ট কম্পিউটিং অনেক সহজ হয়ে যাচ্ছে। এখন আপনি গুগুল করে জেনে নিন - What is concurrent programming

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

বাকিটুকু অর্ণবের গান থেকে জেনে নিতে পারেন -

বাক্সে বাক্সে বন্দী বাক্স

বাক্সে বাক্সে বন্দী বাসা

বাক্স দিয়ে বাক্স গড়া

বাক্সতে সব স্বপ্ন আশা ।।

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

বাকি সব সিচুয়েশানের জন্য অবজেক্ট ওরিয়েন্ট কোড প্রয়োজনিয়তা ফুরিয়ে যাচ্ছে না,বরং সেটিই সহজ এবং সঠিক হবে।

নিজের লিংক গুলো দেখে নিতে পারেন -

https://www.youtube.com/watch?v=7Zlp9rKHGD4

https://www.youtube.com/watch?v=Ee5t_EGjv0A

permanent link

answered 02 Jan '16, 18:24

bazlur_rahman's gravatar image

bazlur_rahman
1.3k17

edited 23 Oct '16, 07:41

Your answer
toggle preview

Follow this question

By Email:

Once you sign in you will be able to subscribe for any updates here

By RSS:

Answers

Answers and Comments

Markdown Basics

  • *italic* or _italic_
  • **bold** or __bold__
  • link:[text](http://url.com/ "title")
  • image?![alt text](/path/img.jpg "title")
  • numbered list: 1. Foo 2. Bar
  • to add a line break simply add two spaces to where you would like the new line to be.
  • basic HTML tags are also supported

Question tags:

×214
×26
×1

question asked: 01 Jan '16, 09:19

question was seen: 2,103 times

last updated: 23 Oct '16, 07:41