আমাদের ধ্রুবকের দুটি দিক আলাদা করতে হবে:
- উন্নয়নের সময়ে পরিচিত একটি মূল্যবোধের নাম, যা আমরা আরও ভাল রক্ষণাবেক্ষণের জন্য প্রবর্তন করি এবং
- সংকলক উপলব্ধ যে মান।
এবং তারপরে একটি তৃতীয় ধরণের আছে: ভেরিয়েবল যার মান পরিবর্তন হয় না, অর্থাত্ একটি মানের নাম। এই অপরিবর্তনীয় ভেরিয়েবল এবং একটি ধ্রুবকের মধ্যে পার্থক্য হ'ল মান নির্ধারিত / নির্ধারিত / আরম্ভ করা হয়: একটি চলক রানটাইমের সময় আরম্ভ হয় তবে ধ্রুবকের মান বিকাশের সময় জানা যায়। এই পার্থক্যটি খানিকটা কচলা কারণ যেহেতু বিকাশের সময় কোনও মান জানা যেতে পারে তবে এটি কেবলমাত্র আরম্ভের সময় তৈরি হয়েছিল।
কিন্তু যদি একটি ধ্রুবকের মান সংকলন সময়ে জানা যায় তবে সংকলকটি সেই মানটির সাথে গণনা সম্পাদন করতে পারে। উদাহরণস্বরূপ, জাভা ভাষার ধ্রুবক প্রকাশের ধারণা রয়েছে । একটি ধ্রুবক অভিব্যক্তি এমন কোনও অভিব্যক্তি যা কেবলমাত্র আদিম বা স্ট্রিং, ধ্রুবক অভিব্যক্তিগুলির ক্রিয়াকলাপ (যেমন ingালাই, সংযোজন, স্ট্রিং কনটেনটেশন) এবং ধ্রুবক ভেরিয়েবলের সমন্বিত থাকে। [ জেএলএস §15.28 ] একটি ধ্রুবক পরিবর্তনশীল একটি final
পরিবর্তনশীল যা একটি ধ্রুবক অভিব্যক্তি দিয়ে আরম্ভ হয়। [জেএলএস §4.12.4] জাভা জন্য, এটি একটি সংকলন-সময় ধ্রুবক:
public static final int X = 7;
এটি আকর্ষণীয় হয়ে ওঠে যখন একাধিক সংকলন ইউনিটে ধ্রুবক পরিবর্তনশীল ব্যবহৃত হয় এবং তারপরে ঘোষণাটি পরিবর্তন করা হয়। বিবেচনা:
এখন যখন আমরা এই ফাইলগুলি সংকলন করি তখন B.class
বাইটকোড একটি ক্ষেত্র ঘোষণা করবে Y = 9
কারণ B.Y
একটি ধ্রুবক পরিবর্তনশীল।
তবে যখন আমরা A.X
ভেরিয়েবলটিকে একটি আলাদা মানতে (বলুন X = 0
) পরিবর্তন করি এবং কেবলমাত্র A.java
ফাইলটি পুনরায় কম্পাইল করি , তারপরেও B.Y
পুরানো মানটিকে বোঝায়। এই রাষ্ট্রটি A.X = 0, B.Y = 9
উত্স কোডে ঘোষণার সাথে অসঙ্গতিপূর্ণ। শুভ ডিবাগিং!
এর অর্থ এই নয় যে ধ্রুবকগুলি কখনই পরিবর্তন করা উচিত নয়। উত্স কোডটিতে কোনও ব্যাখ্যা ছাড়াই উপস্থিত হওয়া যাদু সংখ্যার চেয়ে ধ্রুবকগুলি অবশ্যই আরও ভাল। যাইহোক, মান পাবলিক ধ্রুবকের আপনার সর্বজনীন API- এর অংশ । এটি জাভা সম্পর্কিত নয়, তবে এটি সি ++ এবং অন্যান্য ভাষায়ও ঘটে যা পৃথক সংকলন ইউনিট বৈশিষ্ট্যযুক্ত। আপনি যদি এই মানগুলি পরিবর্তন করেন তবে আপনাকে সমস্ত নির্ভরশীল কোডটি পুনরায় সংকলন করতে হবে, অর্থাৎ একটি পরিষ্কার সংকলন সম্পাদন করতে হবে।
ধ্রুবকগুলির প্রকৃতির উপর নির্ভর করে তারা বিকাশকারীদের দ্বারা ভুল অনুমানের দিকে পরিচালিত করতে পারে। যদি এই মানগুলি পরিবর্তন করা হয় তবে তারা কোনও বাগ ট্রিগার করতে পারে। উদাহরণস্বরূপ, ধ্রুবকের একটি সেট বেছে নেওয়া যেতে পারে যাতে তারা কিছু বিট নিদর্শন তৈরি করে, যেমন public static final int R = 4, W = 2, X = 1
। এগুলি যদি অন্য কোনও কাঠামোর মতো পরিবর্তিত হয় R = 0, W = 1, X = 2
তবে বিদ্যমান কোড যেমন boolean canRead = perms & R
ভুল হয়ে যায়। এবং কেবল যে মজাটি Integer.MAX_VALUE
পরিবর্তিত হবে তা ভেবে দেখুন ! এখানে কোনও স্থিরতা নেই, এটি মনে রাখা কেবল গুরুত্বপূর্ণ যে কিছু ধ্রুবকের মান সত্যই গুরুত্বপূর্ণ এবং কেবল পরিবর্তন করা যায় না।
তবে ধীরে ধীরে ধীরে ধীরে তাদের পরিবর্তন করা যতক্ষণ উপরের সীমাবদ্ধতা বিবেচনা করা হয় ততক্ষণ ঠিক হয়ে যাবে। একটি ধ্রুবক পরিবর্তন করতে নিরাপদ যখন অর্থ, নির্দিষ্ট মানটি গুরুত্বপূর্ণ নয়। এটি উদাহরণস্বরূপ, যেমন BORDER_WIDTH = 2
বা TIMEOUT = 60; // seconds
টেমপ্লেটগুলির মতো টিউনবলের ক্ষেত্রে API_ENDPOINT = "https://api.example.com/v2/"
- যদিও যুক্তিযুক্তভাবে কিছু বা তাদের সমস্ত কোডের পরিবর্তে কনফিগারেশন ফাইলগুলিতে নির্দিষ্ট করা উচিত।