ভ্যারিয়েবল বা চলক
ভ্যারিয়েবল হল নোয়াখালীর ইংরেজী ভাষার শব্দ, যাকে শুদ্ধ বাংলায় বলা হয় চলক। আর পরিচিতির সময় আমি ব্যাংক নিয়ে কথা বলেছিলাম সেটা হয়তো সবারই মনে আছে মনে না থাকলেও সমস্যা নাই। ওইখানে বলেছিলাম সুদখোরদের কথা, মনে করি কাজল সাহেব প্রতিমাসে ১০০ টাকা সুদ খায় আর অন্যদিকে মমতাজ আফা খায় ২০০ টাকা। যদি দুই সুদখোরের একসাথে বিয়া দেওয়া হয়, তাহলে তাদের সর্বমোট সম্পদের পরিমাণ কত দাঁড়াবে? সহজ উত্তর দুইটাকে যোগ করে দিলেই হবে।
Kajol = 100
Momotaz = 200
Total = Kajol + Momotaz = 300
এইখানে কাজল আর মমতাজ হইলো চলক বা ভ্যারিয়েবল। মমতাজ আফার সুদ খাওয়ার চাহিদা বেশী তো তাই পরের মাস থেকে সে সুদ খাবে মাসে ৫০০ করে। এখানে তাহলে মমতাজ আফার পরিমাণটা বেড়ে গেলো। অন্য দিকে কাজল সাহেব এর যথেষ্ট বয়স হয়েছে নিয়মিত নামায-রোজা করবে বলে মনস্থির করেছে। তাই এখন থেকে সে ৫০ টাকা করে সুদ খাবে। তার সুদের চাহিদা কমে গেলো। অর্থাৎ এই আলোচনার মাধ্যমে বলতে পারি ভ্যারিয়েবল বা চলকের মান পরিবর্তনশীল। এইবার একটু খানি কোডে গেলে ব্যাপারটা মাম পানির মত পরিষ্কার হবে।
> Kajol <- 100
> Momotaz <- 200
> Total <- Kajol + Momotaz
> print(Total)
[1] 300
> Kajol <- 50
> Momotaz <- 500
> Total <- Kajol + Momotaz
> print(Total)
[1] 550
এখানে <- দেখার পরে অনেকের হয়তো গলা শুকিয়ে গেছে মাম পানি আছে না। যাইহোক আমরা অন্যান্য প্রোগ্রামিং ভাষা যদি পারি বা বুঝি সেক্ষেত্রে আমরা হয়তো দেখেছি = চিহ্ন ব্যবহার করতে, কিন্তু আর প্রোগ্রামিং এ = এর পরিবর্তে <- এইটা ব্যবহার করে। তবে = চিহ্ন দিলেও কোড কাজ করবে। ইকুয়েলটা (=) হল এসাইনমেন্ট অপারেটর। সামনে অপারেটর অধ্যায়ে এর ব্যাপারে জানবো। মোটামুটি সব ক্ষেত্রে কোড কাজ করলেও কন্ডিশনাল লজিক এবং ফাংশনের ক্ষেত্রে = কাজ করবে না। কন্ডিশনাল লজিক এবং ফাংশন অধ্যায়ে এ ব্যাপারে বিষদ ভাবে জানবো। তাই <- এইভাবে লিখে আমাদের অভ্যাস করা শরীর এবং স্বাস্থ্যের জন্য ভালো এবং এটা আর এর জন্মগত সমস্যা তাই মেনে নিতে হবে রাজনীতি করার কিছুই নাই। ব্যাপারটা মনে রাখার জন্যে এইভাবে পড়লে হবে 50 টাকা Kalam এর ভিতর ঢুকিয়ে দাও Kalam <- 50, ঢুকানোর জন্যে <- এর চাইতে ভালো চিহ্ন আর হয় না। উপরে আমরা দেখলাম একবার কাজল ১০০ করে সুদ খায় তারপর ৫০ করে খায় তার ভ্যালু বা মান পরিবর্তন হচ্ছে অপরদিকে মমতাজ আফারও একই দশা তার ভ্যালু বা মানও পরিবর্তন হচ্ছে। তো আমরা কি শিখলাম ভ্যারিয়েবল বা চলকের মান্ পরিবর্তনশীল। ব্যাপারটা আংশিক সত্য। এর অন্যতম একটি উদাহরণ দেই এক সৎ ভদ্র লোক ব্যাংকে ১০ লাখ টাকা ১০ বছরের জন্যে ডিপোজিট করে রাখছে। ১০ বছরের ভিতরে টাকা তুলতেও পারবে না বা জমাও দিতে পারবে না যেই একাউণ্টে সে ডিপোজিট করেছে সেই একাউন্টের কথা বলছি। তো আমরা তার তথ্য তো রাখবো কোথাও না কোথাও। সে যদি মনের ভুলে টাকা তুলতে যায় এটিএমে তাহলে তাকে টাকা তুলার অনুমতি দিতে পারে না। তাই নয় কি?
তো সেই জিনিসটা কিভাবে করে আমি শুধু দেখিয়ে দিচ্ছি, যেহেতু আংশিক সত্য মিথ্যার কথা উঠেই এসেছে। ঘুরিয়ে পিছিয়ে ছোট একটা কাজ করলে যে ভ্যারিয়েবলে ১০ লাখ টাকা রাখবেন সেটা আর পরিবর্তন করতে পারবেন না। তবে হ্যাঁ ঐ ভ্যারিবয়েবল দ্বারা অন্য যেকোন ভ্যারিয়েবল পরিবর্তন করতে পারবেন। না দেখলে বুঝবেন না।
> Kalam <- 1000000
> lockBinding('Kalam', globalenv())
> MonerVuleTakaTulbo <- 500000
> Kalam <- Kalam - MonerVuleTakaTulbo
Error: cannot change value of locked binding for 'Kalam'
আমাকে আর পোগ্রামিং একটা এরর দিয়ে দিয়েছে কখনই লক বাইন্ডিং এর ভ্যালু পরিবর্তন মনের ভুলেও করা যাবে না, এর কারন এটা আমরা ফিক্সড করে দিয়েছি। এখানে lockBinding('Kalam', globalenv()) এটা আসলে কি সেটা নিয়ে মাথার ঘাম পায়ে ফেলানোর দরকার নেই। এটা নিয়ে সামনে আরও কুকাম দেখবো।এখন জালাল সাহেব বললো আমার একাউন্টে ২০ লাখ টাকা আছে। আমার চাইতে কালামের কত টাকা বেশী বা কম। সেটা কিভাবে করা যায়। সহজ হিসাব বিয়োগ করলেই হয়।
> Jalal <- 2000000
> Borolox <- Jalal - Kalam
> print (Borolox)
[1] 1e+06
সুন্দর করে ব্যবধানটা দেখিয়ে দিলো। এইজন্যেই আগে বলেছিলাম স্ট্যাটিক ভ্যারিয়েবল দিয়ে অন্য নন-স্ট্যাটিক ভ্যারিবেল পরিবর্তন করা যায়। কিন্তু স্ট্যাটিক ভ্যারিয়েবল পরিবর্তন করা যায় না।এখানে Kalam স্ট্যাটিক আর Jalal হল নন-স্ট্যাটিক। অর্থাৎ Jalal পরিবর্তনশীল Kalam পরিবর্তনশীল না।
ভ্যারিয়েবল এসাইন করার সংবিধান
মনে যা ইচ্ছে সেভাবে লিখলে ভ্যারিয়েবল হবে না। এর কিছু সুনির্দিষ্ট আইন কানুন নিয়ম-নীতি আছে দুর্নীতি করা যাবে না। যেমনঃ
- শুরুতে নাম্বার ডিজিট( 0, 1, 2, 3, 4, 5...... ) দিয়ে ভ্যারিয়েবল এসাইন করতে পারবেন না। যেমনঃ 0 <- 15, 0a -< 10 তবে হ্যাঁ A-Z কিংবা a-z এর যেকোন এলপাবেট ব্যবহার করে তারপরে ডিজিট দিতে পারেন। যেমনঃ Malek1 <- 10, Malek2 <- 'Bangladesh', malek1_2 <- 15 চাইলে Mal1k দিয়েও এসাইন করতে পারেন।
- তবে শুধু ডট চিহ্ন দিয়ে ভ্যারিয়েবল এসাইন করতে পারবেন। যেমনঃ .<- 15
(
! @ # $ % ^ & * ( ) - _ + [ ] ; ' ' | \ { } ? > < =
) এই সব শুরুতে দেওয়া যাবে না, দিলে এরর খাবো> @ <- 5
Error: unexpected '@' in "@"
তবে A-Z বা a-z এর পরেও এই সিম্বল গুলা দিলেও একই এরর আসবে। এখান থেকে শুধু আন্ডারস্কোরটা (_) কাজে লাগানো যাবে। যেমনঃ Kalam_ <- 10, Ka_la_m <- 20আর প্রোগ্রামিং এর কিছু রিজার্ভ কিওয়ার্ড আছে ওইগুলা দিয়েও আপনি ভ্যারিয়েবল এসাইন করতে পারবেন না। আর প্রোগ্রামিং এ কীওয়ার্ড হলো সংরক্ষিত বা reserved শব্দ যা সিনট্যাক্স এর অংশবিশেষ। নিচে ছক আকারে রিসার্ভ কিওয়ার্ড গুলা দেওয়া হল। আপাতত চোখ ভুলিয়েই নিলেই চলবে, দেখতে দেখতে এক সময় পুরো ব্যাপারগুলা স্মৃতির পাতায় ভেসে বেড়াবে।
কি-ওয়ার্ড | কি-ওয়ার্ড | কি-ওয়ার্ড | কি-ওয়ার্ড |
---|---|---|---|
if | else | repeat | for |
in | next | while | function |
TRUE | FALSE | NULL | break |
Inf | NA | NaN | NA_integer_ |
NA_real_ | NA_complex_ | NA_character_ | ... |
..1 | ..2 |
দুই চারটা ফাঁকা না থাকলে পড়তে মন চায় না। এত কষ্ট করে মনে না রেখে বা কষ্ট করে গুগল মামারে না গুতাইয়া সহজেই খুঁজে পাবেন শুধু আর প্রোগ্রামিং এ যেয়ে টাইপ করুন ?reserved এর পর দেখুন ঘুষ্টি সব বাহির করে দিবে।
Reserved package:base R Documentation
Reserved Words in R
Description:
The reserved words in R's parser are
‘if’ ‘else’ ‘repeat’ ‘while’ ‘function’ ‘for’ ‘in’ ‘next’ ‘break’
‘TRUE’ ‘FALSE’ ‘NULL’ ‘Inf’ ‘NaN’ ‘NA’ ‘NA_integer_’ ‘NA_real_’
‘NA_complex_’ ‘NA_character_’
‘...’ and ‘..1’, ‘..2’ etc, which are used to refer to arguments
passed down from a calling function. See the ‘Introduction to R’
manual for usage of these syntactic elements, and dotsMethods for
their use in formal methods.
Details:
Reserved words outside quotes are always parsed to be references
to the objects linked to in the ‘Description’, and hence they are
not allowed as syntactic names (see ‘make.names’). They *are*
allowed as non-syntactic names, e.g. inside backtick quotes.
কেইস সেন্সিটিভ
আর প্রোগ্রামিং একটি কেইস সেন্সিটিভ ভাষা। এর মানে বড় হাতের A-Z এবং ছোট হাতের a-z একই জিনিস না। আলাদা আলাদা উপাদানে তিলে তিলে বাসা বেঁধেছে তাহারা। একটু কোডের ভাষায় ট্রাই করি দেখি তাদের বাসা ভাঙ্গা যায় কিনা!
> A <- 10
> a <- 5
> A
[1] 10
> a
[1] 5
পারলাম না বড় শক্ত বাসা ওই যে বললাম তিলে তিলে ঘড়েছে বাসা। আন্দোলন করে দল ঘঠন করলে লাভ হবে না। মেনে নিতে শিখুন অসহায়ের মত।