ফাংশনাল প্রোগ্রামিং এর সুবিধা কি? [বন্ধ]


97

ফাংশনাল প্রোগ্রামিংয়ের সুবিধাগুলি কী বলে আপনি মনে করেন? এবং কীভাবে তারা আজ প্রোগ্রামারগুলিতে প্রয়োগ করে?

ফাংশনাল প্রোগ্রামিং এবং ওওপির মধ্যে সবচেয়ে বড় পার্থক্য কী?


5
ব্লব প্যারাডক্স। paulgraham.com/avg.html
মিসিংফ্যাক্টর

উত্তর:


75

ফাংশনাল প্রোগ্রামিংয়ের স্টাইলটি কী কীভাবে পাবেন তার পরিবর্তে আপনি কী চান তা বর্ণনা করা। উদাহরণস্বরূপ: একটি পুনরুক্তিযুক্ত ভেরিয়েবলের জন্য একটি লুপ তৈরি করার পরিবর্তে এবং প্রতিটি কক্ষের জন্য কিছু করা অ্যারের মাধ্যমে মার্চ করার পরিবর্তে আপনি বলতে পারবেন "এই লেবেলটি এই অ্যারের এমন একটি সংস্করণকে বোঝায় যেখানে এই ফাংশনটি সমস্ত ক্ষেত্রে করা হয়েছে উপাদান। "

ক্রিয়ামূলক প্রোগ্রামিং আরও বেসিক প্রোগ্রামিং আইডিয়াগুলিকে সংকলক, তালিকার বোধগম্যতা এবং ক্যাশিংয়ের মত ধারণাগুলি সরিয়ে দেয়।

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

অন্যান্য বড় সুবিধা হ'ল সামঞ্জস্য, যা ফাংশনাল প্রোগ্রামিংয়ের সাথে করা সহজ কারণ সংকলক বেশিরভাগ অপারেশনগুলির যত্ন নিচ্ছে যা ম্যানুয়ালি স্টেট ভেরিয়েবলগুলি সেট করার জন্য ব্যবহৃত হত (একটি লুপের মধ্যে পুনরুদ্ধারের মতো)।

প্রোগ্রামটি কীভাবে লেখা হচ্ছে তার উপর নির্ভর করে একক-প্রসেসরের প্রসঙ্গে কিছু কর্মক্ষমতা সুবিধাও দেখা যায়, কারণ বেশিরভাগ কার্যকরী ভাষা এবং এক্সটেনশানগুলি অলস মূল্যায়ন সমর্থন করে। হাস্কেলতে আপনি বলতে পারেন "এই লেবেলটি এমন একটি অ্যারের প্রতিনিধিত্ব করে যা সমস্ত সমান সংখ্যা সমন্বিত"। এই ধরণের অ্যারে অসীম আকারে বড়, তবে আপনি কোনও বিনা ছাড়াই যে কোনও মুহুর্তে অ্যারের 100,000 তম উপাদানটির জন্য জিজ্ঞাসা করতে পারেন - অ্যারে প্রারম্ভকালীন সময়ে - সবচেয়ে বড় মানটি আপনার কী প্রয়োজন হবে। আপনার যখন প্রয়োজন হবে তখনই মানটি গণনা করা হবে, এবং আরও কিছু হবে না।


13
আমি অনুভব করি যে আপনার প্রথম অনুচ্ছেদে ক্রিয়াকলাপযুক্ত প্রোগ্রামিংয়ের চেয়ে প্রোলোগের মতো ঘোষণামূলক রিলেশনাল প্রোগ্রামিং বর্ণনার কাছাকাছি।
ম্যাকফেরিনম

6
@ এমসিফেরিন এম: কার্যকরী ভাষাগুলি অবশ্যম্ভাবী পরিবর্তে ঘোষণামূলক।
মিথ্যা রায়ান

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

4
পছন্দ করুন দয়া করে আমার পূর্ববর্তী মন্তব্যে লিংকটি দেখুন
শেলবি মুর III

কনকুরানসিতে একাধিক থ্রেড রয়েছে যা একে অপরের সাথে ইন্টারঅ্যাক্ট করতে পারে, যা আবশ্যক। একই সাথে একাধিক স্বতন্ত্র গণনা করা সমান্তরালতা বলেEn.wikedia.org/wiki/Concurrency_( কম্পিউটার_সায়েন্স)
লাম্বদা পরী

29

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


28
এটি শেখার একটি উপকার, নিজেই দৃষ্টান্তের সুবিধা নয়
Moe

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

4
"এটি শেখার সুবিধা, এটি দৃষ্টান্তের কোনও উপকার নয়"। দৃষ্টান্তটি আপনার অন্যান্য ওওপি কাজের মধ্যে ফুটে উঠবে এবং সেখানে আপনার বিকাশকে সহজীকরণে সহায়তা করতে পারে। আপনি "এই ইনপুট থেকে এই আউটপুটটি গণনা করুন" এবং "অপেক্ষা --- এর পরিবর্তে" এই দুটি ফাংশন যা নতুন ডেটা গণনা করে "থেকে সমস্যাগুলির কাছে যেতে পারেন সেখানে কিছু ভাগ করে নেওয়া ভেরিয়েবলের অবস্থা কী ছিল?" এবং "আমি কি সঠিক ক্রমে কার্যকর করার জন্য এই পদ্ধতিগুলি পেয়েছি?" গম্ভীরভাবে, আপনি পাইথন, সি #, সি ++, জাভাতে এই সুবিধাগুলি (এফপি দৃষ্টান্তটি বোঝার মাধ্যমে) পান, আপনি এটির নাম দিন name
জ্যারেড আপডেটিকে

11

কার্যকরী প্রোগ্রামিংয়ের বিষয়টি কেন
http://www.cs.kent.ac.uk/people/staff/dat/miranda/whyfp90.pdf

বিমূর্ত

সফ্টওয়্যার আরও বেশি জটিল হয়ে উঠার সাথে সাথে এটিকে সুঠাম করে রাখা আরও বেশি গুরুত্বপূর্ণ important সুগঠিত সফ্টওয়্যারটি লিখতে এবং ডিবাগ করা সহজ এবং ভবিষ্যতের প্রোগ্রামিং ব্যয় হ্রাস করতে পুনরায় ব্যবহার করা যেতে পারে এমন মডিউলগুলির সংকলন সরবরাহ করে।

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


10

অতএব একটি ভাল সূচনা পয়েন্ট হ'ল এমন কিছু জিনিস বোঝার চেষ্টা করা যা অপরিহার্য ভাষায় সম্ভব নয় তবে কার্যকরী ভাষায় সম্ভব।

আপনি যদি কম্পিউটারের সামর্থ্য সম্পর্কে কথা বলছেন তবে অবশ্যই কার্যকরী তেমন কিছুই সম্ভব নয় তবে অত্যাবশ্যক প্রোগ্রামিং নয় (বা বিপরীতে)।

বিভিন্ন প্রোগ্রামিং দৃষ্টান্তগুলির বিন্দুটি এমন জিনিসগুলি সম্ভব করা সম্ভব নয় যা আগে সম্ভব ছিল না, আগে জিনিসগুলি সহজ করে দেওয়া।

কার্যকরী প্রোগ্রামিংয়ের লক্ষ্য আপনাকে আরও সহজেই এমন প্রোগ্রামগুলি লিখতে দেয় যা সংক্ষিপ্ত, বাগ-মুক্ত এবং সমান্তরাল হয়।


5

এটি এক বা অন্যটি হতে হবে না: সি # 3.0 এর মতো একটি ভাষা ব্যবহার আপনাকে প্রত্যেকটির সেরা উপাদানগুলিকে মিশ্রিত করতে দেয়। ওও ক্লাস স্তর এবং তারপরে বৃহত্তর স্কেল স্ট্রাকচারের জন্য ব্যবহার করা যেতে পারে, পদ্ধতি স্তরে ক্ষুদ্রতর কাঠামোর জন্য কার্যকরী শৈলী।

কার্যকরী শৈলী ব্যবহার করে কোড লিখিত হতে দেয় যা এর প্রবণতাটি পরিষ্কারভাবে প্রকাশ করে, নিয়ন্ত্রণ প্রবাহের বিবৃতি ইত্যাদির সাথে মিশ্রিত না হয়ে side ।


5

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

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


3

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

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


1

"প্রয়োজন" এর শর্তে ক্রিয়ামূলক প্রোগ্রামিংয়ের কথা ভাবেন না। পরিবর্তে, এটিকে অন্য প্রোগ্রামিং কৌশল হিসাবে ভাবুন যা আপনার মনকে ওপ, টেমপ্লেটস, সমাবেশের ভাষা ইত্যাদির মতো উন্মুক্ত করবে যখন আপনি সেগুলি শিখলেন (যদি) আপনার চিন্তাভাবনা সম্পূর্ণরূপে পরিবর্তিত হতে পারে। শেষ পর্যন্ত, ক্রিয়ামূলক প্রোগ্রামিং শেখা আপনাকে আরও উন্নত প্রোগ্রামার করে তুলবে।


0

আপনি যদি ইতিমধ্যে ফাংশনাল প্রোগ্রামিং জানেন না তবে এটি শেখা আপনাকে সমস্যা সমাধানের আরও উপায় দেয়।

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

ওসি ক্যামেল, সি # 3.0 এবং এফ # সহ অনেকগুলি ভাষা এফপি এবং ওওপি উভয়ই সরবরাহ করে।

চিয়ার্স, জন হ্যারোপ

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.