ম্যাজিক নম্বর কী?
কেন এড়ানো উচিত?
এটি উপযুক্ত যেখানে ক্ষেত্রে আছে?
ম্যাজিক নম্বর কী?
কেন এড়ানো উচিত?
এটি উপযুক্ত যেখানে ক্ষেত্রে আছে?
উত্তর:
একটি ম্যাজিক নম্বর কোডের একটি সংখ্যার সরাসরি ব্যবহার।
উদাহরণস্বরূপ, যদি আপনার (জাভাতে) থাকে:
public class Foo {
public void setPassword(String password) {
// don't do this
if (password.length() > 7) {
throw new InvalidArgumentException("password");
}
}
}
এটিতে রিফ্যাক্টর করা উচিত:
public class Foo {
public static final int MAX_PASSWORD_SIZE = 7;
public void setPassword(String password) {
if (password.length() > MAX_PASSWORD_SIZE) {
throw new InvalidArgumentException("password");
}
}
}
এটি কোডের পঠনযোগ্যতা উন্নত করে এবং এটি বজায় রাখা আরও সহজ। আমি জিইআইতে পাসওয়ার্ডের ক্ষেত্রের আকারটি নির্ধারণ করেছি এমন ক্ষেত্রে কল্পনা করুন। আমি যদি কোনও ম্যাজিক নম্বর ব্যবহার করি, যখনই সর্বোচ্চ আকার পরিবর্তন হয়, আমাকে দুটি কোড লোকেশনে পরিবর্তন করতে হবে। আমি যদি একটিটি ভুলে যাই তবে এটি অসঙ্গতিগুলিতে নিয়ে যাবে।
JDK মত উদাহরণ পূর্ণ Integer
, Character
এবং Math
ক্লাস।
পিএস: ফাইন্ডব্যাগস এবং পিএমডি এর মতো স্থিতিশীল বিশ্লেষণ সরঞ্জামগুলি আপনার কোডে ম্যাজিক নম্বরগুলির ব্যবহার সনাক্ত করে এবং রিফ্যাক্টরিংয়ের পরামর্শ দেয়।
TRUE
/ FALSE
)
একটি ম্যাজিক নম্বর একটি হার্ড-কোডড মান যা পরবর্তী পর্যায়ে পরিবর্তিত হতে পারে, তবে এটি আপডেট করা শক্ত হতে পারে।
উদাহরণস্বরূপ, ধরা যাক আপনার একটি পৃষ্ঠা রয়েছে যা "আপনার আদেশগুলি" ওভারভিউ পৃষ্ঠাতে সর্বশেষ 50 অর্ডার প্রদর্শন করে। 50 এখানে ম্যাজিক নম্বর, কারণ এটি স্ট্যান্ডার্ড বা সম্মেলনের মাধ্যমে সেট করা হয়নি, এটি এমন একটি সংখ্যা যা আপনি বর্ণনায় বর্ণিত কারণগুলির জন্য তৈরি করেছিলেন।
এখন, আপনি যা করছেন তা হ'ল আপনার 50 টি বিভিন্ন জায়গায় রয়েছে - আপনার এসকিউএল স্ক্রিপ্ট ( SELECT TOP 50 * FROM orders
), আপনার ওয়েবসাইট (আপনার শেষ 50 টি আদেশ), আপনার অর্ডার লগইন ( for (i = 0; i < 50; i++)
) এবং সম্ভবত আরও অনেকগুলি স্থান।
এখন, কেউ যখন 50 থেকে 25 পরিবর্তন করার সিদ্ধান্ত নেয় তখন কী হবে? বা 75? বা 153? আপনাকে এখন সমস্ত জায়গায় 50 টি প্রতিস্থাপন করতে হবে এবং আপনি এটি মিস করার খুব সম্ভাবনা রয়েছে। সন্ধান / প্রতিস্থাপন কাজ করতে পারে না, কারণ 50 টি অন্যান্য জিনিসের জন্য ব্যবহার করা যেতে পারে, এবং 50 এর সাথে অন্ধভাবে প্রতিস্থাপন করা হলে 25 এর সাথে আরও কিছু খারাপ প্রতিক্রিয়া হতে পারে (যেমন আপনার Session.Timeout = 50
কলটিও 25 এ সেট করা হয়েছে এবং ব্যবহারকারীরা খুব ঘন ঘন সময়সীমা সম্পর্কে রিপোর্ট করতে শুরু করে)।
এছাড়াও, কোডটি বোঝা শক্ত হতে পারে, অর্থাত "" if a < 50 then bla
"- যদি আপনি কোনও জটিল ফাংশনের মাঝামাঝি মুখোমুখি হন তবে কোডটির সাথে পরিচিত নন এমন অন্যান্য বিকাশকারীরা নিজেকে জিজ্ঞাসা করতে পারেন" WTF is 50 ??? "
এই কারণেই ঠিক এই জায়গায় অস্পষ্ট এবং স্বেচ্ছাসেবী সংখ্যা থাকা ভাল - " const int NumOrdersToDisplay = 50
", কারণ এটি কোডটিকে আরও পঠনযোগ্য করে তোলে (" if a < NumOrdersToDisplay
", এর অর্থ এটিও আপনাকে কেবল 1 ভাল সংজ্ঞায়িত জায়গায় পরিবর্তন করা দরকার।
স্থান যেখানে জাদু নাম্বার উপযুক্ত সবকিছু যে একটি প্রমিত মাধ্যমে সংজ্ঞায়িত করা হয়, অর্থাত্ SmtpClient.DefaultPort = 25
বা TCPPacketSize = whatever
(নিশ্চিত যে মান নির্ধারিত হয়েছে নয়)। এছাড়াও, 1 ফাংশনের মধ্যে কেবল সংজ্ঞায়িত সমস্ত কিছুই গ্রহণযোগ্য হতে পারে তবে এটি প্রসঙ্গের উপর নির্ভর করে।
SmtpClient.DefaultPort = 25
সম্ভবত স্পষ্ট Er চেয়ে SmtpClient.DefaultPort = DEFAULT_SMTP_PORT
।
25
সমস্ত অ্যাপ্লিকেশনটি অনুসন্ধান করতে হবে এবং নিশ্চিত করতে হবে যে আপনি কেবলমাত্র 25
এসএমটিপি পোর্টের জন্য যে পরিবর্তনগুলি করেছেন , 25 টি নয় যেমন টেবিল কলামের প্রশস্ততা বা সংখ্যা একটি পৃষ্ঠায় প্রদর্শন রেকর্ড।
IANA
।
আপনি কি যাদু সংখ্যার জন্য উইকিপিডিয়া এন্ট্রিটি একবার দেখেছেন?
এটি ম্যাজিক নম্বর রেফারেন্সটি তৈরি করার সমস্ত উপায় সম্পর্কে কিছুটা বিশদে যায়। একটি খারাপ প্রোগ্রামিং অনুশীলন হিসাবে যাদু নম্বর সম্পর্কে একটি উদ্ধৃতি এখানে
শব্দ যাদু সংখ্যাটিও ব্যাখ্যা ছাড়াই সোর্স কোডে নম্বর ব্যবহারের খারাপ প্রোগ্রামিং অনুশীলনকে বোঝায়। বেশিরভাগ ক্ষেত্রে এটি প্রোগ্রামগুলি পড়া, বুঝতে এবং বজায় রাখা আরও শক্ত করে তোলে। যদিও বেশিরভাগ গাইড শূন্য এবং এক সংখ্যার জন্য ব্যতিক্রম করে, অন্য সব সংখ্যাকে নামযুক্ত স্থির হিসাবে সংজ্ঞায়িত করা ভাল ধারণা।
যাদু: অজানা শব্দার্থক
সিম্বলিক কনস্ট্যান্ট -> ব্যবহারের জন্য সঠিক শব্দার্থক এবং সঠিক উভয় প্রসঙ্গ সরবরাহ করে
শব্দার্থক: কোনও কিছুর অর্থ বা উদ্দেশ্য।
"একটি ধ্রুবক তৈরি করুন, অর্থের পরে নাম দিন এবং এটির সাথে নম্বরটি প্রতিস্থাপন করুন।" - মার্টিন ফওলার
প্রথমত, ম্যাজিক সংখ্যাগুলি কেবল সংখ্যা নয়। যে কোনও মৌলিক মান "যাদু" হতে পারে। বুনিয়াদি মানগুলি হ'ল ম্যানিফেস্ট সত্তা যেমন পূর্ণসংখ্যা, রিয়েলস, ডাবলস, ফ্লোটস, তারিখ, স্ট্রিংস, বুলিয়ানস, অক্ষর ইত্যাদি। ইস্যুটি ডেটা টাইপ নয়, তবে মান কোডটির "ম্যাজিক" দিকটি যেমন এটি আমাদের কোড পাঠ্যে প্রদর্শিত হয়।
"যাদু" বলতে আমরা কী বুঝি? সুনির্দিষ্টভাবে বলতে গেলে: "যাদু" দ্বারা, আমরা আমাদের কোডের প্রসঙ্গে মানটির শব্দার্থবিজ্ঞানের (অর্থ বা উদ্দেশ্য) নির্দেশ করতে চাই; এটি অজানা, অজান্তে, অস্পষ্ট বা বিভ্রান্তিকর। এটি "যাদু" ধারণা। একটি প্রাথমিক মান যাদু নয় যখন এর অর্থগত অর্থ বা উদ্দেশ্য-এর-উপস্থিত রয়েছে যখন বিশেষ সহায়ক সহায়ক শব্দ (উদাহরণস্বরূপ প্রতীকী ধ্রুবক) ছাড়াই পার্শ্ববর্তী প্রেক্ষাপট থেকে দ্রুত এবং সহজেই পরিচিত, স্পষ্ট, এবং বোঝা (বিভ্রান্তিকর নয়) হয় is
অতএব, আমরা একটি কোড রিডার এর পার্শ্ববর্তী প্রেক্ষাপট থেকে একটি মৌলিক মান জানতে, স্পষ্ট হতে, এবং বুঝতে এবং তার ক্ষমতা বোঝার ক্ষমতা পরিমাপ করে যাদু সংখ্যাগুলি চিহ্নিত করি। পাঠক যত কম পরিচিত, তত কম স্পষ্ট এবং বিভ্রান্ত হবেন তত বেশি মূল বিষয় হ'ল "যাদু"।
আমাদের যাদুর প্রাথমিক মানগুলির জন্য দুটি দৃশ্য রয়েছে have প্রোগ্রামার এবং কোডের জন্য কেবল দ্বিতীয়টি প্রাথমিক গুরুত্ব দেয়:
"ম্যাজিক" এর একটি অতি নির্ভরশীল নির্ভরতা হ'ল কীভাবে একাকী মৌলিক মান (যেমন সংখ্যা) কোনও সাধারণ জ্ঞাতার্থক (পাই এর মতো) না থাকে তবে এর স্থানীয়ভাবে পরিচিত অর্থ (যেমন আপনার প্রোগ্রাম) থাকে, যা প্রসঙ্গ থেকে সম্পূর্ণ পরিষ্কার নয় বা আপত্তিজনক ব্যবহার করা যেতে পারে ভাল বা খারাপ প্রসঙ্গে (গুলি)।
বেশিরভাগ প্রোগ্রামিং ভাষার শব্দার্থবিজ্ঞান আমাদের একাকী মৌলিক মান ব্যবহারের অনুমতি দেয় না, (সম্ভবত) ডেটা হিসাবে (যেমন ডেটার টেবিল)। যখন আমরা "ম্যাজিক নম্বর" এর মুখোমুখি হই, আমরা সাধারণত একটি প্রসঙ্গে এটি করি। সুতরাং, উত্তর
"আমি কি এই যাদু নম্বরটি প্রতীকী ধ্রুবক দিয়ে প্রতিস্থাপন করব?"
হল:
"সংখ্যার অর্থার্থক অর্থ (তার উপস্থিতির উদ্দেশ্য) এর প্রসঙ্গে আপনি কত দ্রুত মূল্যায়ন ও বুঝতে পারবেন?"
এই চিন্তাকে মাথায় রেখে আমরা দ্রুত দেখতে পাচ্ছি যে যথাযথ প্রসঙ্গে (যেমন 2 x 3.14159 এক্স ব্যাসার্ধ বা 2 * পাই * আর) রাখার সময় পাই (৩.১৪১৫৯) কীভাবে কোনও "যাদু নম্বর" নয়। এখানে, 3.14159 নম্বরটি প্রতীকী ধ্রুবক সনাক্তকারী ছাড়াই মানসিকভাবে স্বীকৃত পাই Pi
তবুও, আমরা সংখ্যার দৈর্ঘ্য এবং জটিলতার কারণে পাই হিসাবে প্রতীকী ধ্রুবক সনাক্তকারী সহ সাধারণত আমরা 3.14159 প্রতিস্থাপন করি। পাই এর দৈর্ঘ্য এবং জটিলতার দিকগুলি (যথার্থতার প্রয়োজনে মিলিত) এর অর্থ সাধারণত প্রতীকী শনাক্তকারী বা ধ্রুবক ত্রুটির প্রবণতা কম থাকে। "পাই" নাম হিসাবে স্বীকৃতি হ'ল একটি সহজ সুবিধাজনক বোনাস, তবে ধ্রুবক থাকার প্রাথমিক কারণ নয়।
পাই এর মতো সাধারণ ধ্রুবককে আলাদা করে রাখুন, আসুন বিশেষত বিশেষ অর্থগুলির সাথে সংখ্যাগুলিতে ফোকাস করা যাক তবে এর অর্থগুলি আমাদের সফ্টওয়্যার সিস্টেমের মহাবিশ্বে সীমাবদ্ধ। এই জাতীয় সংখ্যা "2" হতে পারে (মৌলিক পূর্ণসংখ্যার মান হিসাবে)।
যদি আমি নিজে থেকে 2 নম্বরটি ব্যবহার করি তবে আমার প্রথম প্রশ্ন হতে পারে: "2" এর অর্থ কী? "2" এর অর্থ নিজেই অজানা এবং প্রসঙ্গ ছাড়াই অজানা, এর ব্যবহারটি অস্পষ্ট এবং বিভ্রান্তিকর রেখে দেয় leaving যদিও ভাষায় শব্দার্থবিদ্যার কারণে আমাদের সফ্টওয়্যারটিতে কেবল "2" থাকছে না, তবুও আমরা দেখতে চাই যে "2" নিজেই কোনও বিশেষ শব্দার্থবিজ্ঞান বা স্পষ্ট উদ্দেশ্য একা রাখে না।
আসুন আমাদের একাকী "2" এর প্রসঙ্গে: padding := 2
যেখানে প্রসঙ্গটি "জিইউআই কনটেইনার" থাকে। এই প্রসঙ্গে 2 এর অর্থ (পিক্সেল বা অন্যান্য গ্রাফিকাল ইউনিট হিসাবে) আমাদের এর শব্দার্থবিজ্ঞানের (অর্থ এবং উদ্দেশ্য) সম্পর্কে দ্রুত অনুমান করে। আমরা এখানে থামতে পারি এবং বলতে পারি যে 2 এই প্রসঙ্গে ঠিক আছে এবং আমাদের জানার মতো আর কিছুই নেই। তবে, সম্ভবত আমাদের সফ্টওয়্যার মহাবিশ্বে এটি পুরো গল্প নয় is এটি আরও রয়েছে, তবে প্রসঙ্গ হিসাবে "প্যাডিং = 2" এটি প্রকাশ করতে পারে না।
এর আরও ভান করা যাক যে আমাদের প্রোগ্রামে 2 পিক্সেল প্যাডিং হ'ল আমাদের সিস্টেম জুড়ে "ডিফল্ট_প্যাডিং" বিভিন্ন। সুতরাং, নির্দেশিকা লেখার পক্ষে padding = 2
যথেষ্ট ভাল নয় is "ডিফল্ট" ধারণাটি প্রকাশিত হয় না। কেবলমাত্র যখন আমি লিখি: padding = default_padding
প্রসঙ্গ হিসাবে এবং অন্য কোথাও: default_padding = 2
আমি কি পুরোপুরি আমাদের সিস্টেমে 2 এর একটি আরও ভাল এবং পূর্ণাঙ্গ অর্থ (শব্দার্থ ও উদ্দেশ্য) উপলব্ধি করতে পারি?
উপরের উদাহরণটি বেশ ভাল কারণ "2" নিজেই কিছু হতে পারে। কেবলমাত্র যখন আমরা "আমার প্রোগ্রাম" default_padding
-এর জিইউআই ইউএক্স অংশের 2 যেখানে "আমার প্রোগ্রাম" এর মধ্যে বোঝার পরিধি এবং ডোমেন সীমাবদ্ধ করি, আমরা কি শেষ পর্যন্ত তার যথাযথ প্রসঙ্গে "2" এর বোধ করি? এখানে "2" হ'ল একটি "যাদু" নম্বর, যা ঘেরানো কোডটির বৃহত্তর প্রসঙ্গে default_padding
এটি যত default_padding
দ্রুত বোঝা যায় তা ব্যবহার করার জন্য "আমার প্রোগ্রাম" এর জিইউআই ইউএক্সের প্রসঙ্গে প্রতীকী ধ্রুবক হিসাবে চিহ্নিত হয়েছে ।
সুতরাং, কোনও মৌলিক মান, যার অর্থ (শব্দার্থক এবং উদ্দেশ্য) পর্যাপ্ত এবং দ্রুত বোঝা যায় না, এটি মূল মানের (যেমন ম্যাজিক সংখ্যা) এর স্থানে প্রতীকী ধ্রুবকের পক্ষে ভাল প্রার্থী।
একটি স্কেল নম্বর এছাড়াও শব্দার্থবিজ্ঞান থাকতে পারে। উদাহরণস্বরূপ, ভান করুন আমরা একটি ডি অ্যান্ড ডি গেম করছি, যেখানে আমাদের একটি দানব ধারণা আছে। আমাদের দানব বস্তুর একটি বৈশিষ্ট্য রয়েছে life_force
যা একটি পূর্ণসংখ্যা। সংখ্যার অর্থ রয়েছে যা অর্থ সরবরাহের জন্য শব্দ ছাড়া জ্ঞাত বা স্পষ্ট নয়। সুতরাং, আমরা নির্বিচারে বলে শুরু করে:
উপরের প্রতীকী ধ্রুবক থেকে আমরা আমাদের ডি অ্যান্ড ডি গেমটিতে আমাদের দানবদের জন্য বেঁচে থাকা, মৃতত্ব এবং "Undeadness" (এবং সম্ভাব্য অবসন্নতা বা পরিণতি) এর মানসিক চিত্র পেতে শুরু করি। এই শব্দগুলি (প্রতীকী ধ্রুবক) ব্যতীত, আমরা কেবলমাত্র সংখ্যাগুলি রেখেছি -10 .. 10
। শুধু সম্ভবত ভীষণ বিশৃঙ্খলার একটি জায়গা শব্দের পাতার আমাদের ছাড়া এবং সম্ভাব্য আমাদের গেমে ত্রুটিযুক্ত যদি খেলার বিভিন্ন অংশের উপর নির্ভরতা কি ভালো নম্বর উপায়ে যে পরিসীমা বিভিন্ন অপারেশন সীমার attack_elves
বা seek_magic_healing_potion
।
সুতরাং, "যাদু সংখ্যার" সন্ধান এবং প্রতিস্থাপনের বিষয়টি বিবেচনা করার সময় আমরা আমাদের সফ্টওয়্যারটির প্রসঙ্গে এবং সংখ্যাগুলি একে অপরের সাথে শব্দার্থভাবে কীভাবে যোগাযোগ করে তা সম্পর্কে খুব উদ্দেশ্যমূলক-প্রশ্নগুলি জিজ্ঞাসা করতে চাই।
আমাদের কোন প্রশ্ন জিজ্ঞাসা করা উচিত তা পর্যালোচনা করুন:
আপনার একটি ম্যাজিক নম্বর থাকতে পারে যদি ...
আপনার কোড পাঠ্যের একা থাকা ম্যানিফেস্ট ধ্রুবক মৌলিক মানগুলি পরীক্ষা করুন। এই জাতীয় মানের প্রতিটি উদাহরণ সম্পর্কে ধীরে ধীরে এবং বিবেচনা করে প্রতিটি প্রশ্ন জিজ্ঞাসা করুন। আপনার উত্তরের শক্তি বিবেচনা করুন। অনেক সময়, উত্তরটি কালো এবং সাদা নয়, তবে ভুল বোঝাবুঝির ছায়াছবি রয়েছে যার অর্থ এবং উদ্দেশ্য, শেখার গতি এবং বোঝার গতি রয়েছে। এটি চারপাশে থাকা সফ্টওয়্যার মেশিনের সাথে কীভাবে সংযুক্ত হয় তাও দেখার প্রয়োজন রয়েছে।
শেষ পর্যন্ত, প্রতিস্থাপনের উত্তরটি সংযোগটি করার জন্য পাঠকের শক্তি বা দুর্বলতার পরিমাপের (আপনার মনে) উত্তর দিন (যেমন "এটি পান")। তারা যত তাড়াতাড়ি অর্থ এবং উদ্দেশ্য বুঝতে পারে, আপনার কাছে "যাদু" তত কম।
উপসংহার: বিভ্রান্তি থেকে উদ্ভূত বাগগুলি সনাক্ত করতে অসুবিধায় জাদু যথেষ্ট পরিমাণে হলেই প্রতীকী ধ্রুবকগুলির সাথে মৌলিক মানগুলি প্রতিস্থাপন করুন।
একটি ম্যাজিক নম্বর হ'ল ফাইল ফর্ম্যাট বা প্রোটোকল এক্সচেঞ্জের শুরুতে অক্ষরগুলির ক্রম। এই নম্বরটি স্যানিটি চেক হিসাবে কাজ করে।
উদাহরণ: যে কোনও জিআইএফ ফাইল খুলুন, আপনি একেবারে শুরুতেই দেখতে পাবেন: GIF89। "GIF89" ম্যাজিক নম্বর number
অন্যান্য প্রোগ্রামগুলি কোনও ফাইলের প্রথম কয়েকটি অক্ষর পড়তে পারে এবং সঠিকভাবে জিআইএফ সনাক্ত করতে পারে।
বিপদটি হ'ল এলোমেলো বাইনারি ডেটাতে এই একই অক্ষর থাকতে পারে। তবে এটি খুব সম্ভব না।
প্রোটোকল এক্সচেঞ্জের জন্য, আপনি এটি দ্রুত সনাক্ত করতে ব্যবহার করতে পারেন যে আপনার কাছে দেওয়া বর্তমান 'বার্তা' দূষিত বা বৈধ নয়।
যাদু সংখ্যা এখনও দরকারী।
প্রোগ্রামিংয়ে, একটি "ম্যাজিক নম্বর" এমন একটি মান যা প্রতীকী নাম দেওয়া উচিত, তবে পরিবর্তে কোডটি আক্ষরিক হিসাবে পিছলে যায়, সাধারণত একাধিক জায়গায়।
এটি একই কারণে খারাপ OT এটি খুব খারাপ কারণ এটি অন্যান্য প্রোগ্রামারদের কাছে এই সংখ্যাটি কী বোঝায় তা স্পষ্ট নাও হতে পারে, তাই "যাদু"।
কনফিগারেশন হিসাবে কাজ করতে লোকেরা কখনও কখনও এই ধ্রুবকগুলিকে পৃথক ফাইলে স্থানান্তরিত করে যাদুর সংখ্যা নির্মূল করে further এটি কখনও কখনও সহায়ক, তবে এটি তার মূল্য থেকে জটিলতা তৈরি করতে পারে।
(foo[i]+foo[i+1]+foo[i+2]+1)/3
লুপের চেয়ে অনেক দ্রুত মূল্যায়ন করা যেতে পারে। যদি কেউ 3
লুপ হিসাবে কোডটি পুনরায় না লিখে কোডটি প্রতিস্থাপন করেন তবে যে কেউ ITEMS_TO_AVERAGE
সংজ্ঞায়িত দেখেছেন 3
তারা এটিকে পরিবর্তন করতে পারেন 5
এবং কোড গড় আরও আইটেম থাকতে পারে। বিপরীতে, যে কেউ আক্ষরিকের সাথে অভিব্যক্তিটি দেখেন 3
সে বুঝতে পারে যে 3
উপস্থাপিত সংখ্যার সাথে মিলিতভাবে সংখ্যার প্রতিনিধিত্ব করে।
একটি যাদু নম্বর বিশেষ, হার্ডকোডযুক্ত শব্দার্থবিজ্ঞান সহ একটি নম্বরও হতে পারে। উদাহরণস্বরূপ, আমি একবারে এমন একটি সিস্টেম দেখেছি যেখানে রেকর্ড আইডি> 0 টি সাধারণত চিকিত্সা করা হয়, 0 নিজেই "নতুন রেকর্ড", -1 ছিল "এটিই মূল" এবং -৯৯ "এটি মূলটিতে তৈরি হয়েছিল"। 0 এবং -99 এর ফলে ওয়েব সার্ভিস নতুন আইডি সরবরাহ করতে পারে।
এর মধ্যে খারাপটি হ'ল আপনি বিশেষ ক্ষমতার জন্য একটি স্থান (রেকর্ড আইডির জন্য স্বাক্ষরিত পূর্ণসংখ্যার) পুনরায় ব্যবহার করছেন। হতে পারে আপনি কখনও আইডি 0 বা কোনও নেতিবাচক আইডি দিয়ে কোনও রেকর্ড তৈরি করতে চাইবেন না, তবে তা না হলেও কোড বা ডাটাবেসে দেখানো প্রতিটি ব্যক্তি এটিকে হোঁচট খেতে পারে এবং প্রথমে বিভ্রান্ত হতে পারে। এই বিশেষ মানগুলি ভাল-ডকুমেন্টেড ছিল না বলেই যায়।
তর্কসাপেক্ষভাবে, 22, 7, -12 এবং 620 টি ম্যাজিক সংখ্যা হিসাবেও গণনা করুন। ;-)
ম্যাজিক নম্বর ব্যবহার করে উল্লেখ করা হয়নি এমন একটি সমস্যা ...
আপনার যদি তাদের মধ্যে অনেকগুলি থাকে তবে প্রতিক্রিয়াগুলি যুক্তিসঙ্গতভাবে ভাল যে আপনার দুটি ভিন্ন উদ্দেশ্য রয়েছে যার জন্য আপনি যাদু সংখ্যা ব্যবহার করছেন, যেখানে মানগুলি একই হয়।
এবং তারপরে, নিশ্চিতভাবেই, আপনাকে কেবলমাত্র এক উদ্দেশ্যেই মানটি পরিবর্তন করতে হবে।
আমি ধরে নিলাম এটি আপনার আগের প্রশ্নের আমার জবাবের প্রতিক্রিয়া । প্রোগ্রামিংয়ে, একটি ম্যাজিক নম্বর হ'ল একটি এম্বেড করা সংখ্যাসূচক ধ্রুবক যা কোনও ব্যাখ্যা ছাড়াই উপস্থিত হয়। যদি এটি দুটি স্বতন্ত্র স্থানে উপস্থিত হয় তবে এটি এমন পরিস্থিতিতে ডেকে আনতে পারে যেখানে একটি উদাহরণ পরিবর্তিত হয় এবং অন্যটি নয়। এই উভয় কারণে, সংখ্যার ধ্রুবকগুলি যেখানে ব্যবহৃত হচ্ছে সেগুলির বাইরে আলাদা করা এবং সংজ্ঞা দেওয়া গুরুত্বপূর্ণ to
আমি "ম্যাজিক নম্বর" শব্দটি সর্বদা আলাদাভাবে ব্যবহার করেছি, একটি ডেটা স্ট্রাকচারের মধ্যে থাকা একটি অস্পষ্ট মান হিসাবে যা দ্রুত বৈধতার চেক হিসাবে যাচাই করা যেতে পারে। উদাহরণস্বরূপ gzip ফাইলগুলিতে 0x1f8b08 তাদের প্রথম তিনটি বাইট হিসাবে থাকে, জাভা ক্লাসের ফাইলগুলি 0xcafebabe ইত্যাদি দিয়ে শুরু হয় etc.
আপনি প্রায়শই ফাইল ফর্ম্যাটগুলিতে এম্বেড করা যাদু নম্বর দেখতে পান, কারণ ফাইলগুলি আশ্বাসের পরিবর্তে প্রায়শই প্রেরণ করা যেতে পারে এবং সেগুলি কীভাবে তৈরি হয়েছিল সে সম্পর্কে কোনও মেটাডেটা হারাতে পারে। তবে ম্যাজিক নম্বরগুলি কখনও কখনও ইন-মেমরি ডেটা স্ট্রাকচারের জন্যও ব্যবহৃত হয়, যেমন আইওসিটিএল () কল।
ফাইল বা ডেটা স্ট্রাকচার প্রক্রিয়া করার আগে ম্যাজিক সংখ্যার একটি দ্রুত চেক করলে সম্ভাব্য দৈর্ঘ্য প্রসেসিংয়ের মাধ্যমে পুরো পথটি বাদ দেওয়ার পরিবর্তে একজন প্রাথমিক পর্যায়ে ত্রুটিগুলি চিহ্নিত করতে দেয় যাতে ইনপুটটি সম্পূর্ণ বাল্ডারড্যাশ ছিল তা ঘোষণা করতে পারে।
এটি লক্ষণীয় যে কখনও কখনও আপনি আপনার কোডটিতে কনফিগারযোগ্য "হার্ড-কোডড" নম্বর চান want এর একটি নম্বর আছে বিখ্যাত বেশী যা অপ্টিমাইজ বিপরীত বর্গমূল অ্যালগরিদম ব্যবহার করা হয় 0x5F3759DF সহ।
বিরল ক্ষেত্রে যেখানে আমি এই জাতীয় ম্যাজিক নম্বরগুলি ব্যবহার করার প্রয়োজনীয়তা পাই, আমি তাদের আমার কোডে একটি কনস্ট হিসাবে সেট করে রেখেছি এবং কেন তারা কীভাবে ব্যবহৃত হয়, কীভাবে তারা কাজ করে এবং কোথা থেকে এসেছে তা নথিভুক্ত করে।
ডিফল্ট মান সহ শ্রেণীর শীর্ষে একটি পরিবর্তনশীল সূচনা করার বিষয়ে কী? উদাহরণ স্বরূপ:
public class SomeClass {
private int maxRows = 15000;
...
// Inside another method
for (int i = 0; i < maxRows; i++) {
// Do something
}
public void setMaxRows(int maxRows) {
this.maxRows = maxRows;
}
public int getMaxRows() {
return this.maxRows;
}
এই ক্ষেত্রে, 15000 হ'ল একটি ম্যাজিক নম্বর (চেকস্টাইল অনুসারে)। আমার কাছে, একটি ডিফল্ট মান সেট করা ঠিক আছে। আমি করতে চাই না:
private static final int DEFAULT_MAX_ROWS = 15000;
private int maxRows = DEFAULT_MAX_ROWS;
এটি কি আরও পড়া কঠিন করে তোলে? আমি চেকস্টাইল ইনস্টল না করা পর্যন্ত আমি কখনই এটিকে বিবেচনা করি না।
static final
ধ্রুবকগুলি যখন আপনি একটি পদ্ধতিতে ব্যবহার করেন তখন তারা ওভারকিল করে। final
পদ্ধতির শীর্ষে ঘোষিত একটি পরিবর্তনশীল আইএমএইচও বেশি পঠনযোগ্য।
@ eed3si9n: আমি এমনকি পরামর্শ দিয়েছি যে '1' একটি যাদু নম্বর is :-)
ম্যাজিক সংখ্যার সাথে সম্পর্কিত এমন একটি নীতিটি হ'ল আপনার কোডটি যে সত্যিকারের সাথে ডিল হয় তা হ'ল একবার ঘোষণা করা উচিত। আপনি যদি নিজের কোডটিতে ম্যাজিক নম্বর ব্যবহার করেন (যেমন @ মার্কসিও দিয়েছেন পাসওয়ার্ডের দৈর্ঘ্যের উদাহরণ, আপনি সহজেই সেই সত্যটির সদৃশ হয়ে যেতে পারেন, এবং যখন এই সত্যটি বোঝা যায় আপনি কোনও রক্ষণাবেক্ষণের সমস্যা পেয়েছেন।
factorial n = if n == BASE_CASE then BASE_VALUE else n * factorial (n - RECURSION_INPUT_CHANGE); RECURSION_INPUT_CHANGE = 1; BASE_CASE = 0; BASE_VALUE = 1
রিটার্ন ভেরিয়েবলের কী হবে?
সঞ্চিত পদ্ধতি বাস্তবায়নের সময় আমি বিশেষত এটি চ্যালেঞ্জিং মনে করি ।
পরবর্তী সঞ্চিত পদ্ধতিটি কল্পনা করুন (ভুল বাক্য গঠন, আমি জানি, কেবল উদাহরণ দেখানোর জন্য):
int procGetIdCompanyByName(string companyName);
এটি কোনও নির্দিষ্ট সারণীতে উপস্থিত থাকলে কোম্পানির আইডি ফিরিয়ে দেয়। অন্যথায়, এটি ফেরত -1। একরকম এটি একটি যাদু নম্বর। আমি এখনও অবধি পড়ে থাকা কয়েকটি সুপারিশ বলছে যে আমাকে সত্যই ডিজাইনের মতো কিছু করতে হবে:
int procGetIdCompanyByName(string companyName, bool existsCompany);
যাইহোক, সংস্থার অস্তিত্ব না থাকলে কী ফিরিয়ে আনতে হবে? ঠিক আছে: এটি অস্তিত্বযুক্ত কম্পিউটারকে মিথ্যা হিসাবে সেট করবে , তবে -1 এ ফিরে আসবে।
এন্টোর বিকল্পটি দুটি পৃথক ফাংশন করা:
bool procCompanyExists(string companyName);
int procGetIdCompanyByName(string companyName);
সুতরাং দ্বিতীয় সঞ্চিত পদ্ধতির জন্য একটি পূর্ব শর্ত হ'ল সেই সংস্থাটি বিদ্যমান।
তবে আমি সম্মতিতে ভয় পাচ্ছি, কারণ এই সিস্টেমে অন্য কোনও ব্যবহারকারী একটি সংস্থা তৈরি করতে পারেন।
উপায়টির নীচের অংশটি হ'ল: এমন কিছু "ম্যাজিক নম্বর" ব্যবহার করার বিষয়ে আপনি কী ভাবেন যা তুলনামূলকভাবে পরিচিত এবং নিরাপদ যে এটি জানাতে যে কোনও কিছু ব্যর্থ হয়েছে বা কিছু বিদ্যমান নেই?
ধ্রুবক হিসাবে একটি যাদু নম্বর বের করার আরেকটি সুবিধা ব্যবসায়ের তথ্যকে স্পষ্টভাবে নথিভুক্ত করার সম্ভাবনা দেয়।
public class Foo {
/**
* Max age in year to get child rate for airline tickets
*
* The value of the constant is {@value}
*/
public static final int MAX_AGE_FOR_CHILD_RATE = 2;
public void computeRate() {
if (person.getAge() < MAX_AGE_FOR_CHILD_RATE) {
applyChildRate();
}
}
}
const myNum = 22; const number = myNum / 11;
এখন আমার 11 জন ব্যক্তি বা বিয়ারের বোতল বা কিছু হতে পারে তার পরিবর্তে আমি 11 টি স্থির করে তুলব যেমন বাসিন্দারা।