ম্যাজিক নম্বর কী এবং এটি খারাপ কেন? [বন্ধ]


514

ম্যাজিক নম্বর কী?

কেন এড়ানো উচিত?

এটি উপযুক্ত যেখানে ক্ষেত্রে আছে?


2
আপনি যাদুসংখ্যার এড়াতে পারবেন কারণ আপনার কোডটি দেখছেন অন্য লোকেরা বুঝতে পারে না আপনি কেন করছেন যা করছেন ... উদাহরণস্বরূপ const myNum = 22; const number = myNum / 11;এখন আমার 11 জন ব্যক্তি বা বিয়ারের বোতল বা কিছু হতে পারে তার পরিবর্তে আমি 11 টি স্থির করে তুলব যেমন বাসিন্দারা।
JuicY_Burrito

অ্যাট্রিবিউটগুলিতে ম্যাজিক নম্বর ব্যবহার করা অপরিহার্য, সুতরাং আমি অনুমান করি যে এটি উপযুক্ত।
donatasj87

উত্তর:


574

একটি ম্যাজিক নম্বর কোডের একটি সংখ্যার সরাসরি ব্যবহার।

উদাহরণস্বরূপ, যদি আপনার (জাভাতে) থাকে:

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ক্লাস।

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


174
0 এবং 1 এই নিয়মের ব্যতিক্রম।
জোনাথন পার্কার

24
@ কিরিল: আপনি যদি "হান্ড্রেড পারসেন্টস" এর সংজ্ঞা পরিবর্তন করতে চান তবে হ্যাঁ। এটির প্রতিনিধিত্ব করে তার থেকে পরিবর্তকটি কী হতে পারে তার চেয়ে আরও ভাল পদ্ধতির অর্থ হ'ল অর্থাত্ সর্বজনীন স্থিতিশীল চূড়ান্ত MAX_DOWNLOAD_PERCENTAGE = 100. যদিও এটি বোধগম্য হবে না, কারণ "100 শতাংশ" খুব ভালভাবে সংজ্ঞায়িত হয়েছে। অন্যদিকে, পাসওয়ার্ড সর্বাধিক characters অক্ষরের দীর্ঘ হতে পারে এই বিষয়টি বিশ্বব্যাপী সংজ্ঞায়িত হয় না এবং প্রকৃতপক্ষে পৃথক হয় না, সুতরাং এটি ভেরিয়েবলের প্রার্থী।
মাইকেল স্টাম

40
@ জোনাথন পার্কার, যখন তারা না হয়ে ( TRUE/ FALSE)
ব্রেন্ডন লং

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

43
@ মার্কাসজে আপনি আরও ভুল হতে পারবেন না এটি মতামতের বিষয় নয়, বরং অনেক প্রোগ্রামারদের দ্বারা কঠোর উপার্জনের অভিজ্ঞতার। বিগত 40 বছরের প্রোগ্রামিংয়ের সময় আমি আপনাকে কতবার বলতে পারি না যে আমি একজন পূর্ববর্তী প্রোগ্রামারকে অভিশাপ দিয়েছি যারা ধ্রুবককে সংজ্ঞায়িত করেনি, তাই আমি কেবল একটি সংখ্যার সরাসরি ব্যবহার আবিষ্কার করেছি, যা কোড রক্ষণাবেক্ষণের সময় বোঝার দরকার ছিল , প্রচুর কোডে কোথাও কবর দেওয়া হয়েছে, যার অর্থ এই ধ্রুবকটিকে সংজ্ঞায়িত করে পরিষ্কার করা হত। অন্য যে কোনও প্রবীণ প্রোগ্রামারের একই লাইন ধরে একাধিক ভৌতিক গল্প থাকবে।
টুলমেকারস্টেভ

145

একটি ম্যাজিক নম্বর একটি হার্ড-কোডড মান যা পরবর্তী পর্যায়ে পরিবর্তিত হতে পারে, তবে এটি আপডেট করা শক্ত হতে পারে।

উদাহরণস্বরূপ, ধরা যাক আপনার একটি পৃষ্ঠা রয়েছে যা "আপনার আদেশগুলি" ওভারভিউ পৃষ্ঠাতে সর্বশেষ 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 ফাংশনের মধ্যে কেবল সংজ্ঞায়িত সমস্ত কিছুই গ্রহণযোগ্য হতে পারে তবে এটি প্রসঙ্গের উপর নির্ভর করে।


18
এমনকি যদি এটি পরিবর্তন না করতে পারে তবে এটি এখনও একটি খারাপ ধারণা কারণ এটি কী চলছে তা পরিষ্কার নয়।
লরেন পেচটেল

11
এটি সবসময় অস্পষ্ট নয়। SmtpClient.DefaultPort = 25সম্ভবত স্পষ্ট Er চেয়ে SmtpClient.DefaultPort = DEFAULT_SMTP_PORT
ব্যবহারকারী 253751

4
@ মিমিবিস আমি মনে করি এটি ধরে নিচ্ছে যে ডিএএফএএলএল এসএসটিটিপিএআরপি ধারণাটি ব্যবহার করে এমন অন্য কোনও কোড নেই। যদি সেই অ্যাপ্লিকেশনটির জন্য ডিফল্ট এসএমটিপি পোর্ট পরিবর্তন করা হয়, তবে এটি একাধিক জায়গায় আপডেট হওয়া দরকার যা অসঙ্গতির সম্ভাবনা তৈরি করে।
রুশ ব্র্যাডবেরি

3
সমস্ত ব্যবহারগুলি খুঁজে পাওয়া আরও কঠিন - আপনাকে 25সমস্ত অ্যাপ্লিকেশনটি অনুসন্ধান করতে হবে এবং নিশ্চিত করতে হবে যে আপনি কেবলমাত্র 25এসএমটিপি পোর্টের জন্য যে পরিবর্তনগুলি করেছেন , 25 টি নয় যেমন টেবিল কলামের প্রশস্ততা বা সংখ্যা একটি পৃষ্ঠায় প্রদর্শন রেকর্ড।
মাইকেল Stum

2
উদাহরণস্বরূপ, আমি কোডটি 25 এর পরিবর্তে, SmtpClient.DefaultPort ব্যবহার করার প্রত্যাশা করব So সুতরাং আপনাকে কেবল এটি একটি জায়গায় পরিবর্তন করতে হবে। এবং পোর্ট নম্বরটি একইরূপে থাকার সম্ভাবনা রয়েছে, এটি কোনও এলোমেলো ম্যাজিক নম্বর নয়, তবে নির্ধারিত একটি নম্বর IANA
এনজেএসজি

34

আপনি কি যাদু সংখ্যার জন্য উইকিপিডিয়া এন্ট্রিটি একবার দেখেছেন?

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

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


8
আরটিএফডাব্লু এর ভাল উদাহরণ :)
ইভা

আমি বলব উত্তরটি পুরোপুরি অনেক দূরে।
স্কিভি

25

যাদু নম্বর বনাম। সিম্বলিক কনস্ট্যান্ট: কবে প্রতিস্থাপন করবেন?

যাদু: অজানা শব্দার্থক

সিম্বলিক কনস্ট্যান্ট -> ব্যবহারের জন্য সঠিক শব্দার্থক এবং সঠিক উভয় প্রসঙ্গ সরবরাহ করে

শব্দার্থক: কোনও কিছুর অর্থ বা উদ্দেশ্য।

"একটি ধ্রুবক তৈরি করুন, অর্থের পরে নাম দিন এবং এটির সাথে নম্বরটি প্রতিস্থাপন করুন।" - মার্টিন ফওলার

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

"যাদু" বলতে আমরা কী বুঝি? সুনির্দিষ্টভাবে বলতে গেলে: "যাদু" দ্বারা, আমরা আমাদের কোডের প্রসঙ্গে মানটির শব্দার্থবিজ্ঞানের (অর্থ বা উদ্দেশ্য) নির্দেশ করতে চাই; এটি অজানা, অজান্তে, অস্পষ্ট বা বিভ্রান্তিকর। এটি "যাদু" ধারণা। একটি প্রাথমিক মান যাদু নয় যখন এর অর্থগত অর্থ বা উদ্দেশ্য-এর-উপস্থিত রয়েছে যখন বিশেষ সহায়ক সহায়ক শব্দ (উদাহরণস্বরূপ প্রতীকী ধ্রুবক) ছাড়াই পার্শ্ববর্তী প্রেক্ষাপট থেকে দ্রুত এবং সহজেই পরিচিত, স্পষ্ট, এবং বোঝা (বিভ্রান্তিকর নয়) হয় is

অতএব, আমরা একটি কোড রিডার এর পার্শ্ববর্তী প্রেক্ষাপট থেকে একটি মৌলিক মান জানতে, স্পষ্ট হতে, এবং বুঝতে এবং তার ক্ষমতা বোঝার ক্ষমতা পরিমাপ করে যাদু সংখ্যাগুলি চিহ্নিত করি। পাঠক যত কম পরিচিত, তত কম স্পষ্ট এবং বিভ্রান্ত হবেন তত বেশি মূল বিষয় হ'ল "যাদু"।

সহায়ক সংজ্ঞা

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

বুনিয়াদি

আমাদের যাদুর প্রাথমিক মানগুলির জন্য দুটি দৃশ্য রয়েছে have প্রোগ্রামার এবং কোডের জন্য কেবল দ্বিতীয়টি প্রাথমিক গুরুত্ব দেয়:

  1. একটি একক বেসিক মান (যেমন সংখ্যা) যার অর্থ এটি অজানা, অজান্তে, অস্পষ্ট বা বিভ্রান্তিকর।
  2. একটি প্রাথমিক মান (উদাঃ সংখ্যা) প্রসঙ্গে, তবে এর অর্থ অজানা, অজান্তে, অস্পষ্ট বা বিভ্রান্তিকর থেকে যায়।

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

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

"আমি কি এই যাদু নম্বরটি প্রতীকী ধ্রুবক দিয়ে প্রতিস্থাপন করব?"

হল:

"সংখ্যার অর্থার্থক অর্থ (তার উপস্থিতির উদ্দেশ্য) এর প্রসঙ্গে আপনি কত দ্রুত মূল্যায়ন ও বুঝতে পারবেন?"

যাদু ধরনের, কিন্তু বেশ না

এই চিন্তাকে মাথায় রেখে আমরা দ্রুত দেখতে পাচ্ছি যে যথাযথ প্রসঙ্গে (যেমন 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যা একটি পূর্ণসংখ্যা। সংখ্যার অর্থ রয়েছে যা অর্থ সরবরাহের জন্য শব্দ ছাড়া জ্ঞাত বা স্পষ্ট নয়। সুতরাং, আমরা নির্বিচারে বলে শুরু করে:

  • পূর্ণ_জীবন_ফোর্স: INTEGER = 10 - খুব জীবন্ত (এবং অসন্তুষ্ট)
  • সর্বনিম্ন_জীবন_বল: INTEGER = 1 - সবেমাত্র জীবিত (খুব আহত)
  • মৃত: INTEGER = 0 - মৃত
  • Undead: INTEGER = -1 - ন্যূনতম আনডেড (প্রায় মৃত)
  • জম্বি: INTEGER = -10 - সর্বাধিক অননড

উপরের প্রতীকী ধ্রুবক থেকে আমরা আমাদের ডি অ্যান্ড ডি গেমটিতে আমাদের দানবদের জন্য বেঁচে থাকা, মৃতত্ব এবং "Undeadness" (এবং সম্ভাব্য অবসন্নতা বা পরিণতি) এর মানসিক চিত্র পেতে শুরু করি। এই শব্দগুলি (প্রতীকী ধ্রুবক) ব্যতীত, আমরা কেবলমাত্র সংখ্যাগুলি রেখেছি -10 .. 10। শুধু সম্ভবত ভীষণ বিশৃঙ্খলার একটি জায়গা শব্দের পাতার আমাদের ছাড়া এবং সম্ভাব্য আমাদের গেমে ত্রুটিযুক্ত যদি খেলার বিভিন্ন অংশের উপর নির্ভরতা কি ভালো নম্বর উপায়ে যে পরিসীমা বিভিন্ন অপারেশন সীমার attack_elvesবা seek_magic_healing_potion

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

উপসংহার

আমাদের কোন প্রশ্ন জিজ্ঞাসা করা উচিত তা পর্যালোচনা করুন:

আপনার একটি ম্যাজিক নম্বর থাকতে পারে যদি ...

  1. আপনার সফ্টওয়্যারগুলির মহাবিশ্বে প্রাথমিক মানটির কোনও বিশেষ অর্থ বা উদ্দেশ্য থাকতে পারে?
  2. বিশেষ অর্থ বা উদ্দেশ্য সম্ভবত এর যথাযথ প্রসঙ্গেও অজানা, অজানা, অস্পষ্ট বা বিভ্রান্তিকর হতে পারে?
  3. একটি সঠিক মৌলিক মানটি ভুল প্রসঙ্গে খারাপ ফলাফলের সাথে ভুলভাবে ব্যবহার করা যেতে পারে?
  4. একটি অনুচিত মৌলিক মান সঠিক প্রসঙ্গে খারাপ পরিণতিগুলির সাথে সঠিকভাবে ব্যবহার করা যেতে পারে?
  5. মৌলিক মানটির কি নির্দিষ্ট প্রসঙ্গে অন্যান্য মৌলিক মানের সাথে শব্দার্থ বা উদ্দেশ্য সম্পর্ক রয়েছে?
  6. আমাদের কোডে প্রতিটি আলাদা শব্দার্থবিজ্ঞানের সাথে একটি মৌলিক মান একাধিক জায়গায় উপস্থিত থাকতে পারে, যার ফলে আমাদের পাঠককে বিভ্রান্তি সৃষ্টি করে?

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

শেষ পর্যন্ত, প্রতিস্থাপনের উত্তরটি সংযোগটি করার জন্য পাঠকের শক্তি বা দুর্বলতার পরিমাপের (আপনার মনে) উত্তর দিন (যেমন "এটি পান")। তারা যত তাড়াতাড়ি অর্থ এবং উদ্দেশ্য বুঝতে পারে, আপনার কাছে "যাদু" তত কম।

উপসংহার: বিভ্রান্তি থেকে উদ্ভূত বাগগুলি সনাক্ত করতে অসুবিধায় জাদু যথেষ্ট পরিমাণে হলেই প্রতীকী ধ্রুবকগুলির সাথে মৌলিক মানগুলি প্রতিস্থাপন করুন।


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

17

একটি ম্যাজিক নম্বর হ'ল ফাইল ফর্ম্যাট বা প্রোটোকল এক্সচেঞ্জের শুরুতে অক্ষরগুলির ক্রম। এই নম্বরটি স্যানিটি চেক হিসাবে কাজ করে।

উদাহরণ: যে কোনও জিআইএফ ফাইল খুলুন, আপনি একেবারে শুরুতেই দেখতে পাবেন: GIF89। "GIF89" ম্যাজিক নম্বর number

অন্যান্য প্রোগ্রামগুলি কোনও ফাইলের প্রথম কয়েকটি অক্ষর পড়তে পারে এবং সঠিকভাবে জিআইএফ সনাক্ত করতে পারে।

বিপদটি হ'ল এলোমেলো বাইনারি ডেটাতে এই একই অক্ষর থাকতে পারে। তবে এটি খুব সম্ভব না।

প্রোটোকল এক্সচেঞ্জের জন্য, আপনি এটি দ্রুত সনাক্ত করতে ব্যবহার করতে পারেন যে আপনার কাছে দেওয়া বর্তমান 'বার্তা' দূষিত বা বৈধ নয়।

যাদু সংখ্যা এখনও দরকারী।


13
আমি মনে করি না যে সেই যাদু নম্বরটি তিনি উল্লেখ করেছিলেন
মারসিও আগুইয়ার

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

9
এটি এখনও জেনে রাখা খুব কার্যকর যে জাদুর সংখ্যাগুলি কেবল একটি কোড ইস্যু ছাড়াও আরও বেশি উল্লেখ করতে পারে। -আডাম
অ্যাডাম ডেভিস

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

4
তিনি কোনটিকে খুঁজছিলেন তা নির্ধারণের কোনও উপায়ও ছিল না। যেহেতু আমি প্রথম পোস্ট ছিলাম তাই অনুমান করতে পারিনি তিনি কোনটি সন্ধান করছেন।
ব্রায়ান আর বন্ডি

12

প্রোগ্রামিংয়ে, একটি "ম্যাজিক নম্বর" এমন একটি মান যা প্রতীকী নাম দেওয়া উচিত, তবে পরিবর্তে কোডটি আক্ষরিক হিসাবে পিছলে যায়, সাধারণত একাধিক জায়গায়।

এটি একই কারণে খারাপ OT এটি খুব খারাপ কারণ এটি অন্যান্য প্রোগ্রামারদের কাছে এই সংখ্যাটি কী বোঝায় তা স্পষ্ট নাও হতে পারে, তাই "যাদু"।

কনফিগারেশন হিসাবে কাজ করতে লোকেরা কখনও কখনও এই ধ্রুবকগুলিকে পৃথক ফাইলে স্থানান্তরিত করে যাদুর সংখ্যা নির্মূল করে further এটি কখনও কখনও সহায়ক, তবে এটি তার মূল্য থেকে জটিলতা তৈরি করতে পারে।


আপনি কি আরও বেশি নির্দিষ্ট করে বলতে পারেন যে ম্যাসিনিক সংখ্যাগুলি বাদ দেওয়া কেন সবসময় ভাল না?
মার্সিও আগুইয়ার

E ^ পাই + 1 = 0 এর মতো গণিত সূত্রে
জারেড আপডেটে

5
মার্সিও: আপনি যখন "কনস্ট ইনট আইইটি = 8" এর মতো কাজ করেন; এবং তারপরে প্রয়োজনীয়তাগুলি পরিবর্তন হয় এবং আপনি "কনস্ট ইনট ইইটিটি = 9" দিয়ে শেষ হন;
jmucchiello

6
দুঃখিত, তবে এটি কেবলমাত্র নামকরণের উদাহরণ, বা ধ্রুবকের জন্য বেস ব্যবহার।
Kzqai

1
@ মারসিওআগুইয়ার: কিছু প্ল্যাটফর্মে, এর মতো একটি অভিব্যক্তি (foo[i]+foo[i+1]+foo[i+2]+1)/3লুপের চেয়ে অনেক দ্রুত মূল্যায়ন করা যেতে পারে। যদি কেউ 3লুপ হিসাবে কোডটি পুনরায় না লিখে কোডটি প্রতিস্থাপন করেন তবে যে কেউ ITEMS_TO_AVERAGEসংজ্ঞায়িত দেখেছেন 3তারা এটিকে পরিবর্তন করতে পারেন 5এবং কোড গড় আরও আইটেম থাকতে পারে। বিপরীতে, যে কেউ আক্ষরিকের সাথে অভিব্যক্তিটি দেখেন 3সে বুঝতে পারে যে 3উপস্থাপিত সংখ্যার সাথে মিলিতভাবে সংখ্যার প্রতিনিধিত্ব করে।
সুপারক্যাট

10

একটি যাদু নম্বর বিশেষ, হার্ডকোডযুক্ত শব্দার্থবিজ্ঞান সহ একটি নম্বরও হতে পারে। উদাহরণস্বরূপ, আমি একবারে এমন একটি সিস্টেম দেখেছি যেখানে রেকর্ড আইডি> 0 টি সাধারণত চিকিত্সা করা হয়, 0 নিজেই "নতুন রেকর্ড", -1 ছিল "এটিই মূল" এবং -৯৯ "এটি মূলটিতে তৈরি হয়েছিল"। 0 এবং -99 এর ফলে ওয়েব সার্ভিস নতুন আইডি সরবরাহ করতে পারে।

এর মধ্যে খারাপটি হ'ল আপনি বিশেষ ক্ষমতার জন্য একটি স্থান (রেকর্ড আইডির জন্য স্বাক্ষরিত পূর্ণসংখ্যার) পুনরায় ব্যবহার করছেন। হতে পারে আপনি কখনও আইডি 0 বা কোনও নেতিবাচক আইডি দিয়ে কোনও রেকর্ড তৈরি করতে চাইবেন না, তবে তা না হলেও কোড বা ডাটাবেসে দেখানো প্রতিটি ব্যক্তি এটিকে হোঁচট খেতে পারে এবং প্রথমে বিভ্রান্ত হতে পারে। এই বিশেষ মানগুলি ভাল-ডকুমেন্টেড ছিল না বলেই যায়।

তর্কসাপেক্ষভাবে, 22, 7, -12 এবং 620 টি ম্যাজিক সংখ্যা হিসাবেও গণনা করুন। ;-)


10

ম্যাজিক নম্বর ব্যবহার করে উল্লেখ করা হয়নি এমন একটি সমস্যা ...

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

এবং তারপরে, নিশ্চিতভাবেই, আপনাকে কেবলমাত্র এক উদ্দেশ্যেই মানটি পরিবর্তন করতে হবে।


সংখ্যার কথা বলার সময় এটি সমস্ত সম্ভাব্য মনে হয় না (কমপক্ষে আমার কাছে নয়) তবে আমি তারে স্ট্রিং নিয়ে ছুটে এসেছি এবং এটি হিট first খেয়াল করতে হবে যে এটি বিভিন্ন জিনিসের জন্য ব্যবহার করা হচ্ছে ... আমার প্রিয় বিনোদন নয় not
টমিস্লাভ নাকিক-আলফায়ারভিক

4

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


3

আমি "ম্যাজিক নম্বর" শব্দটি সর্বদা আলাদাভাবে ব্যবহার করেছি, একটি ডেটা স্ট্রাকচারের মধ্যে থাকা একটি অস্পষ্ট মান হিসাবে যা দ্রুত বৈধতার চেক হিসাবে যাচাই করা যেতে পারে। উদাহরণস্বরূপ gzip ফাইলগুলিতে 0x1f8b08 তাদের প্রথম তিনটি বাইট হিসাবে থাকে, জাভা ক্লাসের ফাইলগুলি 0xcafebabe ইত্যাদি দিয়ে শুরু হয় etc.

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

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


2

এটি লক্ষণীয় যে কখনও কখনও আপনি আপনার কোডটিতে কনফিগারযোগ্য "হার্ড-কোডড" নম্বর চান want এর একটি নম্বর আছে বিখ্যাত বেশী যা অপ্টিমাইজ বিপরীত বর্গমূল অ্যালগরিদম ব্যবহার করা হয় 0x5F3759DF সহ।

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


1
আমার মতে, ম্যাজিক নম্বর কোড গন্ধ বিশেষত অব্যক্ত স্থিরিকে বোঝায় । যতক্ষণ আপনি এগুলিকে নামী ধ্রুবক হিসাবে রাখছেন, সমস্যা হওয়া উচিত নয়।
ডন কার্কবি

2

ডিফল্ট মান সহ শ্রেণীর শীর্ষে একটি পরিবর্তনশীল সূচনা করার বিষয়ে কী? উদাহরণ স্বরূপ:

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পদ্ধতির শীর্ষে ঘোষিত একটি পরিবর্তনশীল আইএমএইচও বেশি পঠনযোগ্য।
ইভা

0

@ eed3si9n: আমি এমনকি পরামর্শ দিয়েছি যে '1' একটি যাদু নম্বর is :-)

ম্যাজিক সংখ্যার সাথে সম্পর্কিত এমন একটি নীতিটি হ'ল আপনার কোডটি যে সত্যিকারের সাথে ডিল হয় তা হ'ল একবার ঘোষণা করা উচিত। আপনি যদি নিজের কোডটিতে ম্যাজিক নম্বর ব্যবহার করেন (যেমন @ মার্কসিও দিয়েছেন পাসওয়ার্ডের দৈর্ঘ্যের উদাহরণ, আপনি সহজেই সেই সত্যটির সদৃশ হয়ে যেতে পারেন, এবং যখন এই সত্যটি বোঝা যায় আপনি কোনও রক্ষণাবেক্ষণের সমস্যা পেয়েছেন।


5
আইডাব্লু কোডটি এইভাবে লেখা উচিত: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
টমাস এডিং

0

রিটার্ন ভেরিয়েবলের কী হবে?

সঞ্চিত পদ্ধতি বাস্তবায়নের সময় আমি বিশেষত এটি চ্যালেঞ্জিং মনে করি ।

পরবর্তী সঞ্চিত পদ্ধতিটি কল্পনা করুন (ভুল বাক্য গঠন, আমি জানি, কেবল উদাহরণ দেখানোর জন্য):

int procGetIdCompanyByName(string companyName);

এটি কোনও নির্দিষ্ট সারণীতে উপস্থিত থাকলে কোম্পানির আইডি ফিরিয়ে দেয়। অন্যথায়, এটি ফেরত -1। একরকম এটি একটি যাদু নম্বর। আমি এখনও অবধি পড়ে থাকা কয়েকটি সুপারিশ বলছে যে আমাকে সত্যই ডিজাইনের মতো কিছু করতে হবে:

int procGetIdCompanyByName(string companyName, bool existsCompany);

যাইহোক, সংস্থার অস্তিত্ব না থাকলে কী ফিরিয়ে আনতে হবে? ঠিক আছে: এটি অস্তিত্বযুক্ত কম্পিউটারকে মিথ্যা হিসাবে সেট করবে , তবে -1 এ ফিরে আসবে।

এন্টোর বিকল্পটি দুটি পৃথক ফাংশন করা:

bool procCompanyExists(string companyName);
int procGetIdCompanyByName(string companyName);

সুতরাং দ্বিতীয় সঞ্চিত পদ্ধতির জন্য একটি পূর্ব শর্ত হ'ল সেই সংস্থাটি বিদ্যমান।

তবে আমি সম্মতিতে ভয় পাচ্ছি, কারণ এই সিস্টেমে অন্য কোনও ব্যবহারকারী একটি সংস্থা তৈরি করতে পারেন।

উপায়টির নীচের অংশটি হ'ল: এমন কিছু "ম্যাজিক নম্বর" ব্যবহার করার বিষয়ে আপনি কী ভাবেন যা তুলনামূলকভাবে পরিচিত এবং নিরাপদ যে এটি জানাতে যে কোনও কিছু ব্যর্থ হয়েছে বা কিছু বিদ্যমান নেই?


সুনির্দিষ্ট ক্ষেত্রে, যদি ফাংশনের ডকুমেন্টেশনে বলা হয় যে নেতিবাচক রিটার্ন মান মানে কোনও সংস্থা পাওয়া যায় নি, তবে ধ্রুবক ব্যবহারের কোনও কারণ নেই।
ভিনসেন্ট ফোরমন্ড

-1

ধ্রুবক হিসাবে একটি যাদু নম্বর বের করার আরেকটি সুবিধা ব্যবসায়ের তথ্যকে স্পষ্টভাবে নথিভুক্ত করার সম্ভাবনা দেয়।

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();
         }
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.