কোন পরিস্থিতিতে সি ++, সি # বা জাভা এর মতো আরও ভার্বোজ অবজেক্ট-ভিত্তিক ভাষার চেয়ে বেশি কার্যকরী প্রোগ্রামিং ভাষা ব্যবহার করা উচিত?
আমি বুঝতে পারি ফাংশনাল প্রোগ্রামিং কী, আমি আসলে বুঝতে পারি না কোন ধরণের সমস্যার জন্য এটি একটি নিখুঁত সমাধান?
কোন পরিস্থিতিতে সি ++, সি # বা জাভা এর মতো আরও ভার্বোজ অবজেক্ট-ভিত্তিক ভাষার চেয়ে বেশি কার্যকরী প্রোগ্রামিং ভাষা ব্যবহার করা উচিত?
আমি বুঝতে পারি ফাংশনাল প্রোগ্রামিং কী, আমি আসলে বুঝতে পারি না কোন ধরণের সমস্যার জন্য এটি একটি নিখুঁত সমাধান?
উত্তর:
কার্যকরী ভাষাগুলি, আমার মতে, মূলত দুটি জিনিসের জন্য ভাল: গেমের এআই এবং গাণিতিক গণনা। এটি এআইএস-এ দুর্দান্ত তালিকার ম্যানিপুলেশনের কারণে (কমপক্ষে লিস্প এবং স্কিমে), এবং এর সিনট্যাক্সের কারণে গাণিতিক গণনার জন্য ভাল। স্কিম, লিস্প এবং হাস্কেলের একটি সিনট্যাক্স রয়েছে যা গাণিতিক গণনাগুলি পড়তে সহজ করে তোলে। আমার শেষ কথাটি যুক্ত করতে হবে যে কার্যকরী ভাষাগুলি হ'ল মজাদার ভাষা। আমার স্কিম কোর্সটি আমার সবচেয়ে বেশি মজাদার কোর্সে ছিল।
আমি নিজেই এ সম্পর্কে কিছু গবেষণা করেছি এবং ভেবেছিলাম যে আমি কার্যকরী ভাষা ব্যবহারের কারণগুলির তালিকায় কনসিউরেন্সিকে যুক্ত করতে পারি। অদূর ভবিষ্যতের প্রসেসরের কোনও সময়ে দেখুন একই সিপিইউ প্রযুক্তি ব্যবহার করে গতি বৃদ্ধি করতে সক্ষম হবে না। স্থাপত্যের পদার্থবিজ্ঞান এটির অনুমতি দেবে না।
সুতরাং সেখানে সমকালীন প্রক্রিয়াজাতকরণ আসে।
দুর্ভাগ্যক্রমে বেশিরভাগ ওওপি ভাষা এক সাথে একাধিক প্রসেসরের সুবিধা নিতে পারে না কারণ তথ্যের মধ্যে আন্তঃনির্ভরতার কারণে।
খাঁটি ফাংশনাল প্রোগ্রামিং ল্যাঙ্গুয়েজে কম্পিউটার একবারে দুটি (বা আরও অনেক) ফাংশন চালাতে পারে কারণ এই ফাংশনগুলি রাষ্ট্রের তথ্যের বাইরে কোনও পরিবর্তন করে না।
এখানে আপনি উপভোগ করতে পারেন ফাংশনাল প্রোগ্রামিং সম্পর্কে একটি দুর্দান্ত নিবন্ধ ।
আমার এক বন্ধু তার কলেজের একজন অধ্যাপকের বরাত দিয়ে নীচের মতো কিছু বলেছে:
শীর্ষে জুড়ে ডেটা ধরণের এবং একটি বাম দিকের নীচে সেই ডেটা ধরণের ক্রিয়াকলাপ সহ গ্রিড আঁকুন। আপনি যদি গ্রিডটি উল্লম্বভাবে টুকরো টুকরো করেন তবে আপনি ওও করছেন; আপনি যদি গ্রিডটি অনুভূমিকভাবে টুকরো টুকরো করেন তবে আপনি এফপি করছেন।
আমার উত্তর হ'ল এফপি হ'ল ওওর মতো বিস্তৃত অ্যাপ্লিকেশন সহ প্রোগ্রামিংয়ের ক্ষেত্রে সম্পূর্ণ কার্যকর approach যে কোনও প্রোগ্রামিং-ভাষা-পছন্দ আলোচনার মতো, আমিও মনে করি যে আরও গুরুত্বপূর্ণ প্রশ্নগুলি হ'ল:
প্রথম প্রশ্ন হিসাবে, আপনি যদি প্রাথমিকভাবে শেখার মানটির জন্য এটি করছেন তবে আমি বিস্তৃত সমর্থন উপকরণ (বই, নিবন্ধ, সক্রিয় সম্প্রদায় ইত্যাদি) এর কারণে হাস্কেলের দিকে নজর দেওয়ার পরামর্শ দেব
দ্বিতীয় প্রশ্নের হিসাবে, হাস্কেলের লাইব্রেরিগুলির একটি দুর্দান্ত পরিসীমা রয়েছে (যদিও কিছু অন্যদের তুলনায় আরও পরিপক্ক) তবে স্কালা (জেভিএম-এ চলিত একটি সংকর ওও-কার্যকরী ভাষা) এর এমন সুবিধা রয়েছে যা আপনি ক্রমশ ক্রিয়ামূলক শৈলীতে রূপান্তর করতে পারেন , এবং আপনার কাছে জাভা অ্যাক্সেসযোগ্য লাইব্রেরিগুলির সম্পূর্ণ পরিসীমা উপলব্ধ।
ব্যবহারিকভাবে পিপিতে আপনি যা করতে পারেন তা এফপিতে এবং একই জিনিস বিপরীতে করা যেতে পারে। এটি কোনও কিছুর কোড দেওয়ার আরও একটি উপায় the সমস্যাটির অন্য দৃষ্টিভঙ্গি এবং এটি সমাধানের আলাদা উপায়।
তবে, অনেকে এফপি ব্যবহার না করায় সমস্যাটি ভাল লাইব্রেরির অভাব, বহনযোগ্যতা / রক্ষণাবেক্ষণযোগ্যতা (যেহেতু রক্ষণাবেক্ষণকারী স্কিমের চেয়ে সি ++ তে লিখিত কিছু বোঝার আরও ভাল সুযোগ আছে) এবং ডকুমেন্টেশন এবং সম্প্রদায়ের অভাব সম্পর্কে। আমি জানি যে এখানে কিছু ডক্স রয়েছে, তবে এটি সি ++, সি # বা জাভা এর সাথে তুলনা করুন এবং আপনি বুঝতে পারবেন যে আমি কী বোঝাতে চাইছি।
তবে, আপনি যদি সত্যিই এফপি করতে চান তবে আপনি এই স্টাইলটি এমনকি সি ++ এবং সি # তেও ব্যবহার করতে পারেন। অবশ্যই, আপনি যদি মানক লাইব্রেরি ব্যবহার করেন তবে এটি 100% এফপি হবে না। দুর্ভাগ্যক্রমে, আমি মনে করি না যে সি # কার্যকরী প্রোগ্রামিংয়ের সাথে ব্যবহার করতে অনুকূলিত হয়েছে এবং এটি সম্ভবত প্রচুর পারফরম্যান্সের সমস্যা তৈরি করবে।
এটি আরও একটি বিষয়গত পোস্ট, আমি এফপি সম্পর্কে কী ভাবি। এটি কোনও কঠোর ঘোষণা নয়।
কার্যকরী ভাষা অনেক পরিস্থিতিতে ভাল। এটি একটি নির্দিষ্ট কার্যকরী ভাষার গ্রন্থাগারগুলির উপর নির্ভর করে।
"কখন কোনও অবজেক্ট অরিয়েন্টেড প্রোগ্রামিং ল্যাঙ্গুয়েজ ব্যবহার করবেন?" এই প্রশ্নের উত্তর আপনি কীভাবে দেবেন?
যদিও এটি সম্পূর্ণ বিষয়গত প্রশ্ন, তবে আমি কেবল যুক্ত করতে চাই যে কার্যকরী ভাষাগুলি ডোমেনের নির্দিষ্ট ভাষাগুলি পার্স করতে প্রচুর ব্যবহৃত হয় ; কার্যকরী প্রকৃতি ব্যাকরণকে পার্স করার পক্ষে ভাল leণ দেয়।
আমি যা দেখেছি, এটি কার্যকারিতার চেয়ে স্বাদের বিষয় (কোনও পাং উদ্দেশ্যে নয়)। ভাষার কোনও রীতি সম্পর্কে সত্যই কিছুই নেই যা নির্দিষ্ট কাজগুলিতে এটিকে অন্তর্নিহিত আরও ভাল বা খারাপ করে তোলে।
সাধারণভাবে, কোনও সমস্যার সমাধান প্রকাশ করার পক্ষে সহজ ভাষাটি ব্যবহার করুন। ফাংশনাল প্রোগ্রামিংয়ের জন্য, এটি তখনই হয় যখন কোনও সমস্যার সমাধান সহজেই ফাংশনগুলির ক্ষেত্রে প্রকাশ করা হয় , সুতরাং নামটি। সাধারণত এটি গাণিতিক ক্রিয়াকলাপগুলির জন্য ভাল, এআই, প্যাটার্ন ম্যাচিং; সাধারণভাবে কোনও কিছু যা নিয়মের সেটকে ভেঙে ফেলা যায় যা উত্তর পেতে অবশ্যই প্রয়োগ করতে হবে। আপনার সমস্যাটি পর্যাপ্ত পরিমাণে বিশ্লেষণ করার পরে আপনি কেবলমাত্র "সেরা" ভাষাটি ব্যবহার করতে পারবেন তা নির্ধারণ করতে পারেন। এখানেই সিউডো-কোড কার্যকর হয়। আপনি যদি এফপির মতো দেখতে সিউডো-কোড লিখে নিজেকে খুঁজে পান তবে এফপি ব্যবহার করুন।
অবশ্যই, সমস্ত সম্পূর্ণ প্রোগ্রামিং ল্যাঙ্গুয়েজগুলি কার্যত সমতুল্য, তাই আপনি কোন সমস্যাগুলি সমাধান করতে পারবেন তার ক্ষেত্রে আপনি কোনটি চয়ন করেন তা সত্য নয়। মূল প্রভাবগুলি কোডিং দক্ষতা এবং নির্ভুলতা এবং রক্ষণাবেক্ষণের স্বাচ্ছন্দ্যের ক্ষেত্রে হবে।
এও নোট করুন যে চতুরতার সাথে ডিজাইন করা API গুলির মাধ্যমে ওও ভাষাগুলির মধ্যে এফপি অনুকরণ করা সম্ভব। উদাহরণস্বরূপ, আমি অসংখ্য জাভা লাইব্রেরি দেখেছি (জেমক একটি উদাহরণ) যা এফপি ডিএসএল অনুকরণের জন্য পদ্ধতি শৃঙ্খলা ব্যবহার করে। তারপরে আপনি নির্মাণগুলি দেখতে পাবেন যেমন:
logger.expects(once()).method("error")
.with( and(stringContains(action),stringContains(cause)) );
এটি মূলত একটি ফাংশন তৈরি করে যা একটি মক অবজেক্টে কিছু কলিং ক্রম সঠিক কিনা তা নির্ধারণের জন্য মূল্যায়ন করা হয়। (উদাহরণস্বরূপ http://www.jmock.org/yoga.html থেকে চুরি হয়েছে )
অন্যথায় ওও ভাষাগুলিতে আর এফপির মতো সিনট্যাক্স হ'ল রুবির মতো ক্লোজারগুলির ব্যবহার।