কতটি পরামিতি খুব বেশি? [বন্ধ]


228

রুটিনগুলিতে প্যারামিটার থাকতে পারে, এটি কোনও খবর নয়। আপনার প্রয়োজন হিসাবে আপনি যতগুলি প্যারামিটার সংজ্ঞায়িত করতে পারেন তবে এর মধ্যে অনেকগুলি আপনার রুটিনকে বুঝতে এবং বজায় রাখা কঠিন করে তুলবে।

অবশ্যই আপনি স্ট্রাকচার্ড ভেরিয়েবলটি ওয়ার্কআরউন্ড হিসাবে ব্যবহার করতে পারেন: এই সমস্ত ভেরিয়েবলগুলিকে একটি স্ট্রাক্টে রেখে রুটিনে প্রেরণ করতে পারেন। প্রকৃতপক্ষে, প্যারামিটারের তালিকাগুলি সহজ করার জন্য কাঠামো ব্যবহার করা কোড কমপ্লিটে স্টিভ ম্যাককনেল বর্ণিত একটি কৌশল । তবে তিনি যেমন বলেছেন:

সাবধানী প্রোগ্রামাররা যুক্তিসঙ্গতভাবে প্রয়োজনীয়তার চেয়ে বেশি ডেটা বান্ডিলিং এড়ায়।

সুতরাং যদি আপনার রুটিনে অনেকগুলি পরামিতি থাকে বা আপনি কোনও বড় পরামিতি তালিকার ছদ্মবেশ ব্যবহার করতে স্ট্রাক্ট ব্যবহার করেন তবে আপনি সম্ভবত কিছু ভুল করছেন। তা হচ্ছে, আপনি কাপলিং looseিলে রাখছেন না।

আমার প্রশ্ন হ'ল আমি কখন প্যারামিটারের তালিকাটি বড় বিবেচনা করতে পারি? আমি মনে করি যে 5 টিরও বেশি পরামিতি খুব বেশি। আপনি কি মনে করেন?


1
এখানে এই প্রশ্নটি উল্লেখ করে যা কতগুলি পরামিতি অনেক বেশি তার একটি ব্যবহারিক উদাহরণ ...
গিডন

5
জাভাস্ক্রিপ্টে 65537 পরামিতিগুলি অনেক বেশি: jsfiddle.net/vhmgLkdm
অদিত এম শাহ

কেবল অ্যাপাচি HTTP উপাদানগুলি দেখুন এটি থেকে গতিশীল কিছু তৈরি করা প্রায় অসম্ভব
অ্যান্ড্রু স্কট ইভান্স

উত্তর:


162

কখন এমন অশ্লীল বিষয় হিসাবে বিবেচনা করা হয় যা এমন 1 টি সংশোধন গ্যারান্টি দিয়ে বাকবিতণ্ডার হওয়া সত্ত্বেও নিয়ন্ত্রণ করা যায়? বিচারপতি পটার স্টুয়ার্টের মতে, "আমি যখন এটি দেখি তখন তা আমি জানি know" এখানেও একই জিনিস।

আমি এ জাতীয় কঠোর এবং দ্রুত নিয়ম তৈরি করা ঘৃণা করি কারণ উত্তরটি কেবল আপনার প্রকল্পের আকার এবং স্কোপের উপর নির্ভর করে পরিবর্তিত হয় না, তবে আমি মনে করি এটি এমনকি মডিউল স্তরেও পরিবর্তিত হয়। আপনার পদ্ধতিটি কী করছে বা শ্রেণিটি কী উপস্থাপন করবে তার উপর নির্ভর করে এটি সম্ভব যে 2 টি যুক্তি অনেক বেশি এবং খুব বেশি মিলনের লক্ষণ।

আমি আপনাকে প্রথমে প্রশ্ন জিজ্ঞাসা করার, এবং আপনার প্রশ্নকে যতটা করেছেন তার যোগ্যতা দিয়ে পরামর্শ দিচ্ছি, আপনি সত্যিই এই সমস্তটি জানেন। এখানে সর্বোত্তম সমাধান হ'ল একটি শক্ত এবং দ্রুত সংখ্যার উপর নির্ভর করা নয়, পরিবর্তে আপনার সহকর্মী এবং আঁটসাঁট দম্পতি রয়েছে এমন অঞ্চলগুলি সনাক্ত করতে আপনার সমবয়সীদের মধ্যে নকশা পর্যালোচনা এবং কোড পর্যালোচনার দিকে নজর দিন।

আপনার কর্মীদের আপনার কাজ দেখানোর জন্য কখনই ভয় পাবেন না। আপনি যদি ভয় পান তবে সম্ভবত এটিই আরও বড় চিহ্ন যে আপনার কোডটিতে কিছু ভুল রয়েছে এবং আপনি এটি ইতিমধ্যে জানেন


থাম্বের একটি ভাল নিয়ম হ'ল সিপিইউ নিবন্ধকের সংখ্যা, কারণ আর কম্পাইলার তাদের স্ট্যাকের জন্য বরাদ্দ করতে বাধ্য হবে।
Michaelangel007

1
@ মাইচেলঞ্জেল 7007 আপনি যে উত্তরটি মন্তব্য করছেন সে সম্পর্কে আপনি তা বলা উচিত নয়, কারণ এটি বলে যে কোনও নিয়ম নেই। তদ্ব্যতীত, পরামিতিগুলির সংখ্যা কর্মক্ষমতা নয়, পঠনযোগ্যতার বিষয়।
ক্লিপ

1
@ clemp6r ভুল - এটি উভয়ই । সংকলক ছেলেরা সবসময় "রেজিস্টার স্পিল" এর সাথে ডিল করতে হয়। শুধুমাত্র প্রামাণিক উত্তর কি আপনার কম্পাইলার উৎপাদিত হয় সমাবেশ পরিদর্শন করা হয়। নিবন্ধগুলির সংখ্যা একই প্ল্যাটফর্মে যাদুতে পরিবর্তন হয় না । en.wikedia.org/wiki/Register_allocation
Michaelangel007

124

কোনও ফাংশনে কেবলমাত্র অনেকগুলি পরামিতি থাকতে পারে যদি কিছু প্যারামিটারগুলি অতিরিক্ত কাজ করে। যদি সমস্ত পরামিতি ব্যবহৃত হয় তবে ফাংশনে অবশ্যই পরামিতির সঠিক সংখ্যা থাকতে হবে। প্রায়শই ব্যবহৃত এই কার্যটি গ্রহণ করুন:

HWND CreateWindowEx
(
  DWORD dwExStyle,
  LPCTSTR lpClassName,
  LPCTSTR lpWindowName,
  DWORD dwStyle,
  int x,
  int y,
  int nWidth,
  int nHeight,
  HWND hWndParent,
  HMENU hMenu,
  HINSTANCE hInstance,
  LPVOID lpParam
);

এটি 12 টি প্যারামিটার (9 আপনি যদি আয়তক্ষেত্র হিসাবে x, y, w এবং h বান্ডিল করেন) এবং বর্গের নাম থেকে প্রাপ্ত প্যারামিটারগুলিও রয়েছে। আপনি কীভাবে এটি হ্রাস করবেন? আপনি কি আরও বেশি সংখ্যাটি হ্রাস করতে চান?

দেবেন না পরামিতি সংখ্যা তোমাকে বিরক্ত, শুধু নিশ্চিত করুন যে এটি লজিক্যাল এবং তথ্যসমৃদ্ধ এর করতে এবং intellisense দিন * যদি আপনার সাহায্যের।

* অন্যান্য কোডিং সহকারী পাওয়া যায়!


37
আমি এটিকে ভোট দিচ্ছি "3" এবং "4" বলার অন্য সমস্ত উত্তর দেখে আমি অবাক! সঠিক উত্তরটি হ'ল: সর্বনিম্ন প্রয়োজনীয়, যা কখনও কখনও বেশ কয়েকটি হতে পারে।
টনি অ্যান্ড্রুজ

16
আজ যদি সেই ফাংশনটি ডিজাইন করা হয় তবে এটি সম্ভবত কিছুটা অন্যরকম লাগবে। x, y, n প্রস্থ এবং n উচ্চতা একটি আয়তক্ষেত্রের বস্তুতে বান্ডিল করা যেতে পারে। স্টাইল এবং xStyle এনাম বা স্ট্রিং একটি সেট মধ্যে একত্রিত হতে পারে। এখন আপনার কাছে মাত্র 8 টি প্যারামিটার রয়েছে।
ফিনিউ

16
@ ফিনওয়াল যদি আজ সেই ফাংশনটি ডিজাইন করা হত? এটি ইতিমধ্যে পুনরায় নকশা করা হয়েছে। ফর্ম এফ = নতুন ফর্ম (); 0 পরামিতি আছে।
নিক

36
এটি সি এবং উইনপি। এর চেয়ে খারাপ উদাহরণ আমি ভাবতে পারি না।
L̲̳o̲̳̳n̲̳̳g̲̳̳p̲̳o̲̳̳k̲̳̳e̲̳̳

17
না না. এটি প্রক্রিয়াগত স্টাইল। উইন্ডোজ হ'ল অবজেক্টস, সুতরাং এটি এখন অপ্রচলিত। আজ, এটি একত্রিত ক্লাসগুলির সাথে সমাধান করা হবে, গুচ্ছ প্যারামিটারগুলির সাথে নয়। ভাল ডিজাইনের স্বজ্ঞাত নিয়মটি হ'ল যদি আপনি একটি সাধারণ বাক্যে ফাংশন (প্যারামিটার সহ) বর্ণনা করতে না পারেন তবে এটি খুব কম নকশাকৃত । আমি বিশ্বাস করি এটিই কেস।
জানু তুরো

106

ইন ক্লিন কোড , রবার্ট সি মার্টিন বিষয় চার পৃষ্ঠাগুলি অনুগত। এখানে সংক্ষেপ:

কোনও ফাংশনের জন্য আর্গুমেন্টের আদর্শ সংখ্যা শূন্য (নীলাদিক)। এরপরে আসে এক (একাকী), তার পরে দু'জনে (ডায়াডিক) closely তিনটি যুক্তি (ট্রায়ডিক) যেখানে সম্ভব সেখানে এড়ানো উচিত। তিনটিরও বেশি (পলিয়েডিক) খুব বিশেষ ন্যায্যতা প্রয়োজন - এবং তারপরে যাইহোক এটি ব্যবহার করা উচিত নয়।


2
আমি সন্দেহ করি এটিতে "এটি" অন্তর্ভুক্ত কারণ এটি হ'ল মৃত্যুদন্ডের প্রসঙ্গ। ফাংশনাল প্রোগ্রামিংয়ে, প্রসঙ্গটি বিশ্বব্যাপী এবং ওওপে, প্রসঙ্গটি হ'ল আপনি যে পদ্ধতিতে পদ্ধতিটি প্রয়োগ করছেন তা। এছাড়াও, যদি আপনি প্যারামিটার তালিকায় "এটি" অন্তর্ভুক্ত করেন তবে 0 টি প্যারাম (আদর্শ) থাকা অসম্ভব।
টম

1
না, এটি "এটি" অন্তর্ভুক্ত করে না।
প্যাট্রিক ম্যাকএলহানি

20
অধিকন্তু, মার্টিনের সি ++ স্ট্যান্ডার্ড কমিটির সাথে একটি শব্দ থাকা উচিত। <ক্যালগরিদম> এর অর্ধেকটি 3 টির বেশি পরামিতি নেয় কারণ কেবলমাত্র একটি পুনরাবৃত্তির পরিধি ইতিমধ্যে 2 2 এটি কেবল পুনরাবৃত্তকারীদের সাথে প্রোগ্রামিংয়ের প্রকৃতি (যেমন এসটিএল সংগ্রহের সাথে জেনেরিক প্রোগ্রামিং)।
স্টিভ জেসোপ

3
@ স্টিভ জেসোপ: <আলগোরিদিম> এর দোষটি হ'ল এটি সর্বদা একটি স্লাইসে কাজ করে। যদি অ্যালগরিদম এবং সংগ্রহটি নতুনভাবে ডিজাইন করা হয় তবে আমি অ্যালগোরিদমকে সর্বদা পুরো সংগ্রহটি তৈরি করতে প্রস্তুত করতাম এবং আপনি অ্যালগোরিদমগুলিকে অংশগুলিতে কাজ করার অনুমতি দেওয়ার জন্য কোনও সংকলনের ভিউ টুকরো করার উপায় পাবেন; বিকল্পভাবে আমি সাধারণ ক্ষেত্রে কাজ করা সহজ করার জন্য একটি শর্টহ্যান্ড ওভাররাইডও সংজ্ঞায়িত করব।
মিথ্যা রায়ান

3
@ লাইআরয়ান: যদিও আমি যদি আবার নতুন ডিজাইন <algorithm>করছিলাম তবে আমার এটির কোনও রেঞ্জের বস্তুতে কাজ করা উচিত। সংগ্রহগুলি ব্যাপ্তি হতে পারে তবে সমস্ত ব্যাপ্তি সংগ্রহ নয়। এবং প্রকৃতপক্ষে, বুস্ট এটি ইতিমধ্যে করেছে। যাইহোক, আমার বক্তব্যটি হ'ল ব্যাপকভাবে ব্যবহৃত লাইব্রেরি এই পরামর্শটিকে অগ্রাহ্য করে, তাই আপনি যদি এটি করেন তবে আপনার সাথে সবচেয়ে খারাপ হওয়ার নিশ্চয়তা সবচেয়ে বেশি, আপনার লক্ষ লক্ষ ব্যবহারকারী আপনার ইন্টারফেসে সামান্য সরলকরণের সাথে ঝাঁকুনি দিবেন ;-)
স্টিভ Jessop

79

চারপাশে খুব বেশি পরামিতি পেরিয়ে যাওয়া এড়াতে আমি অতীতে কয়েকটি কোডের সাথে বিশ্বব্যাপী ভেরিয়েবল ব্যবহার করেছি।

দয়া করে এটি করবেন না!

(সাধারণত।)


কিছু জিনিস আমি একই জিনিস অর্জনের জন্য ব্যবহৃত শ্রেণীর সদস্যদের নিয়ে কাজ করছিলাম। তখন আমি একজন সি প্রোগ্রামার ছিলাম এবং আমি জিজ্ঞাসা করলাম, কেন এতগুলি বিশ্বব্যাপী ভেরিয়েবল রয়েছে, কেন ইনপুট / আউটপুটগুলি স্পষ্টভাবে পরামিতি হতে পারে না?
ব্যবহারকারী 3528438

38

আপনি যদি স্বাক্ষর করে প্যারামিটারগুলি মানসিকভাবে গণনা করা শুরু করেন এবং তাদের সাথে কলটি মেলে, তবে সময়টি রিফ্যাক্টর হওয়ার সময় এসেছে!


এটি একটি খুব ভাল উত্তর। যদি প্যারামিটারগুলি যৌক্তিকভাবে সংগঠিত করা হয় (x, y, w, h) তাদের সবগুলি সঠিক ক্রমে মনে রাখা সহজ। পিটিসি-তে ফাইল ফাইলের পয়েন্টার (যেখানে কেবল দুটি প্যারামিটার রয়েছে) রাখার জায়গাটি বিবেচনা করা কঠিন, বিশেষত যেহেতু fprintf এর বিপরীত।
ব্যবহারকারীর 877329

উত্তম উত্তর। খুব ভাল বলেছেন
আনোয়ার

31

আপনার সমস্ত জবাবের জন্য আপনাকে অনেক ধন্যবাদ:

  • এমন লোকদের খুঁজে পাওয়াটা খানিকটা অবাক হয়েছিল যাঁরাও ভাবেন (যেমন আমি করি) যে 5 টি পরামিতি কোডটির বিশুদ্ধতার জন্য একটি ভাল সীমা।

  • সাধারণত, লোকেরা সম্মত হন যে 3 থেকে 4 এর মধ্যে একটি সীমা হ'ল থাম্বের নিয়ম। এটি যুক্তিসঙ্গত কারণ লোকেরা সাধারণত 4 টিরও বেশি জিনিস গণনা করতে খারাপ সময় ব্যয় করে।

  • মিলান ইঙ্গিত হিসাবে , গড়ে লোকেরা একবারে কমপক্ষে 7 টি জিনিস মাথায় রাখতে পারে। তবে আমি মনে করি আপনি এটি ভুলতে পারবেন না, আপনি যখন কোনও রুটিন ডিজাইন / রক্ষণাবেক্ষণ / অধ্যয়ন করছেন তখন আপনাকে কেবল পরামিতিগুলির চেয়ে আরও কিছু জিনিস মনে রাখা উচিত।

  • কিছু লোক বিবেচনা করে যে কোনও রুটিনে এটি যতটা যুক্তিযুক্ত হওয়া উচিত। আমি সম্মত, তবে কেবলমাত্র কয়েকটি নির্দিষ্ট ক্ষেত্রে (ওএস API গুলি, রুটিনগুলিতে কল যেখানে অপ্টিমাইজেশন গুরুত্বপূর্ণ, ইত্যাদি)। আমি যখনই সম্ভব এই কলগুলির উপরে বিমূর্ততার একটি স্তর যুক্ত করে এই রুটিনগুলির জটিলতাগুলি আড়াল করার পরামর্শ দিই।

  • নিক এই সম্পর্কে কিছু আকর্ষণীয় চিন্তাভাবনা আছে। আপনি যদি তাঁর মন্তব্যগুলি পড়তে না চান তবে আমি আপনার জন্য সংক্ষেপে বলছি: সংক্ষেপে, এটি নির্ভর করে :

    আমি এ জাতীয় কঠোর এবং দ্রুত নিয়ম তৈরি করা ঘৃণা করি কারণ উত্তরটি কেবল আপনার প্রকল্পের আকার এবং স্কোপের উপর নির্ভর করে পরিবর্তিত হয় না, তবে আমি মনে করি এটি এমনকি মডিউল স্তরেও পরিবর্তিত হয়। আপনার পদ্ধতিটি কী করছে বা শ্রেণিটি কী উপস্থাপন করবে তার উপর নির্ভর করে এটি সম্ভব যে 2 টি যুক্তি অনেক বেশি এবং খুব বেশি মিলনের লক্ষণ।

    এখানকার নৈতিক আপনার সহকর্মীদের কাছে আপনার কোডটি দেখানো ভয় পাবেন না, তাদের সাথে আলোচনা করুন এবং "আপনারা যেখানে কম সংযোগ এবং আঁটসাঁট দম্পতি রয়েছে সেগুলি চিহ্নিত করার চেষ্টা করুন "

  • পরিশেষে, আমি মনে করি যে Wnoise অনেক নিক এর সাথে একমত, এবং প্রোগ্রামিংয়ের শিল্পের এই কাব্যিক দর্শনের (নীচে মন্তব্য দেখুন) তার ব্যঙ্গাত্মক অবদানের সাথে সমাপ্ত :

    প্রোগ্রামিং ইঞ্জিনিয়ারিং নয়। কোডের সংগঠন একটি শিল্প কারণ এটি মানুষের উপাদানগুলির উপর নির্ভর করে যা কোনও কঠোর নিয়মের প্রসঙ্গে খুব বেশি নির্ভর করে।


16

এই উত্তরটি একটি ওও ভাষা ধরে নিয়েছে। আপনি যদি একটি ব্যবহার না করে থাকেন - এই উত্তরটি এড়িয়ে যান (এটি অন্য কথায় ভাষা-অজ্ঞাত উত্তর নয়।

যদি আপনি 3 বা ততোধিক প্যারামিটারগুলি (বিশেষত অভ্যন্তরীণ ধরণ / অবজেক্টস) পাস করে থাকেন তবে এটি "খুব বেশি" নয় তবে আপনি একটি নতুন অবজেক্ট তৈরির সুযোগ হারিয়ে ফেলতে পারেন।

একাধিক পদ্ধতিতে পাস হওয়া প্যারামিটারগুলির গোষ্ঠীগুলি সন্ধান করুন - এমনকি দুটি পদ্ধতিতে পাস করা একটি গ্রুপ প্রায় গ্যারান্টি দেয় যে আপনার সেখানে একটি নতুন অবজেক্ট থাকা উচিত।

তারপরে আপনি আপনার নতুন অবজেক্টে রিফ্যাক্টর কার্যকারিতা এবং আপনি বিশ্বাস করবেন না যে এটি আপনার কোড এবং ওও প্রোগ্রামিং সম্পর্কে আপনার বোঝার উভয়কে কতটা সহায়তা করে।


দয়া করে এমন একটি ভাষার নাম দিন যা রুটিন বা পরামিতি ব্যবহার করে না। আমি একটির কথা ভাবতে পারি না, এমনকি সমাবেশকেও রুটিন (লেবেল) বলে মনে করা যেতে পারে।
অরোন

x86 সমাবেশে অবশ্যই রুটিন রয়েছে (কল / রিটার্ন)। অন্যদের জন্য সিএমপি / জেএমপি কম্বোস লাগতে পারে।
ব্রায়ান নোব্লাচ

দুঃখিত, "রিট" নয়, "ফিরবেন"। Sighs। ইতোমধ্যে অনেক দিন কেটে গেছে।
ব্রায়ান নোব্লাচ

অস্পষ্ট বর্ণনামূলক অরোন সম্পর্কে দুঃখিত, আমি বিশ্বাস করি আমি এটি ঠিক করেছি। এটি আমার উত্তর ছিল যা ভাষা-নির্দিষ্ট ছিল, প্রশ্ন নয়।
বিল কে

1
সমস্ত ভাষা স্ট্রাকচারগুলি পাস করার অনুমতি দেয় না। এছাড়াও, একটি কাঠামো পাস করার অর্থ হ'ল গ্রহণ পদ্ধতিটি কাঠামোটি পরিচালনা করতে কোড থাকতে হবে এবং তাই আরও পরামিতিগুলির প্রয়োজন হতে পারে। এছাড়াও, অ-ওও ভাষায় আপনার সাধারণত অতিরিক্ত প্যারামিটারের প্রয়োজন হয় - সমস্ত ওও ভাষায় "এটি" এর একটি "লুকানো" প্যারামিটার রয়েছে যা অন্যথায় পাস করা উচিত (বা, আরও ভয়াবহ ভাষা / নকশায়, বিশ্বব্যাপী হতে পারে অ্যাক্সেসযোগ্য)
বিল কে

13

দেখে মনে হচ্ছে নিছক সংখ্যা ব্যতীত অন্যান্য বিবেচনা রয়েছে, এখানে কিছু মনে আছে যা:

  1. যুক্ত-ও-অফ সেটিংস বনাম ফাংশনের প্রাথমিক উদ্দেশ্যটির সাথে যৌক্তিক সম্পর্ক

  2. এগুলি যদি কেবল পরিবেশের পতাকা হয় তবে বান্ডিলিং খুব সহজ হতে পারে


12

অ্যালান পেরিলিসের একটি সুপরিচিত প্রোগ্রামিং এপিগ্রামের (এসিএম সিগপ্ল্যান নোটিশ ১ 17 (৯), সেপ্টেম্বর, ১৯৮২ তে বর্ণিত) বলেছেন যে "যদি আপনার 10 টি প্যারামিটার নিয়ে একটি পদ্ধতি থাকে তবে আপনি সম্ভবত কিছুটি মিস করেছেন।"


11

কোড কমপ্লিটে স্টিভ ম্যাককনেলের মতে আপনার উচিত

একটি রুটিনের পরামিতিগুলির সংখ্যা প্রায় সাতটিতে সীমাবদ্ধ করুন


3
/: সংখ্যাটি ইঙ্গিত করে যে
ফ্যাক্টয়েডটি

9

আমার জন্য, যখন তালিকাটি আমার আইডিইতে একটি লাইন অতিক্রম করবে, তখন এটি একটি পরামিতি অনেক বেশি। চোখের যোগাযোগ না ভেঙে আমি সমস্ত পরামিতি এক লাইনে দেখতে চাই। তবে এটি কেবল আমার ব্যক্তিগত পছন্দ।


এটি ভাল, যতক্ষণ না আপনি কিছু ডেভসের সাথে ফু চেষ্টা করবেন (ইন্ট এ, ফ্লোট বি, স্ট্রিং সি, ডাবল ডি)। আমি অনুমান করি যে তাদের সাথে কাজ করা এড়ানোর চেষ্টা করা ভাল। : ডি
রেন্টোলজিস্ট

4
যদি অন্য কেউ ক্লাসগুলি হাস্যকরভাবে দীর্ঘ নাম দেয় তবে আমি কীভাবে আমার রুটিনগুলি সংজ্ঞায়িত করব বা কল করব তা প্রভাবিত হতে দেব না।
ফিনউউ

9
আমি কি আপনাকে "গাড়ীর ফেরার" সাথে পরিচয় করিয়ে দিতে পারি?

3
তালিকাটি যখন আপনার আইডিইতে একটি লাইন অতিক্রম করে, তখন আপনার মনিটরটি সেই কোডটি ব্যবহার করে খুব ছোট হয় এবং আপনার উচ্চতর অনুভূমিক রেজোলিউশনের সাথে স্পষ্টভাবে একটি মনিটর কিনতে হবে। একটি পংক্তির বিরতি বা পরামিতিগুলির পরিমানের হ্রাস হ'ল কেবলমাত্র কাজের ক্ষেত্র যা মূল সমস্যাটি সমাধান করে না যা আপনার মনিটরটি সেই কোডবেসের জন্য খুব ছোট!
কাইসরুলদী

9

আমি সাধারণত 5 এর সাথে একমত হই, তবে যদি আমার এমন আরও পরিস্থিতি থাকে যেখানে আমার আরও বেশি প্রয়োজন হয় এবং সমস্যাটি সমাধানের এটি সবচেয়ে সুস্পষ্ট উপায় হয় তবে আমি আরও বেশি ব্যবহার করব।


8

স্বল্পমেয়াদী স্মৃতিতে সাতটি জিনিস?

  1. ফাংশনের নাম
  2. ফাংশনের রিটার্ন মান
  3. ফাংশনের উদ্দেশ্য
  4. প্যারামিটার 1
  5. প্যারামিটার 2
  6. প্যারামিটার 3
  7. প্যারামিটার 4

আমরা হব. এটি থাম্ব একটি নিয়ম। আপনি যখন কোনও ফাংশনের বডি কোডিং করছেন, আপনি এটির নামটি যত্ন নেবেন না, এবং ফেরতের মান এবং এর পুরষ্কারগুলি নিবিড়ভাবে সম্পর্কিত।
অরোন

7
8. পরামিতিগুলির ক্রম
ইভা

7

ইন খারাপ 5 কোড বন্ধকৃত , দ্বিতীয় এক পরীক্ষা, "এই একটি কন্সট্রাকটর হয়"। এটির মতো 37 ⋅ 4 ≈ 150 পরামিতি রয়েছে:

এখানে একজন প্রোগ্রামার এই কন্সট্রাক্টর লিখেছেন [... S] ome আপনারা মনে করতে পারেন এটি হ'ল এটি একটি বড় কনস্ট্রাক্টর তবে তিনি গ্রহনটি স্বয়ংক্রিয় কোড জেনারেশন টুলস ব্যবহার করেছিলেন [।] এনওইউ, এই কনস্ট্রাক্টরে একটি ছোট্ট বাগ পাওয়া গিয়েছিল যা আমাকে তৈরি করেছিল এই কনস্ট্রাক্টরটি হাতে হাতে লেখা হয়েছিল lude (উপায় দ্বারা এটি শুধুমাত্র নির্মাণকারীর শীর্ষ অংশ, এটি সম্পূর্ণ নয়)।

150 প্যারামিটারের সাথে কনস্ট্রাক্টর


এটি অত্যন্ত দুঃখজনক ... "রেকর্ডস" বা "স্ট্রাক্টস" বা "মান অবজেক্টগুলি" সম্পর্কে না জানা, যা বিভিন্ন মানকে একত্রে বান্ডিল করে এবং একটি সাধারণ নাম দেয় যাতে আপনি পাঠ্য পদ্ধতিতে তাদের প্রচুর পরিমাণে শ্রেণিবদ্ধভাবে উপস্থাপন করতে পারেন এমনটি হ'ল ঘোরাফেরা করার মতো is বছরের পর বছর ধরে জুতোহীন অবস্থায় থাকায় কেউ আপনাকে কখনও বলেনি যে আপনি এটি করতেও পারেন ye
ইয়োমন

6

প্রয়োজনের তুলনায় আরও একটি। আমি গ্লিব হওয়া চাই না, তবে কিছু ফাংশন রয়েছে যা অগত্যা বেশ কয়েকটি বিকল্পের প্রয়োজন। উদাহরণ স্বরূপ:

void *
mmap(void *addr, size_t len, int prot, int flags, int fildes, off_t offset);

এখানে 6 টি যুক্তি রয়েছে এবং তাদের প্রত্যেকটিই প্রয়োজনীয়। তদুপরি, তাদের বান্ডিল করার ন্যায্যতা জানাতে তাদের মধ্যে কোনও সাধারণ লিঙ্ক নেই। হতে পারে আপনি "স্ট্রাক্ট এমএমপার্জস" সংজ্ঞায়িত করতে পারেন তবে এটি আরও খারাপ হবে।


ঠিক আছে, protএবং flagsএটি একসাথে ঘূর্ণিত করা যেতে পারে যদি এটি ডিজাইনারের দ্বারা অনুভূত হয় যে 5 কোনওভাবে একটি যাদু সংখ্যা ছিল যা 6 এর চেয়ে অনেক ভাল open। এবং হয়ত আপনি পারে পরিত্রাণ পেতে offsetউল্লেখ বর্তমান সময়ে ম্যাপ অধ্যায় শুরু পদে নেওয়া দ্বারা filedes। আমি জানি না এমন কোনও পরিস্থিতি রয়েছে যেখানে আপনি এমন mmapএকটি অঞ্চল করতে পারেন যেখানে আপনি প্রবেশ করতে সক্ষম নন lseek, তবে তা না হলে এটি কঠোরভাবে প্রয়োজনীয় নয়।
স্টিভ জেসোপ

... সুতরাং আমি মনে করি mmapএই সত্যটির একটি ভাল চিত্র যা কিছু ডিজাইনার এবং ব্যবহারকারীরা পরামিতিগুলির একটি দীর্ঘ দীর্ঘ তালিকা পছন্দ করেন, অন্যরা কল করার আগে কিছু সংখ্যক পরামিতি প্রস্তুত করতে কয়েকটি পদক্ষেপ অতিক্রম করতে পছন্দ করেন।
স্টিভ জেসোপ

1
@ স্টিভ: পৃথক কল দিয়ে সন্ধানের অবস্থান নির্ধারণের আগেই একটি অকার্যকর দৌড়ের শর্তটি চালু করা হত। কিছু এপিআই (ওপেনজিএল) এর জন্য এমন অনেকগুলি পরামিতি রয়েছে যা কোনও কলকে প্রভাবিত করে যা আপনাকে সত্যই রাষ্ট্র ব্যবহার করতে হয় তবে সাধারণত প্রতিটি কল যতটা সম্ভব একা দাঁড়িয়ে থাকে stand দূরত্বে অ্যাকশন হ'ল অন্ধকার দিকের পথ।
বেন ভয়েগট

5

পার্ল সেরা অভ্যাস অনুসারে 3 টি ঠিক আছে, 4 টি অনেক বেশি। এটি কেবল একটি গাইডলাইন, তবে আমাদের দোকানে এটিই আমরা আঁকড়ে থাকার চেষ্টা করি।


5

আমি নিজে 5 প্যারামিটারে সর্বজনীন কাজের জন্য সীমাটি আঁকতাম

আইএমএইচও, দীর্ঘ পরামিতি তালিকাগুলি কেবলমাত্র ব্যক্তিগত / স্থানীয় সহায়ক ফাংশনগুলিতে গ্রহণযোগ্য যা কেবল কোডের কয়েকটি নির্দিষ্ট জায়গা থেকে ডাকে। এই ক্ষেত্রেগুলিতে আপনাকে প্রচুর রাষ্ট্রীয় তথ্য পাস করার প্রয়োজন হতে পারে তবে পাঠযোগ্যতা এতটা উদ্বেগের বিষয় নয় যেহেতু কেবল আপনার (বা আপনার কোডটি বজায় রাখার জন্য এবং আপনার মডিউলটির মূল বিষয়গুলি বোঝা উচিত) তার যত্ন নেওয়া উচিত have যে ফাংশন কলিং।


ঠিক ঠিক কেন এই মুহুর্তে প্রচুর লোক এমন সমস্ত কিছু তৈরি করে যা কোনও আসল যুক্তি নয়, তবে রাষ্ট্র বহন করে, কেবল ক্ষেত্রের আকারে (কোনও সদস্যের ভেরিয়েবল) কোনও বস্তুর অবস্থা। যে বস্তু একটি শ্রেণি হিসাবে উপস্থাপন করা হবে। এটি একবার বা প্রতিটি ব্যবহারের জন্য ইনস্ট্যান্ট করা হবে। কখনও কখনও এই জাতীয় কোনও অবজেক্টের কেবলমাত্র ব্যক্তিগত বা জনসাধারণের পদ্ধতিতে একটি প্যাকেজ থাকে যা পরে কয়েকটি যুক্তি দিয়ে ব্যক্তিগত পদ্ধতিতে কাজ করে। কয়েকটি যুক্তিই এখন সম্ভব কারণ কনফিগারেশন এবং রাষ্ট্রের এখন যথাযথ স্থান রয়েছে :)
ইয়োমন

5

একটি সম্পর্কিত প্রশ্ন আপনার বিবেচনা করা উচিত রুটিনটি কতটা সম্মতিজনক hes প্যারামিটারগুলির একটি বিশাল সংখ্যক গন্ধ হতে পারে যা আপনাকে বলছে যে রুটিন নিজেই খুব বেশি করার চেষ্টা করছে এবং তাই এটি সংহতি সন্দেহজনক। আমি একমত যে একটি শক্ত এবং দ্রুত সংখ্যক পরামিতি সম্ভবত অসম্ভব তবে আমি অনুমান করব যে একটি উচ্চ সংহতি রীতিটি কম সংখ্যক প্যারামিটারকে বোঝায়।



4

থাম্বের সাধারণ নিয়ম হিসাবে আমি তিনটি পরামিতিগুলিতে থামি। এর চেয়ে বেশি এবং এটির পরিবর্তে প্যারামিটারগুলির একটি অ্যারে বা একটি কনফিগারেশন অবজেক্ট পাস করার সময় এসেছে যা এপিআই পরিবর্তন না করে ভবিষ্যতের পরামিতিগুলি যুক্ত করার অনুমতি দেয়।


যদি এপিআই পরিবর্তন হয়, তবে এপিআই'র প্রকৃতপক্ষে পরিবর্তন হওয়া উচিত, কেবলমাত্র অদৃশ্যতা ঘটতে পারে যেখানে স্টিলথ পরিবর্তন হতে পারে তবে তা কম স্পষ্ট হবে।
16

যাইহোক, যদি আপনার প্রান্তের
কেসটি

4

প্যারামিটার তালিকায় দৈর্ঘ্যের সীমাবদ্ধতা আরও একটি বিধিনিষেধ। এবং সীমাবদ্ধতা হ'ল প্রয়োগিত সহিংসতা। এটি মজার শোনায় তবে প্রোগ্রামিং করার পরেও আপনি অহিংস হতে পারেন। কেবল কোডটি নিয়মাবলী নির্ধারণ করুন। এটা সুস্পষ্ট যে আপনার যদি অনেকগুলি পরামিতি থাকে তবে ফাংশন / শ্রেণি পদ্ধতির বডিটি সেগুলি ব্যবহারের পক্ষে যথেষ্ট পরিমাণে বড় হবে। এবং বড় কোড স্নিপেটগুলি সাধারণত রিফ্যাক্টর করে ছোট অংশগুলিতে বিভক্ত করা যায়। সুতরাং আপনি বিনামূল্যে বোনাস হিসাবে অনেক পরামিতি থাকার বিরুদ্ধে সমাধান পান, কারণ সেগুলি কোডের ছোট রিফ্যাক্টর টুকরোগুলির মধ্যে বিভক্ত।


4

পারফরম্যান্সের দৃষ্টিভঙ্গি থেকে একটি জিনিস আমি উল্লেখ করব যে আপনি কোনও পদ্ধতিতে প্যারামিটারগুলি কীভাবে পাস করবেন তার উপর নির্ভর করে, মান অনুসারে প্রচুর প্যারামিটারগুলি প্রোগ্রামকে ধীর করে দেবে কারণ প্রতিটি পরামিতি অনুলিপি করতে হবে এবং তারপরে স্ট্যাকের উপর স্থাপন করতে হবে।

সমস্ত প্যারামিটারকে অন্তর্ভুক্ত করার জন্য একটি একক শ্রেণি ব্যবহার করা আরও ভাল কাজ করবে কারণ রেফারেন্স দিয়ে পাস করা একটি একক প্যারামিটারটি মার্জিত এবং ক্লিনার এবং দ্রুততর হবে!


আমি এই উত্তরটি একটি +1 দিচ্ছি কারণ এটিই কেবলমাত্র কোড-সাফাই বা স্বেচ্ছাসেবী সীমা ছাড়াও যে কোনও বিষয় নিয়ে আলোচনা করে, যা উভয়ই বিষয়গত। আপনি যখন লুপে থাকবেন এবং স্ট্যাকের উপর এবং বাইরে কয়েক ডজন আর্গুমেন্ট চাপ দিচ্ছেন তখন কিছু লোক স্ট্যাকের সাথে কী করছেন সে সম্পর্কে ভেবে নাও পেতে পারে। যদি এটি কোনও লুপে থাকে তবে আপনার যে সংস্থাগুলি সংকলন করছেন এটিতে নিবন্ধভুক্ত রেজিস্ট্রারদের দ্বারা পাস হওয়া সংখ্যক আর্গুমেন্টগুলি ব্যবহার করে আপনার বিবেচনা করা উচিত। উদাহরণস্বরূপ, এমএস x64 এবিআইতে, রেজিস্ট্রারগুলির মাধ্যমে পাস করা সর্বাধিক আরগগুলি 4 হয় "সিস্টেম ভি" এবিআই (নন-উইন্ডোজ ওএস দ্বারা ব্যবহৃত) আরও নিবন্ধগুলি ব্যবহার করে, তাই 4 টি আর্গিটি সুন্দর বহনযোগ্য ব্যবহার করে
লেকি

3

আমার মতে এমন ঘটনাও ঘটতে পারে যেখানে আপনি 4 বা কিছু নির্দিষ্ট সংখ্যার বেশি হবেন। দেখার বিষয় হতে পারে

  1. আপনার পদ্ধতিটি খুব বেশি করছে এবং আপনাকে অ্যাক্টেক্টর দরকার।
  2. আপনি কোনও সংগ্রহ বা কিছু ডেটা স্ট্রাকচার ব্যবহার করে বিবেচনা করতে পারেন।
  3. আপনার শ্রেণি নকশাটি পুনর্বিবেচনা করুন, সম্ভবত কিছু জিনিস চারপাশে পাস করার প্রয়োজন হবে না।

ব্যবহারের স্বাচ্ছন্দ্য বা কোড পড়ার স্বাচ্ছন্দ্যের একটি কোণ থেকে, আমি মনে করি যখন আপনার পদ্ধতির স্বাক্ষরটি "শব্দ মোড়ানো" দরকার, তখন আপনাকে থামিয়ে দেওয়া এবং ভাবনা করা উচিত, যদি না আপনি অসহায় বোধ করেন এবং স্বাক্ষরটিকে ছোট করে সীসা তৈরি করার সমস্ত প্রচেষ্টা না করেন তবে কোন ফল। অতীতে এবং বর্তমানের কিছু খুব ভাল লাইব্রেরি 4-5 টির বেশি প্রাম ব্যবহার করে।


3

আমার থাম্বের নিয়মটি হ'ল একটি কলটি দেখার জন্য এবং এটি কী করে তা বলার জন্য আমার যথেষ্ট দীর্ঘ প্যারামিটারগুলি মনে রাখা দরকার। সুতরাং যদি আমি পদ্ধতিটি দেখতে না পারি এবং তারপরে কোনও পদ্ধতির কলটিতে ফ্লিপ করি এবং মনে রাখি যে কোন প্যারামিটারটি কী করে তবে সেখানে অনেকগুলি রয়েছে।

আমার জন্য এটি প্রায় 5 এর সমান, তবে আমি তেমন উজ্জ্বল নই। আপনার মাইলেজ পরিবর্তিত হতে পারে.

আপনি প্যারামিটারগুলি ধরে রাখতে সম্পত্তি সহ একটি অবজেক্ট তৈরি করতে পারেন এবং আপনি যে পরিমাণ সীমা নির্ধারণ করেছেন তা ছাড়িয়ে গেলে তা পাস করতে পারেন। মার্টিন ফাউলারের রিফ্যাক্টরিং বই এবং কল করার পদ্ধতিটির অধ্যায়ে আরও সহজ কল করুন।


1

এটি আপনি যে পরিবেশে কাজ করছেন তার উপর খুব বেশি নির্ভর করে example উদাহরণস্বরূপ জাভাস্ক্রিপ্ট নিন। জাভাস্ক্রিপ্টে প্যারামিটারগুলিতে উত্তীর্ণের সেরা উপায়টি কী / মান জোড়া যুক্ত বস্তুগুলি ব্যবহার করা হয়, যার অনুশীলনের অর্থ আপনার কেবলমাত্র একটি প্যারামিটার রয়েছে। অন্যান্য সিস্টেমে মিষ্টি স্পটটি তিন বা চারটে হবে।

শেষ পর্যন্ত, এটি সমস্ত ব্যক্তিগত স্বাদে সিদ্ধ হয়।


1

আমি 3 এর সাথে একমত আছি ঠিক আছে, 4 গাইডলাইন হিসাবে অনেক বেশি। আরও 3 টি পরামিতি সহ, আপনি অনিবার্যভাবে একটি কাজ পরে আরও বেশি করছেন। তারপরে আরও একটি কাজ পৃথক পদ্ধতিতে বিভক্ত করা উচিত।

যাইহোক, আমি যদি আমি সর্বশেষ প্রজেক্টে কাজ করেছি সেটির দিকে নজর রাখি তবে ব্যতিক্রমগুলি প্রচুর হবে এবং বেশিরভাগ ক্ষেত্রে 3 প্যারামিটারে নামা কঠিন হবে।


1

যদি আমার একটি রুটিনে 7-10 পরামিতি থাকে তবে আমি সেগুলিকে একটি নতুন ক্লাসে বান্ডিল করার দিকে তাকিয়ে দেখি তবে যদি সেই শ্রেণিটি আর কিছু না হয়ে থাকে তবে গ্রাহকরা এবং সেটারগুলির সাথে ক্ষেত্রগুলির একগুচ্ছ কিছুই হবে না - নতুন ক্লাসে শ্যাফাল মান ছাড়া অন্য কিছু করতে হবে এবং বাইরে। অন্যথায় আমি বরং দীর্ঘ প্যারামিটারের তালিকাটি পেশ করতাম।


1
আমি যদি এটি একাধিক জায়গায় ব্যবহার করা হয় তবে কেবলমাত্র ডেটা-ক্লাসের সাথে এটি বান্ডিল করব, তবে তারপরে আমি সাধারণত উভয় কনস্ট্রাক্টর তৈরি করি।
লেহন নোভাশ

1

এটি একটি পরিচিত সত্য যে, গড়পড়তা সময়ে লোকেরা একবারে 7 +/- 2 জিনিস মাথায় রাখতে পারে। আমি সেই নীতিটি পরামিতিগুলির সাথে ব্যবহার করতে চাই। ধরে নিই যে প্রোগ্রামাররা সবাই সর্বোপরি বুদ্ধিমান মানুষ, আমি বলব 10+ সবই অনেক বেশি।

বিটিডাব্লু, যদি প্যারামিটারগুলি কোনওভাবে একই হয় তবে আমি সেগুলি স্ট্রাক্ট বা শ্রেণীর পরিবর্তে ভেক্টর বা তালিকায় রাখতাম


1

ফাংশনটি কতবার ডাকা হয় তার উপরে আমি আমার উত্তরটি ভিত্তি করব।

যদি এটি কোনও ডিআইইন ফাংশন হয় যা কেবল একবারেই ডাকা হয় তবে এটি 10 ​​পারম বা তার বেশি কিছু নিতে দেয়, কে যত্ন করে।

যদি এটিকে ফ্রেম প্রতি বারের একগুচ্ছ বলা হয় তবে আমি একটি কাঠামো তৈরি করি এবং কেবলমাত্র এটিতে একটি পয়েন্টার দেই since যেহেতু এটি দ্রুততর হয় ass


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