আমার কাছে নিম্নলিখিত এক্সটেনশন পদ্ধতি রয়েছে:
public static IEnumerable<T> Apply<T>(
[NotNull] this IEnumerable<T> source,
[NotNull] Action<T> action)
where T : class
{
source.CheckArgumentNull("source");
action.CheckArgumentNull("action");
return source.ApplyIterator(action);
}
private static IEnumerable<T> ApplyIterator<T>(this IEnumerable<T> source, Action<T> action)
where T : class
{
foreach (var item in source)
{
action(item);
yield return item;
}
}
এটি সিক্যুয়েন্সের প্রতিটি আইটেমকে ফেরত দেওয়ার আগে এটি প্রয়োগ করে।
আমি ভাবছিলাম যে আমাকে এই পদ্ধতির Pure
(পুনঃভাগী টীকা থেকে) বৈশিষ্ট্যটি প্রয়োগ করা উচিত এবং আমি এর পক্ষে এবং এর বিপরীতে যুক্তিগুলি দেখতে পাচ্ছি।
পেশাদাররা:
- কঠোরভাবে বলতে, এটা হল বিশুদ্ধ; কেবল একটি ক্রম এ এটি কল করা ক্রমটি পরিবর্তন করে না (এটি একটি নতুন অনুক্রম ফেরত দেয়) বা কোনও পর্যবেক্ষণযোগ্য রাষ্ট্র পরিবর্তন করে না
- ফলাফলটি ব্যবহার না করে এটি কল করা স্পষ্টতই একটি ভুল, যেহেতু অনুক্রমটি গণনা করা না হলে এর কোনও প্রভাব নেই, তাই আমি চাই যদি আমি তা করে থাকি তবে রেশার্পার আমাকে সতর্ক করতে চান।
কনস:
- যদিও
Apply
পদ্ধতি নিজেই বিশুদ্ধ হয়, enumerating ফলে ক্রম হবে পর্যবেক্ষণযোগ্য রাষ্ট্র পরিবর্তন করতে (যা পদ্ধতির বিন্দু)। উদাহরণস্বরূপ,items.Apply(i => i.Count++)
প্রতিবার আইটেমটি গণিত হওয়ার মান পরিবর্তন করবে change সুতরাং বিশুদ্ধ বৈশিষ্ট্য প্রয়োগ করা সম্ভবত বিভ্রান্তিকর ...
আপনি কি মনে করেন? আমি গুণাবলী প্রয়োগ করা উচিত বা না?