আমি দেরি পর্যন্ত হাস্কেলের মতো কার্যকরী ভাষা ব্যবহার সম্পর্কে অনেক কথা শুনেছি। ফাংশনাল প্রোগ্রামিং বনাম অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের কয়েকটি বড় পার্থক্য, পক্ষে-বিপক্ষে কী কী?
আমি দেরি পর্যন্ত হাস্কেলের মতো কার্যকরী ভাষা ব্যবহার সম্পর্কে অনেক কথা শুনেছি। ফাংশনাল প্রোগ্রামিং বনাম অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের কয়েকটি বড় পার্থক্য, পক্ষে-বিপক্ষে কী কী?
উত্তর:
আমি বলব এটি ইম্পিरेटিভ প্রোগ্রামিং বনাম আরও কার্যকরী প্রোগ্রামিং ।
সবচেয়ে বড় পার্থক্য হ'ল ইমপিটেটিভ প্রোগ্রামিং কন্ট্রোল ফ্লো সম্পর্কে এবং ফাংশনাল প্রোগ্রামিং ডেটা ফ্লো সম্পর্কে । এটি বলার আর একটি উপায় হ'ল ফাংশনাল প্রোগ্রামিং কেবল এক্সপ্রেশন ব্যবহার করে যখন অপরিহার্য প্রোগ্রামিংয়ে ভাব এবং বিবৃতি উভয়ই ব্যবহৃত হয়।
উদাহরণস্বরূপ, অত্যাবশ্যক প্রোগ্রামিং ভেরিয়েবল এবং লুপগুলিতে স্টেট পরিচালনা করার সময় প্রচলিত রয়েছে, যখন কার্যকরী প্রোগ্রামিংয়ে রাষ্ট্র প্যারামিটার পাসিংয়ের মাধ্যমে পরিচালিত হয়, যা পার্শ্ব প্রতিক্রিয়া এবং অ্যাসাইনমেন্টগুলি এড়ায়।
একটি তালিকার যোগফল গণনা করার জন্য একটি ক্রিয়াকলাপের জন্য প্রয়োজনীয় সিউডো-কোড (যোগফলটি একটি চলকতে রাখা হয়):
int sumList(List<int> list) {
int sum = 0;
for(int n = 0; n < list.size(); n++) {
sum = sum + list.get(n);
}
return sum;
}
একই ফাংশনের জন্য কার্যকরী সিউডো-কোড (যোগফলটি প্যারামিটার হিসাবে দেওয়া হয়):
fun sumList([], sum) = sum
| sumList(v::lst, sum) = sumList(lst, v+sum)
আমি উপস্থাপনা সুপারিশ কার্যকরী প্রোগ্রামিং সঙ্গে শ্রিউ এফেক্টস দ্বারা সাইমন Peyton-জোনস কার্মিক ধারণা একটি ভাল পরিচয়ের জন্য।
ক্রিয়ামূলক প্রোগ্রামিং একটি ঘোষণামূলক মডেলের উপর ভিত্তি করে লাম্বদা ক্যালকুলাস থেকে এর শিকড় থাকে। এটি প্রচুর দুর্দান্ত ধারণাগুলি সরবরাহ করে যা আরও প্রয়োজনীয় ভাষা যেমন সি ++ এবং সি # থেকে নেওয়া যেতে পারে।
কয়েকটি উদাহরণের মধ্যে উল্লেখযোগ্য স্বচ্ছতা, ল্যাম্বদা ফাংশন, প্রথম শ্রেণির ফাংশন, অলস এবং আগ্রহী মূল্যায়ন এবং অপরিবর্তনীয়তা অন্তর্ভুক্ত রয়েছে।
যদি অন্য কিছুই না হয় তবে ধারণামূলক ধারণাগুলির জন্য কার্যকরী প্রোগ্রামিং শেখা কার্যকর। এটি আপনার প্রোগ্রামিংয়ের পদ্ধতি পরিবর্তন করবে এবং প্রোগ্রামিং সম্পর্কে চিন্তা করবে। এবং আমি অনুমান করব যে ভবিষ্যতে ক্রিয়ামূলক প্রোগ্রামিং যেমন অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিং হয়েছে তত গুরুত্বপূর্ণ হবে।
শুরু করার জন্য আপনি হাস্কেলের মতো খাঁটি কার্যকরী ভাষা ব্যবহার করতে বেছে নিতে পারেন বা আপনি এফ # এর মতো সংকর ব্যবহার করতে পারেন ।
বেশিরভাগ ভাল বিশ্ববিদ্যালয়গুলি ফাংশনাল প্রোগ্রামিংয়ের আওতায় আসবে এবং আপনি যদি স্কুলে যান তবে আমি আপনাকে পরামর্শ দিচ্ছি যে আপনি এই কোর্সটি গ্রহণ করবেন।
ফাংশনাল প্রোগ্রামিং বনাম অবজেক্ট ওরিয়েন্টেড প্রোগ্রামিংয়ের কয়েকটি বড় পার্থক্য, পক্ষে-বিপক্ষে কী কী?
ওয়েল অবজেক্ট প্রোগ্রামিং দুর্দান্ত কারণ এটি আপনাকে আপনার জটিল সমস্যাটিকে শ্রেণিবিন্যাসে মডেল করার অনুমতি দেয় যাতে আপনি সমস্যাটি আরও সহজ করতে পারেন। আপনি যখন পরিবর্তনীয় অবজেক্ট ব্যবহার করার সময় মাল্টি থ্রেডেড প্রোগ্রামিং বিবেচনা শুরু করেন তবে এটি খুব শক্ত হয়ে যায়। এই ধরনের ক্ষেত্রে আপনাকে সিঙ্ক্রোনাইজেশন অবজেক্টগুলির ভারী ব্যবহার করতে হবে এবং একটি বৃহত অ্যাপ্লিকেশনটি নিখুঁত করা অসম্ভব।
সেই স্থানে ক্রিয়ামূলক প্রোগ্রামিং আসে imm কারণ অপরিবর্তনীয় কার্যকারিতা প্রোগ্রামিংয়ের মতো জিনিসগুলি সত্যিকার অর্থে মাল্টি থ্রেডেড প্রোগ্রামগুলিকে সহজতর করে। এটি কোনও তাত্ক্ষণিকভাবে কিছুটা সমান্তরাল করা সহজ করে দেয় আপনি যখন জানেন যে কোনও ফাংশনে ইনপুট এক্স দেওয়া এটি সর্বদা ওয়াই আউটপুট করে Also
(এই উত্তরটি স্ট্যাকওভারফ্লোতে একটি বদ্ধ প্রশ্নের উত্তর থেকে অভিযোজিত ))
ফাংশনাল প্রোগ্রামিং এবং অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিংয়ের মধ্যে একটি বড় পার্থক্য হ'ল প্রত্যেকে বিভিন্ন ধরণের সফ্টওয়্যার বিবর্তনে আরও ভাল:
তোমাদের মধ্যে একটি নির্দিষ্ট সেট আছে যখন অবজেক্ট-কেন্দ্রিক ভাষার ভালো অপারেশন উপর জিনিষ , এবং আপনার কোড উন্নতির সাথে, আপনি প্রাথমিকভাবে নতুন জিনিস যোগ করুন। বিদ্যমান ক্লাসগুলি বাস্তবায়িত করে এমন নতুন ক্লাস যুক্ত করে এটি সম্পাদন করা যেতে পারে এবং বিদ্যমান ক্লাসগুলি একা থাকে।
কার্যকরী ভাষাগুলি ভাল থাকে যখন আপনার কাছে জিনিসগুলির একটি নির্দিষ্ট সেট থাকে এবং আপনার কোডটি বিকশিত হওয়ার সাথে সাথে আপনি প্রাথমিকভাবে বিদ্যমান জিনিসগুলিতে নতুন ক্রিয়াকলাপ যোগ করেন । বিদ্যমান ফাংশনগুলির সাথে গণনা করা নতুন ফাংশন যুক্ত করে এটি সম্পাদন করা যায় এবং বিদ্যমান ফাংশনগুলি একা থাকে।
যখন বিবর্তনটি ভুল পথে যায়, আপনার সমস্যা আছে:
কোনও অবজেক্ট-ভিত্তিক প্রোগ্রামে একটি নতুন ক্রিয়াকলাপ যুক্ত করার জন্য একটি নতুন পদ্ধতি যুক্ত করতে অনেক শ্রেণীর সংজ্ঞা সম্পাদনা করতে হতে পারে।
একটি কার্যকরী প্রোগ্রামে একটি নতুন ধরণের জিনিস যুক্ত করতে একটি নতুন কেস যুক্ত করতে অনেক ফাংশন সংজ্ঞা সম্পাদনা করতে হতে পারে।
এই সমস্যাটি বহু বছর ধরে সুপরিচিত; 1998 সালে, ফিল ওয়েডলার এটিকে "এক্সপ্রেশন সমস্যা" হিসাবে অভিহিত করেছিলেন । যদিও কিছু গবেষক মনে করেন যে ভাবের সমস্যাটিকে মিশ্রিনের মতো ভাষার বৈশিষ্ট্যগুলির সাথেও সম্বোধন করা যেতে পারে, তবে একটি বহুল স্বীকৃত সমাধান এখনও মূলধারায় পৌঁছেছে।
কোন বাস্তব বনাম আছে। তারা পুরোপুরি পরিপূরক হতে পারে। এখানে এফপি ভাষা রয়েছে, যা ওওপি সমর্থন করে। তবে সম্প্রদায়গুলি যেভাবে তাদের মডুলারিটি পরিচালনা করে তার মধ্যে পৃথক।
এফপি ভাষার ব্যবহারকারীর গাণিতিক আইনের মাধ্যমে মডুলারিটি অর্জন করার ঝোঁক। এবং তাদের আইন মেনে চলার জন্য প্রমাণগুলি পছন্দ করুন।
অপরিহার্যভাবে ওওপি ব্যবহারকারীরা পরীক্ষার ক্ষেত্রে অবজেক্টের আচরণ ক্যাপচার করার ঝোঁক রাখেন, যা যদি বস্তুটি পরিবর্তিত হয় এবং এইভাবে মডুলারালিটি অর্জন করে তবে পুনরায় কাজ করা যেতে পারে।
এটি কেবল একটি ছোট দিক, তবে আমি মনে করি এটি উল্লেখযোগ্য।
একটি সাদৃশ্য:
আপনি একটি কাজের আবেদন হস্তান্তর করা হয়। আপনি আপনার নাম, যোগাযোগের তথ্য এবং কাজের ইতিহাস পূরণ করুন। আপনি শেষ করার পরে আপনার আর খালি আবেদন থাকবে না।
এখন পরিবর্তে কল্পনা করুন যে আপনি লেখার আগে এটিকে সেলোফেনের একটি পরিষ্কার শীট দিয়ে ওভারলে করবেন। আপনি আপনার নাম লিখুন। আপনি সেলোফেনের অন্য একটি শীট যুক্ত করুন। আপনি আপনার যোগাযোগের তথ্য লিখুন। আরও সেলোফেন। আপনি আপনার কাজের ইতিহাস লিখুন। আপনি যখন শেষ করেন তখন আপনার কাছে ফাঁকা অ্যাপ্লিকেশনটি ছোঁয়া থাকে। আপনার কাছে সেলোফেনের তিনটি শীট রয়েছে যার প্রত্যেকটিতে একটি একক, পৃথক পরিবর্তনের প্রভাব ধরা পড়ে।
প্রাক্তন (ওওপি) জায়গা পরিবর্তন করার ধারণাকে আলিঙ্গন করে যখন পরের (এফপি) এড়িয়ে যায়। উভয়ই রাষ্ট্র পরিচালনার দৃষ্টান্ত। উভয়ই, বিভিন্ন কৌশল ব্যবহার করে কোনও কাজের অ্যাপ্লিকেশন সম্পূর্ণ করার প্রভাব ক্যাপচার করতে পারে। ওওপি সরাসরি সূচনা যন্ত্র পরিবর্তন করে, যখন এফপি পরিবর্তনের উপস্থিতি প্রভাবিত করার আগে যা ঘটেছিল তা ওভারলে করে ।