কোনও ফাংশনে প্যারামিটারগুলি অর্ডার করার বিষয়ে সর্বোত্তম অনুশীলন কী?


52

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

এই কাজ করতে একটি ভাল উপায় আছে কি? প্যারামিটারগুলি অর্ডার করার কোনও "সেরা অনুশীলন" পদ্ধতি রয়েছে যা স্বচ্ছতা বাড়ায়?


5
নামযুক্ত প্যারামিটারগুলি এটিকে কোনও সমস্যার চেয়ে কম করে তোলে। পাইথন এটিকে চূড়ান্ত দিকে নিয়ে যায়, এটি দেখুন। একটি ভাল উদাহরণ সি # - কল করার বিভিন্ন উপায় MessageBox.Show। পাশাপাশি এটি দেখুন।
কাজ

8
হাস্কেলে, আংশিক ফাংশন অ্যাপ্লিকেশনটির সম্ভাব্য উপযোগিতা সাধারণত একটি প্রাকৃতিক যুক্তির ক্রম নির্দেশ করে।
tmadmers

আপনি কী পরিমাপ একটি শালীন পরিমাণ বিবেচনা করবে?
ক্রিস

আমি ভাবছিলাম> ২. যদিও আমি অনুমান করি ক্রমটি অর্ডার 2 প্যারামিটারের সাথে একই রকম প্রযোজ্য।
কেসি প্যাটন

3
@ স্ট্যামাররা এটি যে কোনও ভাষার ক্ষেত্রে সত্য যেখানে কারিকিংয়ের সরাসরি সমর্থন রয়েছে
জে.কে.

উত্তর:


55

সাধারণভাবে: এটি ব্যবহার করুন

আপনার ফাংশনের জন্য একটি পরীক্ষা লিখুন, একটি আসল ওয়ার্ল্ড টেস্ট।
কিছু আপনি আসলে এই ফাংশনটি করতে চান

এবং দেখুন যে আপনি সেটিকে কীভাবে অর্ডার করেছেন।

আপনি ইতিমধ্যে কিছু ফাংশন (বা জানেন না) যদি তেমন কিছু করে।
যে ক্ষেত্রে: সামঞ্জস্য কি ইতিমধ্যে তারা কি, অন্তত প্রথম আর্গুমেন্ট জন্য।

উদাহরণস্বরূপ, তারা সবাই কি প্রথম দলীল (গুলি) হিসাবে কোনও দস্তাবেজ / অবজেক্ট / ফাইল-পয়েন্টার / সিরিজ-অফ-ভ্যালু / কোঅর্ডিনেট গ্রহণ করে? 'S শ্বরের দোহাই দিয়ে argu যুক্তি অনুসারে

এড়িয়ে চলুন আপনার সহকর্মীদের বিভ্রান্তিকর এবং আপনার ভবিষ্যত স্ব


12
"বিভ্রান্তি এড়ান ... আপনার ভবিষ্যতের স্ব" সাধারণভাবে একটি ভাল দর্শন বলে মনে হয়।
জিনে পিন্ডার

28

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

নির্বাচন ফানেল

  1. শব্দার্থবিদ্যা
  2. গুরুত্ব / প্রাসঙ্গিকতা
  3. কম্পাঙ্ক ব্যবহার
  4. আই / ও কনসার্নস

1. শব্দার্থবিজ্ঞান প্রথম

বিশেষত ওওপি- তে , ক্রিয়া বা বার্তার জন্য তাদের শব্দার্থগত তাত্পর্যের ভিত্তিতে পরামিতিগুলি চয়ন করুন। একটি নামযুক্ত প্যারামিটার সহ একটি নামকরণ পদ্ধতির স্বাক্ষরটি হওয়া উচিত:

  • কল করতে স্বাভাবিক মনে হয়,
  • অভিপ্রায় এবং আচরণের দিক থেকে স্ব-বর্ণনামূলক হোন।

(এই কারণে, কখনও কখনও আদিমগুলির পরিবর্তে কাস্টম ধরণের বা উপকরণগুলি ব্যবহার করা আপনার স্বাক্ষরের প্রকাশকে বাড়িয়ে তুলতে পারে))

2. তারপর গুরুত্ব

সর্বাধিক "তাৎপর্যপূর্ণ" প্যারামিটারটি প্রথম (বা পরবর্তী ...) আসে

3. তারপরে ফ্রিকোয়েন্সি

ফ্রিকোয়েন্সিটি পাশাপাশি গুরুত্বপূর্ণ, বিশেষত এমন একটি ভাষায় যেখানে আপনি প্যারামিটারের নাম রাখেন নি তবে অবস্থানগত পরামিতিগুলিতে ডিফল্ট মান থাকতে পারে। এটি সূচিত করে যে প্যারামিটারগুলির ক্রম আলাদা হয় না এবং আপনি যদি Nth প্যারামিটারের ডিফল্ট মানটি চাপিয়ে দিতে চান তবে অবশ্যই আপনি N + 1 প্যারামিটার সেট করতে পারবেন না (যদি আপনার ভাষাতে স্থানধারক প্যারামিটারের ধারণা থাকে তবে) )।

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

4. আসুন I / O ভুলে যাবেন না

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

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

(লক্ষ্য করুন আমি বিশ্বব্যাপী ভেরিয়েবলগুলি উল্লেখ করি না, কারণ আপনি কেন একটিটি ব্যবহার করবেন, তাই না?)


কিছু বিষয় বিবেচনা করার

  • ব্যবহারযোগ্যতা

    উপরে অধিকাংশই স্বাভাবিকভাবেই দেখাবে যদি আপনি ZJR এর অনুসরণ পরামর্শ : এটি ব্যবহার করুন!

  • রিফ্যাক্টরিং বিবেচনা করুন

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

  • পারফরম্যান্স বিবেচনা করুন

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

  • বেভানের উত্তর এবং ক্লিন কোডের সুপারিশগুলির উল্লেখ অবশ্যই প্রাসঙ্গিক!


18

আমি শ্রদ্ধার সাথে জমা দিচ্ছি যে প্যারামিটার ক্রম সম্পর্কে চিন্তিত হওয়া ভুল জিনিস সম্পর্কে উদ্বিগ্ন।

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

তবে অসম্পূর্ণভাবে, আমি চাচা বব এর পরামর্শ অনুসরণ করার চেষ্টা করছি - এবং এটি আমার কোড উন্নত করে।

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


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

3
কাশি পিএইচপি কাশি । আমি দুঃখিত - আপনি পরামিতিগুলির ক্রম সম্পর্কে চিন্তা না করার বিষয়ে কিছু বলছিলেন?
ক্রেইজ

আপনি কি আপনার প্যারামিটার অবজেক্টের জন্য কেবল কোনও কনস্ট্রাক্টর পাবেন না যা ঠিক তত যুক্তি হিসাবে নেয়?
স্পষ্টভাবে

না - কারণ প্যারামিটার অবজেক্টটি বেশ কয়েকটি বিবৃতিতে আরও বেশি পঠনযোগ্য বলে "নির্মিত" হতে পারে।
বেভান

2
@ বেভান: এটি অত্যন্ত বিতর্কিত। এইভাবে অবজেক্টগুলি তৈরি করার অর্থ তারা আর অপরিবর্তনীয় হতে পারে না; যখনই সম্ভব আপনার অবজেক্টগুলিকে অপরিবর্তনীয় রাখা বজায় রাখা রক্ষণাবেক্ষণের আরেকটি দুর্দান্ত উপায়।
টিডামার্স

10

আমি প্রথমে IN পরামিতিগুলি রাখার চেষ্টা করব, আউট পরামিতিগুলি দ্বিতীয়। কিছু প্রাকৃতিক অর্ডারও রয়েছে, উদাহরণস্বরূপ createPoint(double x, double y)দৃ strongly়ভাবে পছন্দ করা createPoint(double y, double x)


5
কখনও কখনও বিপরীত যখন সবসময় শুধু একটা আউট যুক্তি এবং আর্গুমেন্ট এর একটি পরিবর্তনশীল নম্বর, মত ভাল, যেমন addAllTo(target, something1, something2)
মাআরটিইনস

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

7
@ ডকব্রাউন আপনার সত্যিই ভাল প্রোগ্রামারদের এড়ানোর চেষ্টা করা উচিত নয়, তারা আশেপাশে থাকা কার্যকর হতে পারে।
রায়ানফায়েস্কটল্যান্ড

@ রায়ানফায়েস্কটল্যান্ড: জঘন্য, আমার মন্তব্যগুলি পোস্ট করার আগে আমার দু'বার পড়তে হবে (বা এটি কমপক্ষে পাঁচ মিনিটের মধ্যে আমি সেগুলি পরিবর্তন করতে পারি) ;-)
ডক ব্রাউন

6

আমি এই বিশেষ বিষয় সম্পর্কিত কোনও নথিভুক্ত "সেরা অনুশীলন" কখনও দেখিনি, তবে আমার ব্যক্তিগত মানটি হল যে তারা যে পদ্ধতিতে ব্যবহৃত হচ্ছে তাতে যে পদ্ধতিতে প্রদর্শিত হবে বা পদ্ধতিটি যদি আরও বেশি হয় তবে সেগুলি তাদের তালিকাভুক্ত করা is ডেটা স্তরে পাস-থ্রো করে ডিবি স্কিমা বা ডেটা স্তর পদ্ধতিতে তারা প্রদর্শিত হবে সেই ক্রমে আমি তাদের তালিকা করব।

এছাড়াও, যখন কোনও পদ্ধতির একাধিক ওভারলোড থাকে, তখন আমি লক্ষ্য করেছি যে সাধারণ পদ্ধতিটি সমস্ত (বা বেশিরভাগ) পদ্ধতির সাথে সাধারণ যেগুলি প্রতিটি পদ্ধতির ওভারলোডের জন্য শেষের সাথে যুক্ত হয় সেগুলির সাথে সাধারণভাবে পরামিতিগুলি দিয়ে শুরু করে তাদের তালিকাভুক্ত করে notice :

void func1(string param) { }
void func2(string param, int param2) { }
void func3(string param, string param3) { }
void func3(string param, int param2, string param3) { }


3

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

http://msdn.microsoft.com/en-us/library/zthk2dkh%28v=vs.80%29.aspx

http://en.wikipedia.org/wiki/Calling_convention


আপনার আগ্রহী হতে পারে এমন অন্য লিঙ্কটি হ'ল এমএসডিএন.মাইক্রোসফট.ইন.ইউএস / লিবেরি / 84৪৮x0h58%28v=vs.71%29.aspx পুনরাবৃত্ত ফাংশনগুলির জন্য, নীচের লিঙ্কটি একবার দেখুন। পাবলিকেশনস. gbdirect.co.uk/c_book/chapter4/… যে আমি ভুলে গেছি তা নয় তবে, নতুন ব্যবহারকারী হয়ে আমি একটি মন্তব্য পোস্ট করতে পারছি না যার দুটির বেশি লিঙ্ক রয়েছে .... কী হতাশার!
বিল

1

আমি সাধারণত "কি কম সাইপ্রিটিক দেখায়" পরামিতি ক্রমের সাথে চলে যাই। আমাকে যত কমবার পদ্ধতি / ফাংশন সংজ্ঞা যেতে হবে তার চেয়ে ভাল। এবং প্যারামিটারগুলির নামকরণ করা ভাল they যা তাদের জন্য কী ব্যবহার করা হয় সেগুলি বর্ণনামূলক, যখন ছোট্ট টুলটিপটি পপ আপ হয় (ভিএস) তখন এটি আরও সহজ করে তোলে।

আপনার যদি প্যারামিটারগুলির লাইন এবং লাইন থাকে তবে আপনি অন্য ডিজাইনটি বিবেচনা করতে পারেন। পিছনে যান এবং দেখুন যে কীভাবে আপনি এটি আরও কার্য / পদ্ধতিতে ভাঙ্গতে পারেন। কেবল একটি ধারণা, তবে আমার ফাংশনে যখন আমার কাছে এক ডজন পরামিতি থাকে তখন এটি প্রায়শই প্যারামিটার সমস্যা নয়, তবে একটি ডিজাইনের সমস্যা।


2
"সাইপ্রিটিক": পয়েন্টটি তৈরি করার দুর্দান্ত উপায়।
বেভান

2
আপনার আগে কখনও টাইপা হয়নি, @ বেভান?

1
আমার সর্বদা টাইপস রয়েছে - সাইপ্রিক লেখা এত ভাল ছিল আমি ভেবেছিলাম এটি উদ্দেশ্য ছিল । দয়া করে এটিকে আবার পরিবর্তন করুন, এটি কোনও দুর্ঘটনা হলেও আপনার পয়েন্টটি তৈরি করতে সহায়তা করে।
বেভান

1
@ বেভান, হাহা ঠিক আছে আমি দেখছি আপনি কি বলছেন। ভাল যুক্তি! এটি ফিরে এসেছে =)

1

কখনও কখনও (খুব কমই) মনে হয় যে কোনও ফাংশন তৈরি করা যা শালীন পরিমাণের প্যারামিটার লাগে এটি সর্বোত্তম রুট।

বেশ কয়েকটি পরামিতি ব্যবহার করা প্রায়শই একটি পরিষ্কার সূচক, আপনি এই পদ্ধতিতে এসআরপি লঙ্ঘন করেন । একটি পদ্ধতি, যার অনেকগুলি পরামিতি প্রয়োজন কেবলমাত্র একটি কাজ করার সম্ভাবনা নেই । এক্সপিশন একটি গাণিতিক ফাংশন বা একটি কনফিগারেশন পদ্ধতি হতে পারে, যেখানে প্রকৃতপক্ষে বেশ কয়েকটি পরামিতি প্রয়োজন। আমি একাধিক পরামিতি এড়িয়ে যাব কারণ শয়তান পবিত্র জল এড়িয়ে চলে। আপনি কোনও পদ্ধতির মধ্যে যত বেশি প্যারামিটার ব্যবহার করেন, সম্ভাবনা তত বেশি, যে পদ্ধতিটি খুব জটিল complex আরও জটিলতার অর্থ: বজায় রাখা শক্ত এবং এটি কম পছন্দসই।

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

প্রিন্সিপালে আপনি এলোমেলোভাবে বেছে নিচ্ছেন । অবশ্যই আপনি ভাবতে পারেন প্যারামিটার পরামিতি বি এর চেয়ে বেশি প্রাসঙ্গিক ; তবে এটি আপনার এপিআই এর ব্যবহারকারীদের ক্ষেত্রে নাও হতে পারে, যারা বি সবচেয়ে প্রাসঙ্গিক প্যারামিটার বলে মনে করেন। এমনকি যদি আপনি অর্ডারটি বেছে নিতে মনোযোগী হন - অন্যের জন্য এটি এলোমেলো মনে হতে পারে ।

এই কাজ করতে একটি ভাল উপায় আছে কি? প্যারামিটারগুলি অর্ডার করার কোনও "সেরা অনুশীলন" পদ্ধতি রয়েছে যা স্বচ্ছতা বাড়ায়?

বেশ কয়েকটি উপায় রয়েছে:

ক) তুচ্ছ ঘটনা: একাধিক প্যারামিটার ব্যবহার করবেন না।

খ) আপনি নির্দিষ্ট না করে, কোন ভাষাটি আপনি বেছে নিয়েছেন, তার সম্ভাবনা রয়েছে, আপনি নামী পরামিতি সহ একটি ভাষা বেছে নিয়েছিলেন । এটি দুর্দান্ত সিনট্যাকটিক চিনি যা আপনাকে পরামিতিগুলির ক্রমটির তাত্পর্যটি আলগা করতে দেয়:fn(name:"John Doe", age:36)

প্রতিটি ভাষা এই জাতীয় চমত্কার অনুমতি দেয় না। তাহলে কি?

গ) আপনি অভিধান / হাশম্যাপ / সহযোগী অ্যারেটি প্যারামিটার হিসাবে ব্যবহার করতে পারেন : যেমন জাভাস্ক্রিপ্ট নিম্নলিখিতটির অনুমতি দেবে: fn({"name":"John Doe", age:36})যা (খ) থেকে খুব বেশি দূরে নয়।

d) অবশ্যই যদি আপনি জাভার মতো স্ট্যাটিকালি টাইপ করা ভাষা নিয়ে কাজ করেন । আপনি একটি হ্যাশম্যাপ ব্যবহার করতে পারেন , তবে HashMap<String, Object>পরামিতিগুলির বিভিন্ন ধরণের (এবং cast ালাই প্রয়োজন ) যখন আপনি টাইপ-ইনফরমেশন (যেমন কাজ করার সময় ) আলগা করে ফেলতেন ।

পরবর্তী যৌক্তিক পদক্ষেপটি হ'ল কোনও Object(যদি আপনি জাভা ব্যবহার করছেন) যথাযথ বৈশিষ্ট্য সহ স্ট্রাক্টের মতো আরও হালকা কিছু (আপনি যদি উদাহরণস্বরূপ সি # বা সি / সি ++ লিখেন ) দিয়ে পাস করুন ।

চলতি নিয়ম:

1) সেরা ক্ষেত্রে - আপনার পদ্ধতির কোনও প্যারামিটার দরকার নেই

2) ভাল কেস - আপনার পদ্ধতির জন্য একটি প্যারামিটার প্রয়োজন

3) সহনীয় ক্ষেত্রে - আপনার পদ্ধতির দুটি পরামিতি প্রয়োজন

4) অন্যান্য সমস্ত ক্ষেত্রে রিফ্যাক্টর করা উচিত


0

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

বেশিরভাগ জিনিসের উদাহরণের জন্য আপনার যা করা উচিত নয় আপনি পিএইচপি-র স্ট্যান্ডার্ড লাইব্রেরি ডকুমেন্টেশন পড়ার চেষ্টা করতে পারেন।


0

আমি সাধারণত তাদের প্রয়োজনীয়তার সাথে প্রথমে অর্ডার করি, কোনও "অনুভূতি" অনুসারে ব্যবহারের ফ্রিকোয়েন্সি এবং ব্যবহারের ফ্রিকোয়েন্সি ( ORDER BY required DESC, SOME_MAGIC_FEELING(importancy,frequency)কোনও হিসাবে দেখা যায় ) এবং কোনও নির্দিষ্ট অনুশীলন অনুসারে নয়।

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

আমি মনে করি যে আপনার যখন কেবল ১-২ টি যুক্তি রয়েছে তখন সঠিক ক্রমটি বেশ সুস্পষ্ট এবং আপনি ঠিক কী "অনুভব" করেন।


0

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

সুস্পষ্ট উদাহরণ:

public int add(int left, int right)
{
  return left + right;
}

যেহেতু এটি একটি সুস্পষ্টভাবে সংজ্ঞায়িত উদাহরণ এবং সংযোজন কমিটিকেটিভ (ক্রম কোনও বিষয় নয়) তবে এটির সাথেই যান।

তবে আপনি আরও জটিল কিছু যুক্ত করলে:

public SomeComplexReturnValue Calculate(int i, float f, string s, object o)
{
  // do work here
}

হবে:

public class SomeComplexInputForCalculation
{
  public int i; 
  public float f;
  public string s; 
  public object o;
}

public SomeComplexReturnValue Calculate(SomeComplexInputForCalculation input)
{
  // do work here
}

আশাকরি এটা সাহায্য করবে...


0

আপনি মনে করেন যে কারি কারি কারিংয়ের ফলে সম্ভবত লাভ হবে। উদাহরণস্বরূপ, প্রথমে ফাংশন পরামিতি।


0

"গুরুত্বপূর্ণ প্রথম" এর অর্থ পুরোটা বোঝায় না। কিছু সম্মেলন আছে।

যদি আপনি কলিং অবজেক্ট (প্রায়শই নাম প্রেরক) পাস করেন তবে সেটি আগে যায়।

তালিকার কিছুটা সাবলীলতা থাকা উচিত , এর অর্থ আপনি যখন এটি পড়বেন তখন আপনার পক্ষে জেনে রাখা উচিত is উদাহরণ:

কপিফোল্ডার (স্ট্রিং পাথ, বুল রিকার্সিভ);

আপনি যদি প্রথমে পুনরাবৃত্তি করতে চান তবে এটি বিভ্রান্তিকর হবে কারণ এখনও কোনও প্রসঙ্গ নেই। আপনি যদি ইতিমধ্যে এখন (1), একটি ফোল্ডার (2) অনুলিপি করার বিষয়ে থাকেন তবে আর্গুমেন্ট পুনরাবৃত্তিটি বোঝা শুরু করে।

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

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

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

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