শিরোনামে বলা আছে, # চ্ছিক প্যারামিটারগুলি যেমন সি # তে ব্যবহৃত হয় বা তারা অ্যাপ্লিকেশন রক্ষণাবেক্ষণের ক্ষেত্রে বাধা হয়ে থাকে এবং কোডটি বোঝা আরও শক্ত করে তুলতে পারে তাই এড়ানো উচিত?
শিরোনামে বলা আছে, # চ্ছিক প্যারামিটারগুলি যেমন সি # তে ব্যবহৃত হয় বা তারা অ্যাপ্লিকেশন রক্ষণাবেক্ষণের ক্ষেত্রে বাধা হয়ে থাকে এবং কোডটি বোঝা আরও শক্ত করে তুলতে পারে তাই এড়ানো উচিত?
উত্তর:
Experienceচ্ছিক পরামিতিগুলি আমার অভিজ্ঞতাতে ভাল জিনিস হয়েছে। আমি কখনই এগুলিকে বিভ্রান্ত করতে দেখিনি (কমপক্ষে প্রকৃত ফাংশনের চেয়ে কম বিভ্রান্তিকর), যেহেতু আমি সর্বদা ডিফল্ট মান পেতে পারি এবং কী বলা হচ্ছে তা জানতে পারি।
তাদের জন্য একটি ব্যবহার হ'ল আমাকে যখন ইতিমধ্যে সাধারণ ব্যবহারে বা কমপক্ষে সর্বজনীন ইন্টারফেসে কোনও ফাংশনে অন্য প্যারামিটার যুক্ত করতে হয়। তাদের ছাড়া, আমাকে অন্য যুক্তি পেয়েছিল এমন কল করতে মূল ফাংশনটি আবার করতে হবে এবং যদি আমি একাধিকবার যুক্তি যুক্ত করি তবে তা সত্যিই পুরানো হয়ে উঠতে পারে।
new Circle(size, color, filled, ellipseProportions)
যেখানে size
এবং color
প্রয়োজন হয় এবং বাকি ডিফল্ট হয়।
সাধারণভাবে, আপনার যদি প্রায়শই অনেকগুলি / optionচ্ছিক পরামিতিগুলির প্রয়োজন হয় তবে আপনার ফাংশনগুলি খুব বেশি করছে এবং এটি ভেঙে ফেলা উচিত। আপনি সম্ভবত এসআরপি (একক দায়িত্বের নীতি) ভঙ্গ করছেন।
গোষ্ঠীভুক্ত করা যেতে পারে এমন পরামিতিগুলি অনুসন্ধান করুন, যেমন (x এবং y, একটি বিন্দু হয়ে উঠুন)।
এই optionচ্ছিক পরামিতিগুলি কি একটি ডিফল্ট সহ পতাকা রয়েছে? আপনি যদি পতাকা ব্যবহার করছেন তবে ফাংশনটি পৃথক করা উচিত।
এর অর্থ এটি নয় যে আপনার কখনই alচ্ছিক পরামিতি থাকা উচিত নয়, তবে সাধারণভাবে এক বা দুটি পরামিতি কোডের গন্ধের পরামর্শ দেয়।
এটি একটি ক্লুও হতে পারে যে ফাংশনটি আসলে একটি শ্রেণি হওয়া উচিত, alচ্ছিক পরামিতিগুলি বৈশিষ্ট্যগুলিতে পরিবর্তিত হয় এবং কনস্ট্রাক্টরের প্রয়োজনীয় পরামিতিগুলির অংশ থাকে।
Ptionচ্ছিক পরামিতিগুলি ঠিক আছে
সাধারণত যৌক্তিকতাটি হ'ল ক) আপনি জানেন যে আপনার পদ্ধতির জন্য আপনার অনেক সম্ভাব্য যুক্তি রয়েছে তবে আপনি আপনার এপিআই ক্লাউটারিংয়ের ভয়ে ওভারলোড করতে চান না, বা খ) যখন আপনি সম্ভাব্য সমস্ত যুক্তি জানেন না তবে আপনি আপনার ব্যবহারকারীকে কোনও অ্যারে সরবরাহ করতে বাধ্য করতে চান না। প্রতিটি ক্ষেত্রে alচ্ছিক পরামিতিগুলি একটি ঝরঝরে এবং মার্জিত উপায়ে উদ্ধার করতে আসে।
এখানে কিছু উদাহরন:
1. আপনি ওভারলোডিং এড়াতে চান এবং কোনও অ্যারে নির্দিষ্ট করতে চান না
সি, পার্ল, জাভা ইত্যাদি থেকে প্রিন্টফ () দেখুন It'sচ্ছিক পরামিতিগুলির শক্তির এটি একটি দুর্দান্ত উদাহরণ।
উদাহরণ স্বরূপ:
printf("I want %d %s %s",1,"chocolate","biccies");
printf("I want %d banana",1);
কোনও ওভারলোডিং নেই, কোনও অ্যারে নেই, সহজ এবং স্বজ্ঞাত (একবার আপনি স্ট্যান্ডার্ড স্ট্রিং ফর্ম্যাট কোডগুলি উপলব্ধ করেছেন)। কিছু আইডিই এমনকি আপনাকে বলবে যে আপনার ফর্ম্যাট স্ট্রিংটি আপনার alচ্ছিক পরামিতিগুলির সাথে মেলে না।
২. আপনি ডিফল্ট ব্যবহারের অনুমতি দিতে চান এবং এটিকে পদ্ধতির ব্যবহারকারীর কাছ থেকে গোপন রাখতে চান
sendEmail ( "test@example.org");
সেন্ডইমেল পদ্ধতিটি সনাক্ত করে যে বিভিন্ন প্রয়োজনীয় মানগুলি অনুপস্থিত এবং সংজ্ঞায়িত ডিফল্ট (বিষয়, শরীর, সিসি, বিসিসি ইত্যাদি) ব্যবহার করে এগুলি পূরণ করে। এপিআই পরিষ্কার রাখা হয়েছে, তবুও নমনীয়।
অনেকগুলি পরামিতিগুলির একটি নোট
তবে অন্যরা যেমন বলেছে যে কোনও পদ্ধতিতে অনেক বেশি বাধ্যতামূলক পরামিতি থাকা ইঙ্গিত দেয় যে সম্ভবত আপনার নকশায় আপনার কিছু ভুল আছে। এটি বিশেষত সত্য যদি তারা একই ধরণের ভাগ করে নেয় কারণ এগুলি দুর্ঘটনার দ্বারা বিকাশকারী দ্বারা চালিত সময়ে অদ্ভুত ফলাফলের দিকে নিয়ে যেতে পারে:
String myMethod(String x, String y, String z, String a, int b, String c, int d) {}
তৈরি করার জন্য পরামিতি অবজেক্ট রিফ্যাক্টরিংয়ের জন্য পরিচিত একজন প্রার্থী
String myMethod(ParameterObject po) {}
class ParameterObject {
// Left as public for clarity
public String x;
public String y;
... etc
}
প্যারামিটার অবজেক্ট হিসাবে প্রদত্ত স্পেসিফিকেশন সহ এটি কারখানার প্যাটার্নের উপর ভিত্তি করে এটি আরও ভাল নকশায় নিয়ে যেতে পারে।
সি # এর ডিফল্ট প্যারামিটারগুলির মধ্যে একটি সমস্যা (আমি শূন্যতাযুক্ত ডোসোমিংথিংয়ের কথা ভাবছি (int x = 1)) সেগুলি ধ্রুবক। এর অর্থ আপনি যদি ডিফল্ট পরিবর্তন করেন তবে আপনাকে সেই পদ্ধতি কলের যে কোনও গ্রাহককে পুনরায় কম্পাইল করতে হবে। যদিও এটি করার পক্ষে যথেষ্ট সহজ কিছু অনুষ্ঠানগুলি যেখানে এটি বিপজ্জনক।
এটি আপনার কোড কী করছে তার উপর নির্ভর করে। যদি বুদ্ধিমান ডিফল্ট থাকে তবে আপনার optionচ্ছিক পরামিতিগুলি ব্যবহার করা উচিত তবে যদি কোনও বুদ্ধিমান ডিফল্ট না থাকে তবে alচ্ছিক পরামিতিগুলি যুক্ত করা আপনার কোডটিকে আরও জটিল করে তুলবে। অনেক ক্ষেত্রে alচ্ছিক প্যারামিটারগুলি হ'ল নীল চেকগুলি পাশ কাটাতে এবং ব্রাঞ্চিংয়ের যুক্তিকে কাটাতে একটি ঝরঝরে উপায়। জাভাস্ক্রিপ্টে alচ্ছিক পরামিতি নেই তবে তাদের সাথে নকল করার একটি উপায় রয়েছে || (যৌক্তিক বা) এবং আমি এটি ডেটাবেস সম্পর্কিত স্টাফ করার সময় সর্বদা ব্যবহার করি কারণ যদি ব্যবহারকারী কিছু মান না দেয় তবে আমি আমার নিজস্ব মানগুলি বিকল্পের সাহায্যে || যা আমাকে পুরো বিবরণ লিখলে ঝামেলা বাঁচায় যদি বিবৃতি দেয়।
Thingsচ্ছিক প্যারামিটারগুলি সহজ জিনিসগুলি সহজ এবং জটিল জিনিসগুলি একই সাথে সম্ভব করার এক দুর্দান্ত উপায় are যদি কোনও স্পষ্ট যুক্তিযুক্ত ডিফল্ট থাকে যা বেশিরভাগ ব্যবহারকারী কমপক্ষে দ্রুত এবং নোংরা ব্যবহারের ক্ষেত্রে চান, তবে তারা আপনার ফাংশনটি প্রতিবার কল করার সময় তাদের ম্যানুয়ালি এটি নির্দিষ্ট করতে বয়লারপ্লেট লিখতে হবে না। অন্যদিকে, লোকেরা যদি এটি পরিবর্তন করতে চাওয়ার কোনও ভাল কারণ থাকতে পারে, তবে এটি প্রকাশ করা দরকার।
ক্লাস ব্যবহার করা আইএমএইচওর একটি ভয়ানক সমাধান, কারণ এটি ভার্চুয়াল, অদক্ষ এবং কোনও শ্রেণি কী করে তার সাধারণ মানসিক মডেলটির সাথে সঙ্গতিপূর্ণ নয়। একটি ক্রিয়া ক্রিয়াপদের জন্য নিখুঁত বিমূর্ততা, অর্থাত কিছু করা এবং ফিরে আসা। একটি শ্রেণি হ'ল বিশেষ্যটির জন্য সঠিক বিমূর্ততা, অর্থাত্ এমন কিছু যা রাষ্ট্র রয়েছে এবং বিভিন্ন উপায়ে ম্যানিপুলেট করা যায়। প্রাক্তনটি যদি এপিআই ব্যবহারকারীর মানসিক মডেল হওয়া উচিত তবে এটিকে কোনও শ্রেণি তৈরি করবেন না।
Alচ্ছিক আর্গুমেন্টগুলির সমস্যাটি হ'ল লোকেরা কোনও নতুন ফাংশনে প্রাসঙ্গিক কোডটি বের না করে কেবলমাত্র বেশি এবং বেশি (এবং আরও) যুক্তি সন্ধান করতে ঝোঁক। এটি পিএইচপি মধ্যে চরম নেওয়া হয় । এই ক্ষেত্রে:
bool array_multisort ( array &$arr [, mixed $arg = SORT_ASC
[, mixed $arg = SORT_REGULAR [, mixed $... ]]] )
আমি প্রাথমিকভাবে পাইথনটিতে এই বৈশিষ্ট্যটি পছন্দ করেছি এবং ইতিমধ্যে ব্যবহৃত পদ্ধতিগুলি 'প্রসারিত' করতে ব্যবহার করেছি। এটি দেখতে সুন্দর এবং সহজ লাগছিল, তবে শীঘ্রই এটি আবার ফিরে আসবে; কারণ যখন আমি একটি .চ্ছিক প্যারামিটার যুক্ত করেছি, এটি একটি বিদ্যমান পদ্ধতির আচরণকে সংশোধন করছে যা পুরানো ক্লায়েন্ট নির্ভর করে এবং এমনভাবে যা বিদ্যমান ইউনিট পরীক্ষার কেসে ধরা পড়ে নি। মূলত এটি করা ওপেন ক্লোজড নীতিমালা ভঙ্গ করছে; কোড এক্সটেনশনের জন্য উন্মুক্ত তবে পরিবর্তনের জন্য বন্ধ। সুতরাং আমি বিশ্বাস করি যে বিদ্যমান কোডটি সংশোধন করতে এই বৈশিষ্ট্যটি ব্যবহার করা ভাল ধারণা নয়; তবে ঠিক আছে যদি শুরু থেকে ব্যবহার করা হয়
আমি মনে করি .চ্ছিক পরামিতি ব্যবহারের চেয়ে বিভিন্ন স্বাক্ষর (অর্থাত্ পরামিতি) সহ কোনও ফাংশন ওভারলোড করা ভাল।