বিবেচনা:
ভাষা,
ফ্রেমওয়ার্ক,
প্রসঙ্গ।
1. ভাষা
∞ ব্যবহার করা সর্বাধিক সমাধান হতে পারে।
উদাহরণস্বরূপ জাভাস্ক্রিপ্টের একটি অনন্তত্ব রয়েছে। সি # না ¹
উদাহরণস্বরূপ, অ্যাডারের ব্যাপ্তি রয়েছে। সি # করে না।
ইন সি #, আছে int.MaxValue
, কিন্তু আপনি আপনার ক্ষেত্রে এটি ব্যবহার করতে পারবেন না। int.MaxValue
সর্বোচ্চ পূর্ণসংখ্যা, 2,147,483,647। যদি আপনার কোডটিতে থাকে তবে আপনার কোনও কিছুর সর্বাধিক মূল্য রয়েছে যেমন কোনও কিছু বিস্ফোরিত হওয়ার আগে সর্বাধিক গৃহীত চাপের মতো, 2,147,483,647 ব্যবহার করার কোনও অর্থ নেই।
2. ফ্রেমওয়ার্ক
.NET ফ্রেমওয়ার্কটি এই মুহুর্তে বরং অসঙ্গতিপূর্ণ এবং এর যাদু মানগুলির ব্যবহারের সমালোচনা করা যেতে পারে।
উদাহরণস্বরূপ, "Hello".IndexOf("Z")
একটি যাদু মান প্রদান করে -1
। এটা তোলে হয়তো কাজটিকে আরো সহজ করে (এটা আছে?) ফলাফলের নিপূণভাবে করুন:
int position = "Hello".IndexOf("Z");
if (position > 0)
{
DoSomething(position);
}
কাস্টম কাঠামো ব্যবহার না করে:
SearchOccurrence occurrence = "Hello".IndexOf("Z");
if (occurrence.IsFound)
{
DoSomething(occurrence.StartOffset);
}
কিন্তু এটি মোটেই স্বজ্ঞাত নয়। কেন -1
এবং না -123
? একটি শিক্ষানবিস ভুলক্রমে ভুলরূপেও ভাবতে পারে যার 0
অর্থ খুব বেশি পাওয়া যায় না বা কেবল ভুল টাইপ করা (position >= 0)
।
৩. প্রসঙ্গ
যদি আপনার কোডটি নেটওয়ার্ক সকেটে টাইমআউটগুলির সাথে সম্পর্কিত হয়, এমন কিছু ব্যবহার করা যা প্রত্যেকে দশক ধরে ধারাবাহিকতার জন্য ব্যবহার করে যাচ্ছিল কোনও খারাপ ধারণা নয় । বিশেষত, 0
একটি সময়সীমা জন্য খুব পরিষ্কার: এটি একটি মান যা শূন্য হতে পারে না। এক্ষেত্রে একটি কাস্টম ক্লাস ব্যবহার করা জিনিসগুলি বোঝা আরও জটিল করে তুলতে পারে:
class Timeout
{
// A value indicating whether there is a timeout.
public bool IsTimeoutEnabled { get; set; }
// The duration of the timeout, in milliseconds.
public int Duration { get; set; }
}
- সত্য
Duration
হলে আমি 0 তে সেট করতে পারি IsTimeoutEnabled
?
- যদি
IsTimeoutEnabled
মিথ্যা হয়, আমি Duration
100 এ সেট করলে কী হবে ?
এটি একাধিক ভুল হতে পারে। নিম্নলিখিত কোডের টুকরোটি কল্পনা করুন:
this.currentOperation.Timeout = new Timeout
{
// Set the timeout to 200 ms.; we don't want this operation to be longer than that.
Duration = 200,
};
this.currentOperation.Run();
অপারেশনটি দশ সেকেন্ডের জন্য চলে। Timeout
ক্লাসের ডকুমেন্টেশন না পড়ে আপনি কি দেখতে পাচ্ছেন যে এই কোডটিতে সমস্যা আছে?
উপসংহার
null
মানটি এখানে নেই এমন ধারণাটি ভালভাবে প্রকাশ করে। এটি সরবরাহ করা হয়নি। পাওয়া যায় না. এটি কোনও সংখ্যা নয়, শূন্য / খালি স্ট্রিং বা যা কিছু নয়। এটি সর্বোচ্চ বা সর্বনিম্ন মানের জন্য ব্যবহার করবেন না।
int.MaxValue
ভাষার সাথেই দৃ strongly়ভাবে সম্পর্কিত। শ্রেণীর int.MaxValue
সর্বাধিক গতির সীমা Vehicle
বা বিমানের সর্বাধিক গ্রহণযোগ্য গতির জন্য ব্যবহার করবেন না etc.
-1
আপনার কোডের মতো যাদু মানগুলি এড়িয়ে চলুন । তারা বিভ্রান্তিমূলক এবং কোডগুলিতে ভুলের দিকে পরিচালিত করে।
আপনার নিজস্ব শ্রেণি তৈরি করুন যা ন্যূনতম / সর্বাধিক মান নির্দিষ্ট করে সর্বাধিক সোজা হবে। উদাহরণস্বরূপ VehicleSpeed
থাকতে পারে VehicleSpeed.MaxValue
।
পূর্ববর্তী কোনও গাইডলাইনটি অনুসরণ করবেন না এবং যাদুবিদ্যার মানগুলি ব্যবহার করুন যদি এটি একটি নির্দিষ্ট ক্ষেত্রের কয়েক দশক ধরে একটি সাধারণ সম্মেলন হয়, তবে বেশিরভাগ লোকেরা এই ক্ষেত্রে কোড লেখেন।
পদ্ধতির মিশ্রণ করতে ভুলবেন না। উদাহরণ স্বরূপ:
class DnsQuery
{
public const int NoTimeout = 0;
public int Timeout { get; set; }
}
this.query.Timeout = 0; // For people who are familiar with timeouts set to zero.
// or
this.query.Timeout = DnsQuery.NoTimeout; // For other people.
¹ আপনি নিজের ধরণের তৈরি করতে পারেন যার মধ্যে অনন্ততা রয়েছে। এখানে, আমি int
কেবল নেটিভ টাইপের কথা বলছি ।