ধ্রুবক
"অ্যামিগো, আপনি কি জানেন যে জাভাতে সব ভেরিয়েবল পরিবর্তন করা যায় না?"
"এটা কেমন, কিম? আসলে, 'ভেরিয়েবল' শব্দটিই পরিবর্তনের কথা বলে।"
"এতে কোন সন্দেহ নেই। অন্যান্য অনেক প্রোগ্রামিং ল্যাঙ্গুয়েজের মত, জাভাতেও ধ্রুবক আছে , অর্থাৎ, ভেরিয়েবল যার মান পরিবর্তন করা যায় না । এবং 'ধ্রুবক' শব্দটিই স্থিরতার কথা বলে।"
"এবং তারা কি জন্য?"
"সাধারণত, এগুলি কিছু মৌলিক জিনিসের জন্য ব্যবহার করা হয় যেমন Pi
বছরের মাসের সংখ্যা বা দিনের সংখ্যা। এতে বলা হয়েছে, নীতিগতভাবে, একজন প্রোগ্রামার যে কোনও পরিবর্তনশীলকে একটি ধ্রুবক তৈরি করতে পারে, যদি সে সিদ্ধান্ত নেয় তাই প্রয়োজনীয়।"
"আপনি মানে একটি নাম, একটি গাড়ির রঙ, বা সপ্তাহের একটি দিনের নাম?"
"আপনি সঠিক ধারণা পেয়েছেন। এমন কিছু যা পরিবর্তন করা উচিত নয়।"
"এবং এই ধ্রুবকগুলি জাভাতে কেমন দেখায়?"
"জাভা তাদের জন্য একটি বিশেষ কীওয়ার্ড রয়েছে: final
. একটি অপরিবর্তনীয় ভেরিয়েবল তৈরি করা একটি সাধারণ একটি তৈরি করার মতোই দেখায়। পার্থক্যটি হল ভেরিয়েবলের প্রকারের আগে আপনাকে final
এই শব্দটি লিখতে হবে:
final Type name = value;
"আপনি যদি একটি ধ্রুবক তৈরি করেন এবং তারপরে এটিতে একটি ভিন্ন মান নির্ধারণ করার চেষ্টা করেন তবে কী হবে?"
"এটি জিজ্ঞাসা করা সঠিক প্রশ্ন! এবং সঠিক উত্তর হল: আপনি যদি একটি final
ভেরিয়েবলের জন্য একটি ভিন্ন মান নির্ধারণ করার চেষ্টা করেন, তাহলে আপনার প্রোগ্রামটি কেবল কম্পাইল হবে না।"
"যদি আপনি একটি final
ভেরিয়েবল ঘোষণা করেন কিন্তু এটিতে একটি মান নির্ধারণ না করেন?"
"এটি করার কোন মানে নেই, তাই এটি জাভাতেও অনুমোদিত নয়। একটি final
ভেরিয়েবলকে অবশ্যই আরম্ভ করতে হবে যখন এটি ঘোষণা করা হবে, অর্থাৎ, আপনাকে অবশ্যই এটিতে একটি মান বরাদ্দ করতে হবে। এই নিয়মের একটি ব্যতিক্রম রয়েছে: আপনি এর প্রারম্ভিকতা সরাতে পারেন একটি কনস্ট্রাক্টরে একটি স্ট্যাটিক ক্লাস ভেরিয়েবল। কিন্তু আপনি পরে এটি সম্পর্কে জানতে পারবেন।
"এটি বলেছিল, যা কিছু আছে তা final
ধ্রুবক নয়। কীওয়ার্ডের সংখ্যা কমাতে, জাভা বিকাশকারীরা final
কেবলমাত্র ধ্রুবক ঘোষণা করার চেয়েও বেশি শব্দ ব্যবহার করে। final
পদ্ধতি এবং এমনকি ক্লাসেও প্রয়োগ করতে পারে। পদ্ধতিগুলিকে final
ওভাররাইড করা যায় না এবং একটি ক্লাস হিসাবে ঘোষণা করা হয়। final
উত্তরাধিকারী হিসাবে ঘোষণা করা যায় না।"
"উহ... ওভাররাইডেড? উত্তরাধিকারসূত্রে পাওয়া? আপনি এখন কোন ভাষায় কথা বলছেন?"
"অবজেক্ট-ওরিয়েন্টেড প্রোগ্রামিং এর ভাষা। আপনি খুব শীঘ্রই এটি পাবেন। ততক্ষণ পর্যন্ত, সুন্দর পরিভাষা উপভোগ করুন।"
"ঠিক আছে। তাহলে, final
ভেরিয়েবল, ক্লাস এবং পদ্ধতির আগে রাখা যেতে পারে, এবং এই কীওয়ার্ডটি তাদের কিছু অর্থে অপরিবর্তনীয় করে তোলে?"
"হ্যাঁ। উপরন্তু, final
কোনো ভেরিয়েবলের আগে সংশোধক যোগ করা যেতে পারে: স্থানীয় ভেরিয়েবল, মেথড প্যারামিটার, ক্লাস ফিল্ড এবং স্ট্যাটিক ক্লাস ভেরিয়েবল।
"এখানে মনে রাখা গুরুত্বপূর্ণ বিষয়: final
একটি ভেরিয়েবল নামের আগে শুধুমাত্র সেই ভেরিয়েবলের কোনো পরিবর্তনের বিরুদ্ধে সুরক্ষা । যদি একটি ভেরিয়েবল কোনো বস্তুর একটি রেফারেন্স সংরক্ষণ করে, তাহলে অবজেক্টটি এখনও পরিবর্তন করা যেতে পারে।"
"আমি ঠিক বুঝতে পারছি না।"
"আপনি খুব শীঘ্রই বুঝতে পারবেন। এখানে একটি উদাহরণ:
|
আমরা একটি অ্যারে তৈরি করি। এটি অনুমোদিত নয়: পরিবর্তনশীল data হিসাবে ঘোষণা করা হয় final । কিন্তু আপনি এটা করতে পারেন. এবং এই. |
"বুঝেছি। এটা কঠিন।"
গ্লোবাল ধ্রুবক
"আপনি কি মনে করেন বিশ্ব ধ্রুবকগুলি কি?"
"আমি অনুমান করি বিশ্বব্যাপী ধ্রুবকগুলি সম্ভবত গ্লোবাল ভেরিয়েবলের মতো, শুধুমাত্র ধ্রুবক?"
"ঠিক। যদি আপনার প্রোগ্রামে গ্লোবাল কনস্ট্যান্ট ঘোষণা করতে হয়, স্ট্যাটিক ক্লাস ভেরিয়েবল তৈরি করুন , এবং সেগুলি তৈরি করুন public
এবং final
। এই ধরনের ভেরিয়েবলের নামের জন্য একটি বিশেষ শৈলী রয়েছে: সেগুলি সমস্ত বড় অক্ষরে লেখা হয়, একটি আন্ডারস্কোর অক্ষর সহ পৃথক শব্দ।
উদাহরণ:
class Solution
{
public static final String SOURCE_ROOT = "c:\\projects\\my\\";
public static final int DISPLAY_WIDTH = 1024;
public static final int DISPLAY_HEIGHT = 768;
}
পরিবর্তনশীল ছায়া
"যেমন আমি আগে বলেছি, আপনি একক পদ্ধতিতে একই নামের একাধিক স্থানীয় ভেরিয়েবল তৈরি করতে পারবেন না। বিভিন্ন পদ্ধতিতে, আপনি করতে পারেন।"
"আমি এটা জানি!"
"কিন্তু আপনি সম্ভবত জানেন না যে একটি ক্লাসের ভেরিয়েবল এবং একটি পদ্ধতিতে স্থানীয় ভেরিয়েবলের একই নাম থাকতে পারে।
উদাহরণ:
কোড | পরিবর্তনশীল দৃশ্যমানতা |
---|---|
|
|
"পদ্ধতিতে add
, আমরা নামক একটি স্থানীয় ভেরিয়েবল ঘোষণা করেছি sum
। পদ্ধতির শেষ না হওয়া পর্যন্ত, এটি ইনস্ট্যান্স ভেরিয়েবলের ছায়া (বা মুখোশ ) রাখে sum
।"
"হুম... আমি কিছু অর্থে বলব এটাই প্রত্যাশিত আচরণ।"
"কিন্তু এটি গল্পের শেষ নয়। দেখা যাচ্ছে যে যদি একটি ইনস্ট্যান্স ভেরিয়েবল একটি স্থানীয় ভেরিয়েবল দ্বারা ছায়া করা হয়, তবে পদ্ধতির মধ্যে ইনস্ট্যান্স ভেরিয়েবলকে উল্লেখ করার একটি উপায় রয়েছে। আমরা এটির নামের আগে কীওয়ার্ড লিখে এটি this
করি :
this.name
"এখানে একটি উদাহরণ যেখানে নাম দ্বন্দ্ব সফলভাবে সমাধান করা হয়েছে:
কোড | পরিবর্তনশীল দৃশ্যমানতা |
---|---|
|
|
এবং ভেরিয়েবল কিওয়ার্ড সহ বা ছাড়া সব জায়গায় পাওয়া যায় count
। যে লাইনে স্থানীয় ভেরিয়েবলটি ইনস্ট্যান্স ভেরিয়েবলকে ছায়া দেয় , ইনস্ট্যান্স ভেরিয়েবলটি শুধুমাত্র কীওয়ার্ড ব্যবহার করে অ্যাক্সেস করা যেতে পারে ।sum
this
sum
sum
sum
this
"অবশ্যই, আমাকে এটি অনুশীলন করতে হবে।"
"আপনি ম্যানেজ করবেন।"
"কি হবে যদি একটি স্ট্যাটিক ক্লাস ভেরিয়েবল শুধুমাত্র একটি (নন-স্ট্যাটিক) ইনস্ট্যান্স ভেরিয়েবলের পরিবর্তে ছায়াযুক্ত হয়? আপনি এটির মাধ্যমে অ্যাক্সেস করতে পারবেন না this
?"
"আপনি ঠিক বলেছেন। এই কীওয়ার্ডটি কাজ করবে না। আপনাকে ক্লাসের নামের মাধ্যমে এটি উল্লেখ করতে হবে:
ClassName.name
উদাহরণ:
কোড | পরিবর্তনশীল দৃশ্যমানতা |
---|---|
|
|
"মনোযোগ দিন: আপনি প্রিফিক্স হিসাবে ক্লাসের নাম ব্যবহার করে বা ছাড়াই সর্বত্র count
এবং স্ট্যাটিক ভেরিয়েবলগুলি অ্যাক্সেস করতে পারেন ৷ সেই লাইনগুলিতে যেখানে স্থানীয় ভেরিয়েবলটি ইনস্ট্যান্স ভেরিয়েবলকে ছায়া দেয় , ক্লাস ভেরিয়েবলে অ্যাক্সেস কেবলমাত্র একটি উপসর্গ হিসাবে ব্যবহার করার সময়ই সম্ভব ৷sum
Solution
sum
sum
sum
Solution
for
একটি লুপের ভিতরে ভেরিয়েবল
"এবং আরও একটি ছোট কিন্তু আকর্ষণীয় তথ্য। এমন একটি জায়গা আছে যেখানে একটি পরিবর্তনশীল একটি বিশেষ উপায়ে ঘোষণা করা হয় - আমি একটি for
লুপের ভিতরের কথা বলছি ।" সাধারণত, একটি লুপের বন্ধনীতে for
একটি পরিবর্তনশীল থাকে । counter
এবং এই ভেরিয়েবলের দৃশ্যমানতা কি হবে? সর্বোপরি, এটি লুপের শরীরে নেই। এটা কি পুরো পদ্ধতি? অথবা না?"
"আমি ইতিমধ্যে এই সম্পর্কে কিছু শুনেছি। আমি এটি বুঝতে পেরেছি, for
লুপের হেডারে ঘোষিত একটি পরিবর্তনশীল শুধুমাত্র লুপের বডিতে এবং লুপের হেডারেfor
দৃশ্যমান হয় ।"
"ভাল হয়েছে, অ্যামিগো। কিন্তু তবুও, এই উপাদানটিকে শক্তিশালী করার জন্য একটি উদাহরণ দেখুন:
কোড | পরিবর্তনশীল দৃশ্যমানতা |
---|---|
|
|
"তাহলে আপনি বলছেন যে আমার কোডে আমি একই নামের কাউন্টার ভেরিয়েবল সহ একের পর এক বেশ কয়েকটি লুপ লিখতে পারি, এবং কোন সমস্যা হবে না?"
"কোন সমস্যা হবে না। এখানে দেখুন:
কোড | পরিবর্তনশীল দৃশ্যমানতা |
---|---|
|
|
GO TO FULL VERSION