মানুষের যেমন বিভিন্ন রকমের ভাষা আছে, কিছু বলতে হলে তাকে তার ভাষাতে বা human readable language দিয়ে বলতে হয় নাহলে সে বুঝতে পারেনা (যেমন আমরা ছাগলের ম্যা ম্যা বা গরুর হাম্বা হাম্বা ডাক শুনে কিন্তু তার কোনো অর্থোদ্ধার করতে পারিনা) সেরকম কম্পিউটারেরও কিছু নিজস্ব ভাষা আছে ওই ভাষায় না বললে সে কিছুই বুঝতে পারেনা। যেমন, C, C++, Python, Java, PHP, Ruby apu, C# ( এখানে সি শার্প নট হ্যাস) এরকম আরো অনেক language আছে। উইকিপিডিয়া বলে এরম ভাষার সংখ্যা প্রায় ৭০০ এর মতো আবার কেউ কেউ বলে প্রায় ৯০০০! (ফ্যাক্টোরিয়াল না কিন্তু!) আবার কারো কারো মতে এ সংখ্যা নাকি অসীম!! এসব ভাষাতে বললেই যে কম্পিউটার সেটাই বুঝে কাজ করে তাও কিন্তু না বরং তার নিজের ভাষাকেও আরো কিছু বিশেষ পরিমার্জন, প্রসেসিংয়ের পর সেটা দিয়ে যাবতীয় হিসাব নিকাশ কাজবাজ করে! কারন আমরা যত যা-ই বলি সে তো ‘শুন্য’ আর ‘এক’ ছাড়া কিছু বুঝেনা। এজন্য আমরা যে কম্পিউটার ল্যাঙ্গুয়েজ দিয়ে কোড লিখি তাকে বলা হয় সোর্সকোড আর এই সোর্সকোডকে বিশেষ পরিমার্জন, প্রসেসিংয়ের পর যে লঙ্গুয়েজে পরিনত করে হিসাব নিকাশ করে তাকে বলে বাইনারি কোড। তো আস্তে ধীরে এসব নিয়ে আলোচনা করা যাবে।
এখানে কর্তৃপক্ষ ধীরে ধীরে সিপ্লাসপ্লাস (C++) language কে ব্যবচ্ছেদ করার চেষ্টা করতেছে (ভুলত্রুটি পরিমার্জন, পরিবর্ধনের জন্য সাহায্যপ্রার্থী)
Variable
আচ্ছা, সবার আগে আমরা ভ্যারিয়েবল এর ক্যাঁচাল দিয়ে শুরু করি :
ভ্যারিয়েবল কি জিনিস তা বোঝার আগে আমাদেরকে বুঝতে হবে পট বা পাত্র বা কনটেইনার কি। তো পাত্র কি আমরা সবাই জানি (অবশ্যই বিয়ের পাত্র না!), পাত্র হল এমন স্টোরেজ বা জায়গা যেখানে আমরা কোনো জিনিস রাখতে পারি। প্রশ্ন হল কি ধরনের জিনিস রাখতে পারি, উত্তর হল কঠিন, তরল, বায়বীয় যেকোনো ধরনের জিনিস রাখতে পারি। বুঝলামনা একটু পরিষ্কার করেন তো? আচ্ছা, এই লেখা পড়তে পড়তে বিষয়টা আরো পরিষ্কার হয়ে যাবে। তো ধারন ক্ষমতা অনুসারে পাত্র বিভিন্ন রকমের হতে পারে যেমন, ছোট, বড় বা মাঝারি। আবার একটা নির্দিষ্ট পাত্র একটা নির্দিষ্ট জিনিসের জন্য হতে পারে যেমন চাল রাখার জন্য একটা পাত্র, ডাল রাখার জন্য অন্য আরেকটা পাত্র এরকম আর কি…
তো ভ্যরিয়েবল হল এক ধরনের পাত্র বা কনটেইনার যার মধ্যে আমরা কি চাল, ডাল, তেল রাখি?😄 না, আসলে চাল, ডাল, তেলের ডেটা বা ইনফরমেশন (যদিও ডেটা আর ইনফরমেশনের মধ্যে সূক্ষ্ম একটা পার্থক্য আছে) রাখি যেমন কত কেজি চাল এবং তার দাম কত, অথবা তেলের পরিমান বা তার মূল্য এরকম। ইংরেজি variable হল vary+able; vary অর্থ পরিবর্তিত হওয়া আর able অর্থ যোগ্য অর্থাৎ যার মান বা ভ্যালু পরিবর্তিত হওয়ার যোগ্য বা পরিবর্তন করা যায় তাকে ভ্যারিয়েবল বলে। কালের বিবর্তনে যেমন চাল, ডাল, তেলের দামের পরিবর্তন হয় তেমনি ভ্যারিয়েবলের মধ্যে রাখা ভ্যালু বা মানেরও পরিবর্তন করা যায়!
এখন আমরা ভ্যারিয়েবল ডিক্লেয়ার বা ঘোষনা করব, তার জন্য একটা ইউনিক নাম প্রয়োজন। নামটা ইউনিক হওয়া প্রয়োজন অর্থাৎ ভিন্ন ভিন্ন ভ্যারিয়েবলের জন্য ভিন্ন ভিন্ন নাম নিতে হবে, একই নাম অনেক গুলো ভ্যারিয়েবলের জন্য ব্যবহার করতে পারবো না (কোনো পরিবারে যদি ১০ জনের মধ্যে ৭জনের নাম হয় ‘অমুক’ তো অমুক নাম ধরে ডাকলে ৭জনের সবাই কনফিউজড হয়ে যাবে যে কারে ডাকা হচ্ছে!) আস্তেধীরে উদাহরণসহ দেখলে সব আরো পরিষ্কার হয়ে যাবে।
এখন দেখি চালের ১-নম্বর পাত্র, চালের ২-নম্বর পাত্র, অথবা ডালের ১০-নম্বর পাত্রকে আমরা কিভাবে ডিক্লেয়ার বা ঘোষনা করতে পারি: (এখানে পাত্র গুলোকে বস্তা আকারে নিয়েছি)
চালের_বস্তা_১ = ২০; // অর্থাৎ চালের ১ নম্বর বস্তায় ২০ কেজি চাল আছে;
কোড লেখার সময় এভাবে লিখতে হয়:
chaler_bosta_1 = 20; // এখানে chaler_bosta_1 হল ভ্যারিয়েবলের নাম যা ২০ কেজি চাল রাখার জন্য স্টোরেজ বা কনটেইনার হিসেবে কাজ করে আর ২০ হল ডেটা বা ইনফরমেশন যাকে ভ্যারিয়েবল chaler_bosta_1 এর মধ্যে রাখলাম।
চিত্র-: এখানে দেখানো হয়েছে বাহিরের বস্তাটা হল ভ্যারিয়েবল আর ভিতরের চালগুলো হল সংরক্ষিত ডেটা।
চালের_পাত্র_২ = ১০; // অর্থাৎ চালের ২ নম্বর বস্তায় ১০ কেজি চাল আছে;
বা
chaler_bosta_2 = 10;
চিত্র-: চালের ২ নম্বর বস্তার মধ্যে ১০ কেজি চাল রাখা হয়েছে;
ডালের_পাত্র_১০ = ১৫.৫; // অর্থাৎ ডালের ১০ নম্বর পাত্রে ১৫.৫ কেজি ডাল আছে;
বা
daler_bosta_10 = 15.5;
এখানে,
চিত্র-: ডালের ১০ নম্বর বস্তায় ১৫.৫ কেজি ডাল আছে;
ভ্যারিয়েবলের নাম ডিক্লারেশনের নিয়মকানুন:
ভ্যারিয়েবলের নাম ডিক্লারেশনের আবার কিছু নিয়ম আছে,
:- আমরা চাইলেই ইচ্ছামত ভ্যারিয়েবল নিতে পারি মাগার চাইলেই ইচ্ছামত তার নাম দিতে পারিনা 🙂
:: কেন! আমার ভ্যারিয়েবল আমি যা ইচ্ছা নাম দেব আপনার কি 😕
:- আপনি ইচ্ছামত নাম দিতে পারবেন কিন্তু তার জন্য আপনাকে অবশ্যই কিছু নিয়ম মেইনটেইন করতে হবে
:: কিরকম নিয়ম?
:- এইযে এরকম:
নিয়ম_১: ভ্যারিয়েবলের নাম কেবল মাত্র alphabets, number বা সংখ্যা এবং আন্ডারস্কোর ( _ ) এর সমন্বয়ে রাখতে হবে। চাইলে শুধু alphabets ও ব্যবহার করা যাবে কিন্তু চাইলে শুধু number ব্যবহার করা যাবেনা।
যেমন:number = 100; // number নামের ভ্যারিয়েবলের মধ্যে ১০০ ডাটাটিকে store বা assign করলাম;
number1 = 10; হবে
number_2 = 20; ও হবে
কিন্তু,২ = ২০; হবেনা।
এ আবার কেমন কথা! ২ আর ২০ কখনো সমান হয় নাকি!!
এখানে আরো একটা কথা বলে রাখা ভাল যে, প্রোগ্রামিংয়ের “=” কিন্তু গণিতের “=” বা “সমান” না! প্রোগ্রামিংয়ে সমান বোঝানোর জন্য “সমান সমান” বা “==
” ব্যবহার করা হয় আর “=
” বলতে assign বা store করা বোঝায়।
নিয়ম_২: চালের_পাত্র_১
নিতে পারি কিন্তু ১নং_চালের_পাত্র
নিতে পারিনা, অর্থাৎ ভ্যারিয়েবল ডিক্লারেশনের সময় কোনো নাম্বার বা সংখ্যা বা অংক দিয়ে শুরু করতে পারবনা, যদিও চাইলে আন্ডারস্কোর দিয়ে শুরু করা যায় যেমন _১নং_চালের_পাত্র
, কিন্তু এটা খুব একটা ভাল প্র্যাকটিস না আর দেখতেও সুন্দর লাগেনা (লোকে নাকি বলে আগে তো দর্শনধারী পরে গুণবিচারি 😆 )
যেমন:
chaler_patro_1 | সঠিক; |
chaler_1no_patro | সঠিক; |
1no_chaler_patro | ভুল; |
_chaler_1no_patro | সঠিক কিন্তু সুন্দর না 😃 |
নিয়ম_৩: চালের_পাত্র_১
নিতে পারি কিন্তু চালের;পাত্র#১
বা চালের পাত্র*১
বা চালের_পাত্র.১
নিতে পারিনা, অর্থাৎ নামের মাঝে আন্ডারস্কোর ( _ ) ছাড়া অন্য কোনো স্পেশাল ক্যারেকটার বা সাইন এমনকি কোনো স্পেসও রাখা যাবেনা!
যেমন:
chaler patro1 | ভুল; |
chaler_patro_1 | সঠিক; |
chaler_patro.1 | ভুল; |
chaler@patro-1 | ভুল; |
নিয়ম_৪: কোনো keyword কে ভ্যারিয়েবলের নাম হিসেবে রাখা যাবেনা যেমন int, double, float, bool, char, public, class, private
ইত্যাদি, এরকম আরো অনেক সুন্দর সুন্দর keyword আছে। প্রোগ্রামিং ল্যাংগুয়েজে এঁরা সবাই আলাদা আলাদা অর্থ বহন করে অর্থাৎ এদের সবারই নির্দিষ্ট ভ্যালু বা মূল্য (অমূল্য রতন 😆 ) আছে তাই আমরা এঁদেরকে ভ্যারিয়েবলের নাম হিসেবে ব্যবহার করতে পারবনা।
নোট_১: ভ্যারিয়েবলের নাম ছোটো হাতের অক্ষর দিয়ে শুরু করাটা অধিক গ্রহণযোগ্য;
যেমন:
number1, num1, n1 | perfect; |
chaler_bosta, daler_bosta | perfect; |
chalerBosta, DalerBosta | right but not perfect; |
নোট_২: বাস্তবে আপনি আপনার কানা ছেলের নাম পদ্মলোচন রাখতে পারেন কিন্তু সেটা যেমন তার বৈশিষ্ট্যের সাথে মানানসই না তেমনি আপনার ভ্যারিয়েবলেরও বেমানান নাম দিতে পারেন, চলবে (
😂 ) কিন্তু তার বৈশিষ্টের সাথে মানানসই ও অর্থপূর্ণ নাম দেয়াটাই অধিকতর শ্রেয় ও যুক্তিসংগত।Data Type
এখন আমরা দেখি ডেটা বা ডাটা টাইপ কি জিনিস (এই ডাটা কিন্তু সজনে ডাটা বা শাকের ডাটা না 😆 )
এই ডেটা হল উপাত্ত আর উপাত্ত হল সেই সকল জিনিস যাদেরকে আমরা ভ্যারিয়েবলের মধ্যে রাখি বা assign করি। আর টাইপ হল ধরন বা রকম অর্থাৎ বিভিন্ন টাইপের বা ধরনের ডেটা বা ইনফরমেশনই হল ডেটা টাইপ। সব মাথার উপর দিয়ে গেল! মুশকিল!! আচ্ছা উদাহরণের মাধ্যমে বিষয়টা আরো ক্লিয়ার করা যাক:
আমরা যে উপরে চালের_পাত্র_১
এর মধ্যে এত কষ্ট করে ২০ কেজি চাল রাখলাম, এই মহামান্য ২০ হল ডেটা, ডালের_পাত্র_১০
এর মধ্যে ১৫.৫ কেজি ডাল রেখেছি, এই মহামান্য ১৫.৫ ও হল ডেটা। এখন কথা হল ২০ ও ১৫.৫ এদের চেহারা দেখে মনে হচ্ছে দুজনই স্বজাতীয় (দুজনই বাস্তব সংখ্যা) হলেও গোত্রে ভিন্ন! নিঃসন্দেহে ২০ একটি পূর্ণসংখ্যা এবং ১৫.৫ একটি ভগ্নাংশ বা decimal number । আমরা জানি সকল পূর্ণসংখ্যা (শুন্য সহ সকল ধনাত্নক ও ঋনাত্নক সংখ্যা) হল integer আর সকল ভগ্নাংশ হল fraction যাদের একটা floating point বা ভাসমান বিন্দু 😆 থাকে যাকে আমরা ‘দশমিক বিন্দু‘ নামে চিনি (কেউ কেউ আবার Radix point ও বলে)। তো এই সকল integer, fraction হল ডেটা টাইপ। এখানে মহামান্য ২০ হল integer টাইপের ডেটা তাই ২০ কে, মানে আসলে সকল পূর্ণসংখ্যাকে int ডেটা টাইপের মধ্যে রাখা হয়। fraction বা decimal number হল floating টাইপের ডেটা তাই এদেরকে float ডেটা টাইপের মধ্যে রাখা হয়।
আরো বিভিন্ন রকমের ডেটা টাইপ আছে, যেমন আমার নামের প্রথম অক্ষর “T” হল character টাইপের ডেটা। আসলে character এর চরিত্র হচ্ছে সে অলওয়েজ সিংগেল জিনিসকে পছন্দ করে! তাই সে একবারে কেবলমাত্র একটি অক্ষর বা সাইন বা ডিজিট বা সংখ্যা রাখতে পারে। হ্যাঁ, সংখ্যাকেও character হিসেবে রাখা যায় যেমন char ch = 65;
কিন্তু এখানে ৬৫ আর ৬৫ থাকেনা, A
হয়ে যায়! আবার char ch = 97
; নিলে এই ৯৭ ও আর ৯৭ থাকেনা, a
হয়ে যায়! সাংঘাতিক কথা!! (hmm.. character এর এসব কিচ্ছা কাহিনী পরে আরো জানা যাবে, এখন সামনে আগাই)
এখন দেখি আমার নাম যদি “Omuk” হয় তাহলে সেটা কোন টাইপের ডেটা হবে, তখন সেটা string টাইপের ডেটা হবে। এই string কিন্তু character এরই array বা সজ্জা বা বিন্যাস! একটু খেয়াল করলেই আমরা দেখতে পাবো যে character এর মধ্যে একটা সিংগেল letter বা sign রাখতে পারি আর string এর মধ্যে অনেকগুলো letter রাখতে পারি। অর্থাৎ character এর মধ্যে একটা letter থাকে আর string এর মধ্যে অনেকগুলো letter থাকে, তাহলে string হল character এরই সজ্জা বা বিন্যাস।
আবার, কাউকে “
” এই মহান শপথ করানোর পরেও যদি সে মিথ্যা বলে বা সত্যই বলে তবে তার এই সত্য বা মিথ্যা হবে boolean টাইপের ডেটা।এই সমস্ত ঘটনাবলিকে কোডের মধ্যে এভাবে লিখতে হয়:
int chaler_bosta_1 = 20;
এখানে,
float daler_bosta_10 = 15.5; //
এখানেও তাই, 15.5 floating টাইপের ডেটাকে daler_bosta_10 ভ্যারিয়েবলের মধ্যে রাখা হয়েছে।
double daler_bosta_11 = 1105.50995; //
double টা আবার কি জিনিস!! বুঝলাম না তোহ! (কিছুক্ষন পরেই সবিস্তারে বুঝিয়া লইতেছি)
char ch1 = 'T'; //
character টাইপের ডেটা রাখার জন্য single quotation mark (‘ ‘) ব্যবহার করতে হয়।
char ch2 = '9';
char ch3 = 57; //
এখানে 57 লিখলে কি হয় আর ‘9′ লিখলে কি হয় আর 9 লিখলেই বা কি হয় তা প্রোগ্রামারদের স্ব স্ব অনুসন্ধানের উপর ছেড়ে দেয়া হল।
char ch4 = 65; //
এখানেও তাই 65 লিখলে কি হয় আর ‘65′ লিখলে কি হয় অথবা “65” লিখলেই বা কি হয় তা একটু নিজেরা মাতবরি করে চেক করে দেখি।😃 (কিউরিওসিটি বাড়াতে হবে BOSS)
string name = "Omuk"; //
string টাইপের ডেটা রাখার জন্য double quotation mark (” “) ব্যবহার করতে হয়।string full_name = "Omuk Jon!";
এখন যদি, int chaler_bosta_1 = 20;
নেয়ার পরে আবার chaler_bosta_1
থেকে ২/৩ কেজি চাল উঠিয়ে নিই বা ওর মধ্যে আরো ২/৩ কেজি চাল যোগ করি তাইলে কি হবে। অথবা কালের বিবর্তনে যদি চালের মূল্যের হ্রাস-বৃদ্ধির কারণে ১বস্তা চালের দাম ২০ টাকা থেকে ২২ টাকায় উন্নীত হয়! (যদিও বাস্তবে ২০/২২ টাকায় এক বস্তা চাল তো দূর কি বাত কল্পনায়ও পাওয়া যায়না অথবা পাওয়া গেলেও ওই বস্তাটাকে এতটাই ছোট হতে হবে যেন তাতে আধা কেজি বা তার কম পরিমান চাল ধরে) তাহলেই বা কি হবে। যেমন,
int chaler_bosta_1 = 20;
chaler_bosta_1 = 22;
প্রথমে chaler_bosta_1 এর মধ্যে ২০ রেখে তারপর আবার তার মধ্যে ২২ রাখলাম এক্ষেত্রে কম্পিউটার বা কম্পাইলার ২২ কে ফাইনাল ডেটা হিসেবে কাউন্ট করবে। অর্থাৎ কোনো ভ্যারিয়েবলের মধ্যে একটা ডেটা রেখে (অবশ্যই একই টাইপের ডেটা হতে হবে) পরে আবার অন্য ডেটা রাখলে কম্পাইলার সর্বশেষ ডেটা টাকেই ওই ভ্যারিয়েবলের ডেটা হিসেবে গননা করে। এজন্যই এর নাম ভ্যারিয়েবল অর্থাৎ এর মান vary করে বা পরিবর্তিত হতে পারে। পরবর্তি পর্বে আমরা কোডের মধ্যে এসব ইম্প্লিমেন্ট করে দেখবো যে কিভাবে কি হয়।
তো এই হল আমাদের কঠিন(integer), তরল(floating), বায়বীয়(বাকি গুলো 😄 ) জিনিস যাদেরকে আমরা ভ্যারিয়েবলের মধ্যে রাখতে পারি। (এটা একান্তই কর্তৃপক্ষের নিজস্ব মতামত 😆 )
পরের পোষ্টে ডেটা টাইপ নিয়ে ডিটেইলস আলোচনা হবে ইনশাল্লাহ।
Very very enjoyable and mind-blowing