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


28

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

এই মানগুলি একটি ধ্রুবক হিসাবে, অর্থাৎ final static int CONSTANT = 0জাভাতে রাখা কি খারাপ শৈলী ? আমি জানি যে রান চলাকালীন সময়ে ধ্রুবক একই থাকে, তবে অপরিকল্পিত পরিবর্তনগুলি ব্যতীত পুরো বিকাশের সময়ও কি একই রকম হওয়ার কথা?

আমি অনুরূপ প্রশ্নের জন্য অনুসন্ধান করেছি, কিন্তু আমার সাথে মেলে এমন কোনও কিছুই খুঁজে পেলাম না।


11
আমি কৌতূহলী, এগুলি পরিবর্তন করার জন্য আপনি কেন এটি খারাপ স্টাইল হিসাবে বিশ্বাস করবেন?
ভিনসেন্ট সাভার্ড

36
যতক্ষণ না আপনি ধ্রুবক যে গাণিতিক মান পরিচিত সঙ্গে ভৌত মডেলিং করা হয়, সবকিছু কিছু সময় পরিবর্তন করতে পারেন।
বেরিন লরিটস

19
সফটওয়্যার নরম
এরিক tদ

10
@ গ্রেগটি আমি একমত নন finalআপনাকে একটি সংকলক-প্রয়োগকৃত গ্যারান্টি দেয় যে প্রোগ্রামটি মানটি পরিবর্তন করবে না। আমি কেবল এটির সাথে বিতরণ করব না কারণ প্রোগ্রামার উত্স কোডে নির্ধারিত মানটি পরিবর্তন করতে চাইতে পারে।
আলেকজান্ডার - মনিকা 18

10
পুরো উত্তরটি উচ্চারণ করার জন্য খুব বেশি সময় নয়, তবে আমি সন্দেহ করি আপনার সহকর্মীদের উদ্বেগটি ধ্রুবকদের সাথে নয়, তবে কনফিগারেশন মানগুলির কোড-ইনলাইনিংয়ের সাথে, যা ধ্রুবক হিসাবে প্রকাশিত হতে পারে। ... ধ্রুবকগুলি আপনাকে বোকা ভুল থেকে রক্ষা করে, যেমন দুর্ঘটনাক্রমে gravityমিড-গেম / রানকে অর্পণ করে । এগুলি অগত্যা বলতে চাই না যে, gravityপ্রতিটি গ্রহে একইরকম ... এটি বলেছে, স্বাস্থ্যকর সমাধান হ'ল gravityএকটি ধ্রুবক তৈরি করা, তবে এটিকে planetপ্রাসঙ্গিক সুযোগের শুরুতে একটি ফাইল বা ডাটাবেস থেকে টানুন ।
এসভিডজেন

উত্তর:


6

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

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

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

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

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

আপনার নিজস্ব কোডে, বিশেষত নির্ভরতা শ্রেণিবিন্যাসের শীর্ষে, আপনি সম্ভবত এটি থেকে দূরে চলে যাবেন। তবে এই ক্ষেত্রেগুলি বিবেচনা করুন যে আপনার সত্যিকারের সর্বজনীন হওয়ার জন্য (বা সুরক্ষিত) দরকার whether যদি ধ্রুবকটি কেবল প্যাকেজ-দৃশ্যমান হয় তবে আপনার পরিস্থিতি এবং কোডের মানগুলির উপর নির্ভর করে এটি যুক্তিসঙ্গত that যদি ধ্রুবকটি ব্যক্তিগত হয় তবে আপনার কোনও সমস্যা নেই এবং যখনই আপনি চান এটি পরিবর্তন করতে পারেন।


85

constঘোষিত গ্লোবাল কনস্ট্যান্ট সহ আপনার উত্স কোডের যে কোনও কিছুই আপনার সফ্টওয়্যারটির নতুন প্রকাশের সাথে পরিবর্তিত হতে পারে।

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

// DO NOT CHANGE without consulting with the legal department!
// Get written consent form from them before release!
public const int LegalLimitInSeconds = ...

আপনার ভবিষ্যতের আত্মের সাথে যোগাযোগের এক উপায় আরও ভাল উপায়।


11
আমি ভবিষ্যতের স্ব স্বতে এই মন্তব্যটি সত্যিই পছন্দ করেছি।
গ্রেগটি

4
TaxRateসত্তা publicআমাকে নার্ভাস করে তোলে। আমি নিশ্চিতভাবে জানতে চাই যে কেবল বিক্রয় বিভাগই এই পরিবর্তনের দ্বারা প্রভাবিত হয়েছিল এবং আমাদের সরবরাহকারীরাও নয় যা আমাদের উপর শুল্ক ধার্য করে। এই মন্তব্যটি লেখা হওয়ার পরে কোড বেসে কী হয়েছে কে জানে।
candied_orange

3
@ ইলিউসিভ ব্রায়ান ধ্রুবক ব্যবহারের সমালোচনা করছিল না। একটি মন্তব্য আপ টু ডেট হতে বিশ্বাসের বিরুদ্ধে সতর্ক করে দিচ্ছিল। আপনি কিছু পরিবর্তন করার আগে কীভাবে ব্যবহৃত হয় তা সম্পর্কে সর্বদা নিশ্চিত হন।
candied_orange

8
এটি জাভা জন্য ভাল পরামর্শ । অন্যান্য ভাষায় এটি ভিন্ন হতে পারে। উদাহরণস্বরূপ, কনস্ট্যান্ডের মানগুলি সি # তে কল সাইটের সাথে আবদ্ধ হওয়ার কারণে public constক্ষেত্রগুলি কেবলমাত্র এমন জিনিসগুলির জন্য ব্যবহার করা উচিত যা কখনও কখনও পরিবর্তিত হবে না, যেমন ম্যাথপিপি like আপনি যদি একটি গ্রন্থাগার তৈরি করছেন, এমন কিছু জিনিস যা বিকাশের সময় বা নতুন সংস্করণ সহ পরিবর্তিত হতে পারে public static readonly, যাতে আপনার গ্রন্থাগারের ব্যবহারকারীদের সমস্যা না ঘটে।
গ্র্যান্ডওপনার

6
আপনার আলাদা উদাহরণ বেছে নেওয়া উচিত ... অর্থের মানগুলি কখনই ভাসমান বিন্দু হওয়া উচিত নয়!
কর্সিকা

13

আমাদের ধ্রুবকের দুটি দিক আলাদা করতে হবে:

  • উন্নয়নের সময়ে পরিচিত একটি মূল্যবোধের নাম, যা আমরা আরও ভাল রক্ষণাবেক্ষণের জন্য প্রবর্তন করি এবং
  • সংকলক উপলব্ধ যে মান।

এবং তারপরে একটি তৃতীয় ধরণের আছে: ভেরিয়েবল যার মান পরিবর্তন হয় না, অর্থাত্ একটি মানের নাম। এই অপরিবর্তনীয় ভেরিয়েবল এবং একটি ধ্রুবকের মধ্যে পার্থক্য হ'ল মান নির্ধারিত / নির্ধারিত / আরম্ভ করা হয়: একটি চলক রানটাইমের সময় আরম্ভ হয় তবে ধ্রুবকের মান বিকাশের সময় জানা যায়। এই পার্থক্যটি খানিকটা কচলা কারণ যেহেতু বিকাশের সময় কোনও মান জানা যেতে পারে তবে এটি কেবলমাত্র আরম্ভের সময় তৈরি হয়েছিল।

কিন্তু যদি একটি ধ্রুবকের মান সংকলন সময়ে জানা যায় তবে সংকলকটি সেই মানটির সাথে গণনা সম্পাদন করতে পারে। উদাহরণস্বরূপ, জাভা ভাষার ধ্রুবক প্রকাশের ধারণা রয়েছে । একটি ধ্রুবক অভিব্যক্তি এমন কোনও অভিব্যক্তি যা কেবলমাত্র আদিম বা স্ট্রিং, ধ্রুবক অভিব্যক্তিগুলির ক্রিয়াকলাপ (যেমন ingালাই, সংযোজন, স্ট্রিং কনটেনটেশন) এবং ধ্রুবক ভেরিয়েবলের সমন্বিত থাকে। [ জেএলএস §15.28 ] একটি ধ্রুবক পরিবর্তনশীল একটি finalপরিবর্তনশীল যা একটি ধ্রুবক অভিব্যক্তি দিয়ে আরম্ভ হয়। [জেএলএস §4.12.4] জাভা জন্য, এটি একটি সংকলন-সময় ধ্রুবক:

public static final int X = 7;

এটি আকর্ষণীয় হয়ে ওঠে যখন একাধিক সংকলন ইউনিটে ধ্রুবক পরিবর্তনশীল ব্যবহৃত হয় এবং তারপরে ঘোষণাটি পরিবর্তন করা হয়। বিবেচনা:

  • A.java:

    public class A { public static final int X = 7; }
  • B.java:

    public class B { public static final int Y = A.X + 2; }

এখন যখন আমরা এই ফাইলগুলি সংকলন করি তখন 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/"- যদিও যুক্তিযুক্তভাবে কিছু বা তাদের সমস্ত কোডের পরিবর্তে কনফিগারেশন ফাইলগুলিতে নির্দিষ্ট করা উচিত।


5
আমি এই বিশ্লেষণ পছন্দ। আমি এটি এই হিসাবে পড়েছি: আপনি যতক্ষণ না এটি ব্যবহার করছেন বুঝতে পারছেন আপনি এতক্ষণ একটি ধ্রুবক পরিবর্তন করতে মুক্ত।
candied_orange

+1 সি # জনসাধারণের ধ্রুবকগুলির সাথে একই সমস্যা থেকে "ভোগেন"।
রেজিনাল্ড ব্লু

6

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

  • ধ্রুবকরা প্রয়োগের স্থান গ্রহণ করে
  • সংকলক পতাকা না
  • কনস্ট্যান্টদের দ্বারা বন্ধ করা কোডটি আধুনিক রিফ্যাক্টরিং সরঞ্জামগুলির সাহায্যে আপডেট এবং পরিবর্তন করা যেতে পারে
  • সংকলক পতাকা দ্বারা কোড বন্ধ করা যাবে না

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

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

আপনার ব্যবহারের কেসটি কেন এবং কেন আপনি ধ্রুবকগুলি পরিবর্তন করতে চান তা মূল্যায়ন করতে হবে।

আমি সাধারণ কম্বল স্টেটমেন্টের অনুরাগী নই, তবে সাধারণভাবে আপনার প্রবীণ সহকর্মী সঠিক। যদি কিছু প্রায়শই পরিবর্তন হতে বাধ্য হয় তবে এটির জন্য একটি কনফিগারযোগ্য আইটেম হওয়া দরকার। উদাহরণস্বরূপ, আপনি IsInDebugMode = trueযখন কোনও কোড ভাঙ্গা থেকে রক্ষা করতে চান তখন আপনি সম্ভবত আপনার সহকর্মীকে একটি ধ্রুবক হিসাবে বোঝাতে পারেন। যাইহোক, আপনি কোনও অ্যাপ্লিকেশন প্রকাশের চেয়ে কয়েকটি জিনিসের পরিবর্তনের প্রয়োজন হতে পারে। যদি এটি হয় তবে আপনার উপযুক্ত সময়ে উপযুক্ত মানটি পরিবর্তন করতে হবে a আপনি একটি উদাহরণ নিতে পারেন TaxRate = .065। আপনি আপনার কোডটি সংকলন করার সময় এটি সত্য হতে পারে তবে নতুন আইনের কারণে আপনি আপনার অ্যাপ্লিকেশনটির পরবর্তী সংস্করণ প্রকাশের আগে এটি পরিবর্তন হতে পারে। এটি এমন কিছু যা কিছু স্টোরেজ মেকানিজম (যেমন ফাইল বা ডাটাবেস) থেকে আপডেট করা দরকার


"সংকলক পতাকা" বলতে কী বোঝ? সম্ভবত সি প্রিপ্রসেসর এবং অনুরূপ সংকলক বৈশিষ্ট্য যা ম্যাক্রো / সংজ্ঞায়িত এবং #ifdefগুলি সমর্থন করে ? যেহেতু এগুলি সোর্স কোডের পাঠ্য প্রতিস্থাপনের ভিত্তিতে , তাই তারা প্রোগ্রামিং ভাষার শব্দার্থবিদ্যার অংশ নয়। নোট করুন যে জাভাতে প্রিপ্রেসেসর নেই।
আমন

@ এ্যামন, জাভা নাও পারে তবে বেশ কয়েকটি ভাষায় তা করতে পারে। আমি #ifdefপতাকা মানে । যদিও তারা সি এর শব্দার্থবিজ্ঞানের অংশ নয়, তারা সি # এর অংশ। আমি ভাষা অজ্ঞাতবাদের বৃহত্তর প্রসঙ্গের জন্য লিখছিলাম।
বেরিন লরিটস

আমি মনে করি "মেমরি বর্জ্য" যুক্তিটি মোট। ইন-আস্তরণ এবং গাছ কাঁপানো যে কোনও রিলিজ-মোড অপটিমাইজারের একটি বেশ অনেকটা সর্বজনীন পদক্ষেপ।
আলেকজান্ডার - মনিকা 18

@ আলেকজান্ডার, আমি সম্মত এটি সচেতন হওয়ার মতো বিষয়।
বার্লিন লরিটস্ক

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

2

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

তবে, সংকলক ইঙ্গিত হিসাবে, সংকলক এমন কিছু কাজ করে যা প্রোগ্রামার দ্বারা সর্বদা প্রত্যাশিত নাও হতে পারে। বিশেষত, জাভাক একটি ইনলাইন করবে static final int FOO = 42;যাতে যে কোনও জায়গায় FOOব্যবহৃত হয় না, আসল সংকলিত বাইট কোডটি পড়তে পারে 42

অন্য সংকলন ইউনিট (। জাভা ফাইল) সংশোধন না করে কেউ মান পরিবর্তন না করে অবাক করা খুব বেশি বড় নয় - এবং 42বাইট কোডের অবশেষ (দেখুন স্থির চূড়ান্ত ভেরিয়েবলগুলির জাভ্যাকের ইনলাইনিং অক্ষম করা সম্ভব? )

কিছু উপার্জনের static finalঅর্থ হ'ল এটি হ'ল এবং চিরকালের জন্য আরও কিছু হবে এবং এটি পরিবর্তন করা সত্যিই বড় চুক্তি especially বিশেষত যদি এর কিছু নাও হয় private

মত জিনিসগুলির জন্য ধ্রুবকগুলি final static int ZERO = 0কোনও সমস্যা নয়। final static double TAX_RATE = 0.55(অর্থ এবং ডাবল হওয়া বাদ দিয়ে খারাপ এবং এটি বিগডিসিমাল ব্যবহার করা উচিত, তবে তারপরে এটি আদিম নয় এবং এইভাবে অন্তর্ভুক্ত নয়) এটি একটি সমস্যা এবং এটি কোথায় ব্যবহৃত হয়েছে সে সম্পর্কে খুব যত্ন সহকারে পরীক্ষা করা উচিত।


জেরোর ছোট মানগুলির জন্য।

3
is a problem and should be examined with great care for where it is used.কেন এটি একটি সমস্যা?
আলেকজান্ডার - মনিকা পুনঃস্থাপন

1

নামটি যেমন বোঝায়, রানটাইমের সময় ধ্রুবকগুলি পরিবর্তন করা উচিত নয় এবং আমার মতে ধ্রুবকগুলি দীর্ঘ সময়ের জন্য পরিবর্তন না করার জন্য সংজ্ঞায়িত করা হয়েছে ( আরও তথ্যের জন্য আপনি এই এসও প্রশ্নের দিকে নজর দিতে পারেন ।

পতাকাগুলির প্রয়োজনে (যেমন উন্নয়ন মোডের জন্য) আপনার পরিবর্তে একটি কনফিগার ফাইল বা প্রারম্ভকালীন প্যারামিটার ব্যবহার করা উচিত (অনেক আইডিই প্রতি প্রজেক্ট ভিত্তিতে স্টার্টআপ প্যারামিটার কনফিগার করে; প্রাসঙ্গিক ডকুমেন্টেশন পড়ুন) এই মোডটি সক্ষম করতে - এই জাতীয় মোডটি ব্যবহার করার জন্য আপনি নমনীয়তা বজায় রাখেন এবং কোডটি ফলনশীল হয়ে যাওয়ার সময় আপনি এটি পরিবর্তন করতে ভুলে যেতে পারবেন না।


0

রানগুলির মধ্যে পরিবর্তিত হতে সক্ষম হওয়াই আপনার উত্স কোডের একটি ধ্রুবককে সংজ্ঞায়িত করার সবচেয়ে গুরুত্বপূর্ণ পয়েন্টগুলির মধ্যে একটি!

ধ্রুবকটি আপনাকে যখন আপনার উত্স কোডের জীবদ্দশায় প্রয়োজন হয় তখন মানটি পরিবর্তন করার জন্য একটি সু-সংজ্ঞায়িত এবং ডকুমেন্টেড (একটি অর্থে) অবস্থান দেয়। এটি এই প্রতিশ্রুতিও যে এই স্থানে ধ্রুবক পরিবর্তন করা প্রকৃতপক্ষে যা কিছু দাঁড়ায় তার সমস্ত ঘটনাকে বদলে দেবে।

একটি বিরূপ উদাহরণ হিসাবে: এটি এমন একটি ধ্রুবক বোধগম্য হবে নাTRUE যা কোনও trueভাষায় প্রকৃতপক্ষে trueকীওয়ার্ড রয়েছে ev আপনি কখনই, একবারেও নয়, একবারও TRUE=falseনির্মম পরিহাস হিসাবে ঘোষণা করবেন না।

অবশ্যই ধ্রুবকের অন্যান্য ব্যবহার রয়েছে, উদাহরণস্বরূপ সংক্ষিপ্তকরণ কোড ( CO_NAME = 'My Great World Unique ACME Company'), সদৃশকরণ এড়ানো ( PI=3.141), কনভেনশনগুলি সেট করা ( TRUE=1) বা যাই হোক না কেন, তবে ধ্রুবকটি পরিবর্তনের জন্য একটি সংজ্ঞায়িত অবস্থান থাকা অবশ্যই অন্যতম প্রধান বিষয়।

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