ওভারলোড বা ptionচ্ছিক পরামিতি


10

আমার যখন কোনও ফাংশন রয়েছে যা হয়ত নির্দিষ্ট পরামিতি গ্রহণ করতে পারে বা নাও পেতে পারে, তখন ফাংশনটি ওভারলোড করা বা orচ্ছিক আরোগুলি যুক্ত করা ভাল?

প্রত্যেকের যদি এর উত্থান-পতন হয় - আমি কখন ব্যবহার করব?


অপ্টিমাইজেশনের দৃষ্টিকোণ থেকে paraচ্ছিক পরামিতি থাকা একটি ভাল বিকল্প।
মনীত পুরি

উত্তর:


12

ভাষা যদি তাদের যথাযথভাবে সমর্থন করে (যেমন প্রকারের সুরক্ষা, প্রযোজ্য ক্ষেত্রে), তবে আমি নিম্নলিখিত কারণে alচ্ছিক যুক্তিগুলি পছন্দ করব:

  • তারা আপনার অভিপ্রায়টি আরও ভালভাবে জানায় তাই কোনও সন্দেহ না করে যে আপনার ফাংশন ওভারলোডটি কিছু আলাদা করবে (যা সম্ভবত এটি করা উচিত নয়)।
  • বজায় রাখার জন্য কম কোড, এমনকি যদি ফাংশন ওভারলোড কেবলমাত্র আরও বিস্তৃত একটিতে প্রতিনিধি করে। আপনি যদি পরে এই ফাংশনটির নাম পরিবর্তন করতে চান তবে এটি করার জন্য আপনার কমপক্ষে 3 টি জায়গা রয়েছে (দুটি সংজ্ঞা + একটি কল)।
  • সংকলক (যদি থাকে) ছোট বাইনারি তৈরি করতে পারে।
  • Ptionচ্ছিক যুক্তিগুলি কমপক্ষে কয়েকটি ভাষায় আরও ভাল স্কেল করুন। আপনি যদি মিশ্রণ এবং মিলের দক্ষতার সাথে 3 টি alচ্ছিক যুক্তি রাখতে চান? সম্পূর্ণ নমনীয়তার জন্য, এটি করতে আপনার 6 টি ওভারলোড দরকার।
  • যদি এটি কোনও অবজেক্ট পদ্ধতি হয় তবে একাধিক ওভারলোডগুলি সাবক্লাসগুলিতে ওভাররাইডগুলির প্রয়োগকে ব্যাপকভাবে বাধা দেয়।

আপনার 8 লাগবে না? তিনটি alচ্ছিক যুক্তি a, bএবং cএই সম্ভাবনা রয়েছে: কিছুই নয়, এ, বি, সি, আব, এসি, বিসি, এবিসি। এটি 2^nবিভিন্ন ধরণের জন্য, নাn!
চিহ্নিত করুন

0

একজন নির্মাতার ধরণের পরিস্থিতি ধরে নেওয়া: অনেক অপশন সহ পরিস্থিতি রোধ করতে আমি প্রায়শই সাবলীল নির্মাতা প্যাটার্নটি পছন্দ করি।

যেমন। Ordering.natural().onResultOf(function).reverse().compound(Ordering.natural().onResultOf(function2))পেয়ারাতে প্রয়োগ করা সাবলীল নির্মাতা ইন্টারফেসকে কল করার একটি উদাহরণ।

অবশ্যই আপনার বিল্ডারের অবস্থা ধরে রাখার জন্য এখন আপনার একটি পৃথক বস্তুর প্রয়োজন, তবে আপনি নির্মাণের আচরণ থেকে নির্মাণের আচরণকে আলাদা করে সামগ্রিক জটিলতা হ্রাস করেন।


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