সীমিত আকারের প্যারামিটার গ্রহণকারী পদ্ধতিগুলি কেন প্রায়ই কম পরামিতিগুলির সাথে ওভারলোডগুলি সংজ্ঞায়িত করে?


36

উদাহরণস্বরূপ, System.IO.Path.Combine.NET- র পদ্ধতিতে নিম্নলিখিত ওভারলোডগুলি রয়েছে:

Combine(params String[])
Combine(String, String)
Combine(String, String, String)
Combine(String, String, String, String)

শেষ তিনটির কথা কী?

প্রথমটি তাদের সমস্তটি কভার করবে, আপনি যদি ঘনিষ্ঠভাবে দেখেন তবে এটি paramsকীওয়ার্ডটি ব্যবহার করে । পিছনের সামঞ্জস্যের যুক্তি কেবল Combine(String, String)বৈকল্পিকটি কভার করবে , কারণ এটি নেট 4 অবধি একমাত্র সংস্করণ ছিল।

উত্তর:


56

পারফরম্যান্সের মূল কারণ। "সীমাহীন যুক্তিগুলি" সিনট্যাকটিকাল চিনি আসলে স্ট্রিংগুলির একটি অ্যারে। আপনি যদি কেবল একটি স্ট্রিং পাশ করে থাকেন তবে কেন কেবল একটি স্ট্রিং দিয়ে একটি অ্যারে তৈরি করবেন? বিশেষত যদি method 90% এই পদ্ধতির আমন্ত্রণগুলি 3 বা তার চেয়ে কম যুক্তিযুক্ত হয়ে থাকে তবে ভারী ওজনের অ্যারে অবজেক্টটির কোনও প্রয়োজন নেই। এটি স্মৃতিশক্তিটি সামান্য হালকা এবং প্রসেসিংয়ে একটু কম সময় নেয় কারণ পদ্ধতিটি সংজ্ঞায়িত করার জন্য আপনার কোনও লুপের প্রয়োজন নেই। আপনার যদি তিনটি স্ট্রিং থাকে তবে আপনি কেবল তিনটি স্ট্রিংয়ের জন্য কোড করেন।


আরেকটি বিষয় লক্ষণীয় হ'ল Combineশূন্য বা এক পাথ বিভাগগুলির সাথে পাস করার অর্থও বোঝা যায় না, তবুও paramsসংস্করণ আপনাকে এটি করতে দেয়।
ম্যাথু

4
ওভারলোডের সংখ্যার পক্ষে বিভিন্ন সংখ্যক যুক্তি গ্রহণ করার কারণ পড়ার জন্য নয়। এটি কার্য সম্পাদনের কারণেই ওভারহেড স্ট্রিংগুলির একটি অ্যারে তৈরি করে এবং তারপরে প্রক্রিয়াজাতকরণের দ্বারা ব্যয় করা হয়। গ্রহণযোগ্যতার কারণটি params string[]পঠনযোগ্যতা।
গ্রেগ বার্গার্ড্ট

2
পারফরম্যান্স প্রকৃতপক্ষে কারণ, এবং আমি বিশ্বাস করি এটি নির্দিষ্টভাবে যখন কোনও ফাংশনটি অভ্যন্তরীণ লুপগুলি থেকে ডাকার আশা করা হয় । ব্র্যাড আব্রামস এর সি # প্রোগ্রামিং ল্যাঙ্গুয়েজের ২২.২ পৃষ্ঠার টিকা হিসাবে , তৃতীয় সংস্করণ বলে: "[টি] তিনি সি # মডেল প্রতিটি কলটিতে স্পষ্টতই একটি অতিরিক্ত অবজেক্ট বরাদ্দ (অ্যারে সম্বলিত) তৈরি করেন This এটি খুব কমই সমস্যা, তবে অভ্যন্তরীণভাবে -লুপ ধরণের পরিস্থিতি যেখানে এটি অকার্যকর হয়ে উঠতে পারে, আমরা মূলধারার কেসগুলির জন্য paramsওভারলোড সরবরাহ এবং কেবলমাত্র প্রান্তের ক্ষেত্রে ওভারলোড ব্যবহার করার পরামর্শ দিই An উদাহরণ StringBuilder.AppendFormat()ওভারলোডের পরিবার is "
এলিয়াহ কাগন

3
@ লোফ্লিংপেলিকান মনো এবং। নেট ফ্রেমওয়ার্ক এক নয়। আপনি যদি নেট নেট ফ্রেমওয়ার্ক সংস্করণটি দেখেন তবে এটি আসলে একটি সম্পূর্ণ সমাধান solution
অ্যালেক্স

3
@LowFlyingPelican: .NET Framework এর কারণ হল কর্মক্ষমতা। মনো পদ্ধতিতে এই পদ্ধতিটি প্রয়োগের কারণ হ'ল .NET এর সাথে এপিআই সামঞ্জস্য। এই পদ্ধতিটি সেভাবে বাস্তবায়নের জন্য মনোর কারণ ছিল বাস্তবায়নের সরলতা (তাদের মাইক্রোসফ্টের তুলনায় যথেষ্ট কম সংস্থান রয়েছে)।
ঝোমিনাল

4

সিনট্যাকটিক চিনি।

ফাইলের পাথগুলিতে হেরফের করার সময় অল্প সংখ্যক স্থির মান থাকা খুব সাধারণ। এই ক্ষেত্রে, এগুলিতে প্যাকেজ না করে সরাসরি এগুলি ব্যবহার করা আরও সুবিধাজনক।


3
প্যারামগুলির সাথে, আপনি ইতিমধ্যে এটি সুগার করছেন। msdn.microsoft.com/en-us/library/w5zay9db.aspx অ্যারের দরকার নেই।
থমাস জাঙ্ক

3
সি # তে আপনার একটি বিষয় রয়েছে, @ থমাস। তবে .NET ছাড়া অন্য ভাষাগুলিও সমর্থন করে params
কার্ল বিলেফেল্ট 16

@ থমাস জাঙ্ক এই লিঙ্কটি আমার জন্য দুর্ভাগ্যক্রমে মরে গেছে, তবে আমি নিশ্চিত যে আমার সি # মধ্যবর্তী হওয়ায় আপনি ঠিক আছেন। আমি কেবলমাত্র বহু ভাষা সহ অনেক লাইব্রেরি দেখেছি যা ক্লিনার কোডের অনুমতি দেওয়ার জন্য এটি করে।
রোবট
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.