এটি কার্যকরী প্রোগ্রামিংয়ে কী এমন একটি পার্থক্য তৈরি করে?
কার্যকরী প্রোগ্রামিং নীতিগত ঘোষণা দ্বারা হয় । আপনার ফলাফল কীভাবে এটি গণনা করা যায় তার পরিবর্তে আপনি কী বলেছিলেন ।
আসুন আপনার স্নিপেটের কার্যকরী বাস্তবায়নের দিকে একবার নজর দিন। হাসকেলে এটি হবে:
predsum pred numbers = sum (filter pred numbers)
ফলাফল কী হবে তা পরিষ্কার ? বেশ তাই, এটি পূর্বাভাসের সাথে মিলিত সংখ্যার যোগফল। এটি কীভাবে গণনা করা হয়? আমি পাত্তা দিচ্ছি না, সংকলকটি জিজ্ঞাসা করুন।
আপনি সম্ভবত এটি বলতে পারেন যে এটি ব্যবহার sum
এবং filter
এটি একটি কৌশল এবং এটি গণনা করে না। এই সাহায্যকারীদের ব্যতীত এটিকে বাস্তবায়ন করা যাক (তবে সর্বোত্তম উপায়টি হ'ল প্রথমে তাদের বাস্তবায়ন করা)।
"ফাংশনাল প্রোগ্রামিং 101" সমাধান যা ব্যবহার করে না sum
তা পুনরাবৃত্তি সহ:
sum pred list =
case list of
[] -> 0
h:t -> if pred h then h + sum pred t
else sum pred t
এটি এখনও পুরোপুরি পরিষ্কার যে একক ফাংশন কলের ক্ষেত্রে ফলাফল কী । এটি হয় 0
, বা recursive call + h or 0
, নির্ভর করে pred h
। তবুও বেশ সোজাভাবে, শেষের ফলাফলটি তাত্ক্ষণিকভাবে সুস্পষ্ট না হলেও (যদিও কিছুটা অনুশীলন করে এটি সত্যই for
লুপের মতো পড়ে )।
এটি আপনার সংস্করণের সাথে তুলনা করুন:
public int Sum(Func<int,bool> predicate, IEnumerable<int> numbers){
int result = 0;
foreach(var item in numbers)
if (predicate(item)) result += item;
return result;
}
ফলাফলটি কি? ওহ, আমি দেখুন: একক return
বিবৃতি, কোন এখানে অবাক: return result
।
তবে কী result
? int result = 0
? ঠিক মনে হচ্ছে না। আপনি এটি পরে কিছু করুন 0
। ঠিক আছে, আপনি item
এটিতে যোগ করুন । ইত্যাদি।
অবশ্যই, বেশিরভাগ প্রোগ্রামারদের ক্ষেত্রে এটি স্পষ্টভাবে স্পষ্ট যে এর মতো সাধারণ ফানসিটনে কী ঘটে থাকে তবে কিছু অতিরিক্ত return
বিবৃতি যোগ করুন বা হঠাৎ এটি ট্র্যাক করা শক্ত হয়ে যায়। সকল কোড সম্পর্কে কিভাবে , এবং কি চিত্র পাঠকদের জন্য ছেড়ে দেওয়া হয় আউট - এই ব্যাখ্যা স্পষ্টতই একটি খুব অনুজ্ঞাসূচক স্টাইল ।
সুতরাং, ভেরিয়েবল এবং লুপগুলি কী ভুল?
না।
অনেকগুলি বিষয় রয়েছে যা তাদের দ্বারা আরও সহজভাবে ব্যাখ্যা করা হয়েছে এবং অনেকগুলি অ্যালগরিদমগুলির জন্য পরিবর্তিত অবস্থায় দ্রুত হওয়া প্রয়োজন। তবে ভেরিয়েবলগুলি সহজাতভাবে আবশ্যক, কী কী পরিবর্তে কীভাবে তা ব্যাখ্যা করে এবং তার মানটি কয়েক লাইন পরে বা কয়েকটি লুপ পুনরাবৃত্তির পরে কী হতে পারে তার সামান্য পূর্বাভাস দেয়। লুপগুলি সাধারণত বোধগম্যতার জন্য রাষ্ট্রের প্রয়োজন হয় এবং তাই এগুলিও সহজাতভাবে আবশ্যক।
ভেরিয়েবল এবং লুপগুলি কেবল কার্যকরী প্রোগ্রামিং নয়।
সারসংক্ষেপ
সমসাময়িকভাবে ফানসিটোনাল প্রোগ্রামিং হ'ল একটি দৃষ্টান্তের চেয়ে স্টাইল এবং চিন্তাভাবনার একটি কার্যকর উপায় of খাঁটি ফাংশনগুলির জন্য দৃ pre় অগ্রাধিকার এই মানসিকতায় রয়েছে তবে এটি আসলে একটি ছোট্ট অংশ।
সর্বাধিক বিস্তৃত ভাষাগুলি আপনাকে কিছু কার্যকরী নির্মাণ ব্যবহার করতে দেয়। উদাহরণস্বরূপ পাইথনে আপনি যে কোনওটি চয়ন করতে পারেন:
result = 0
for num in numbers:
if pred(result):
result += num
return result
অথবা
return sum(filter(pred, numbers))
অথবা
return sum(n for n in numbers if pred(n))
এই কার্যকরী ভাবগুলি সেই ধরণের সমস্যার জন্য দুর্দান্তভাবে ফিট করে এবং কোডকে ছোট করে তোলে (এবং সংক্ষিপ্ততর ভাল )। আপনার বিবেচনাবিহীনভাবে তাদের সাথে আবশ্যক কোডটি প্রতিস্থাপন করা উচিত নয়, তবে তারা যখন ফিট করে তখন প্রায় সবসময়ই আরও ভাল পছন্দ হয়।
item
লুপে পরিবর্তনশীল রূপান্তরিত হয়।