হিজি বিজ্ বিজ্ বলল, “একজনের মাথার ব্যারাম ছিল, সে সব জিনিসের নামকরণ করত। তার জুতোর নাম ছিল অবিমৃষ্যকারিতা, তার ছাতার নাম ছিল প্রত্যুত্পন্নমতিত্ব, তার গাড়ুর নাম ছিল পরমকল্যাণবরেষু- কিন্তু যেই তার বাড়ির নাম দিয়েছে কিংকর্তব্যবিমূঢ় অমনি ভূমিকম্প হয়ে বাড়িটাড়ি সব পড়ে গিয়েছে। হোঃ হোঃ হোঃ হো---।”
সুকুমার রায়

৪ আমার নাম ভ্যারিয়েবল, আমি একটা কবিতা বলবো

এবার চলো আমরা তোমার লেখা প্রথম প্রোগ্রামটা অল্পিকটু পাল্টাই। ধরো আমরা একটা হাসিখুশি প্রোগ্রাম লিখছি, যেটা করবে কি - যখনই আমাদের বাসায় যখন একটা নতুন মানুষ আসবে, তাকে নাম ধরে হ্যালো বলবে। ধরো হুকুশ পাকুশ ঢুকলে সে বলবে, “হ্যালো হুকুশ পাকুশ”, ফকির ঢুকলে বলবে, “হ্যালো ফকির”। এখানে নামটা যেহেতু পাল্টাচ্ছে, সেজন্য নামটাকে আমরা বলি ভ্যারিয়েবল (variable)।

এখন তুমি যখনই name ভ্যারিয়েবলটাকে পাল্টাবে আমাদের প্রোগ্রামটা সেই নতুন মানুষটাকে হ্যালো বলবে। নামটা পাল্টেই দেখো না কি হয়! এখানে সমান চিহ্ণ দিয়ে আমরা বুঝাচ্ছি যে সমান চিহ্ণের ডান পাশের ডাটাকে আমরা বাম পাশের ভ্যারিয়েবলটাতে রাখবো। এই কাজটাকে বলে ইনিশিয়ালাইজ (initialize) করা।

এই ভ্যারিয়েবলগুলোর নাম দেয়া এক বিশাল ঝক্কির ব্যাপার। কারণ এমনভাবে ওদের নাম দিতে হয়, যাতে কেউ পড়লেই বুঝতে পারে ওই ভ্যারিয়েবলে যেই ডাটাটুকু রাখবো, সেটার কাজ কি। যেমন ধরো আমি যদি আগের প্রোগ্রামটা পাল্টে যদি নিচের মত লিখতাম তাহলে প্রোগ্রামটা একই কাজ করতো। কিন্তু যে মানুষটা পড়ে বুঝতে চাইবে প্রোগ্রামটা কি করছে সে বেচারা হয়তো মাথার চুল ছিঁড়ে ফেলতো বুঝতে the cake is a lie এর মানে কি হতে পারে?

Love is real, unless declared an integer.
Anonymous

৪.১ ভ্যারিয়েবল এবং তার নাতিপুতি

প্রোগ্রামাররা যখন ডাটা নিয়ে কাজ করে, তখন একেকটা ডাটা একেকভাবে রাখতে হয়ে কম্পিউটারের মেমরিতে। যেমন ধরো, একটা real number (যেমন $3.1416$) কে নিয়ে আমি যখন কাজ করবো - তখন আমার দশমিকের পর সংখ্যাগুলো মনে রাখতে হচ্ছে অনেকগুলো ঘর পর্যন্ত। আবার দেখো যখন integer (পূর্ণ সংখ্যা - $1, 2, 3, 4$) নিয়ে কাজ করা লাগে, তখন আমাদের দশমিকের পর কিছুই মনে রাখতে হচ্ছে না। সাধারণত বেশিরভাগ প্রোগ্রামিং ভাষায় কম্পিউটারকে বলে দিতে হয় আমরা যেই ভ্যারিয়েবলটা ব্যবহার করবো, সেটা কি ধরণের ডাটা রাখবে।

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

তুমি যদি কোন ডাটার টাইপ জানতে চাও এভাবে লিখলেই ডাটার টাইপ বের হয়ে আসবে।

৪.২ লিস্ট

ধরো আমি ফলের দোকানের জন্য একটা প্রোগ্রাম লিখছি। সেখানে ডাটা হিসেবে পাঁচশটা ফলের নাম রাখতে হবে আমার। এখন বসে বসে পাঁচশটা আলাদা আলাদা ভ্যারিয়েবলের নাম লিখতে গেলে আমার কানের পোকা বের হয়ে যাবে।

তো আমরা করি কি একটা লিস্ট ডিক্লেয়ার করি। সেই লিস্টির সবাই হচ্ছে একটা করে ফল। যেমন পাঁচটা ফলের জন্য লিস্টটা হবে এমন।

এই জিনিসটাকে পাইথনে লিস্ট বলে, কিন্তু অন্য ভাষাগুলোতে (যেমন সি++, জাভাতে) বলে অ্যারে। আমরা যদি প্রথম ভ্যারিয়বলটাকে প্রিন্ট করতে চাই আমাদের লিখতে হবে।

দ্বিতীয়টার জন্য fruits[1]। এরকম করে পাঁচ নাম্বারটার জন্য fruits[4]। অনেকটা এরকম ভাবে চিন্তা করো, তুমি একটা লিফটে করে ছ'তালায় যাবা কিন্তু সবাই ছ'তালাকে বলে fifth floor কারণ একতালা কে ০ তালা ধরা হয়। যেমন নিচের কোডটাতে আমরা প্রথম আর শেষ ফলের নামকে প্রিন্ট করছি।

উপরে হ্যাশ চিহ্ণ(#) টা দেখে অবাক হচ্ছো না হুকুশ পাকুশ? আমরা প্রোগ্রামে মাঝে মাঝে গুটিগুটি করে ছোট্ট কিছু কথা লিখে রাখি স্বাভাবিক ভাষায় যেগুলো কিন্তু কোডের অংশ নয় - কিন্তু সেগুলো সাহায্য করে বুঝতে আমরা কোডটাতে আসলে কি করছি। পাইথনে ওরকম গুটিশুটি মন্তব্য লেখার জন্য '#' (হ্যাশ) দিয়ে শুরু করতে হয়। হ্যাশের পর সবকিছুকে কম্পাইলার পাত্তা দেয় না, বুঝে নেয় ওটা হচ্ছে একটা কমেন্ট - ওটা প্রোগ্রামার ওর বোঝার জন্য লিখেনি, সেটা লেখা হচ্ছে অন্য প্রোগ্রামারদের বুঝতে সুবিধার জন্য।

৪.৩ ভ্যারিয়েবল এর আসল ব্যবহার

ভ্যারিয়েবলের আসল ব্যবহার হচ্ছে যখন আমরা জানি আমাদের কি ধরণের ডাটা নিয়ে কাজ করতে হবে, কিন্তু জানি না ডাটা ঠিক কত হবে। যেমন ধরো আমি তোমাকে যদি বলি একটা ত্রিভূজের ক্ষেত্রফল (area) বের করো। তুমি আমাকে জিজ্ঞেস করবে কি, ত্রিভূজের ভূমি আর উচ্চতা কত, তাই না? ত্রিভূজের ক্ষেত্রফল হচ্ছে ভূমি উচ্চতার গুণফলকে দুই দিয়ে ভাগ করলে যেটা থাকবে সেটা, তাই না?

তো দেখো, এখানে ভূমি আর উচ্চতা হচ্ছে ভ্যারিয়েবল। এই দুইটা যেভাবে ইচ্ছা পাল্টাতে পারে। কিন্তু আমাদের কাজটা একই থাকবে। তো এই প্রোগ্রামটা হবে এরকম -

তুমি এখন base আর height এর মান পাল্টাও - দেখো প্রোগ্রামটা তখনো তোমাকে ঠিকই ক্ষেত্রফলটা বের করে দিচ্ছে।

আমি যখন কলেজে পড়তাম, তখন আমাদের ফাংশনের ছবি আঁকতে হতো, সেগুলো খুব বোরিং হতো জানো! সেগুলো থাকতো এরকম যে আমাকে $y = 2x^3 + 6x^2 + 34x - 345$ এর মান বের করতে হবে কিছু নির্দিষ্ট $x$ এর মানের জন্য। এখন সমস্যা হচ্ছে ক্যালকুলেটরে এই জিনিস বারবার টিপাটিপি করতে গেলে আবারও তোমার কানের পোকা বের হয়ে যাবে।

এই জিনিসটা প্রোগ্রামিং করে খুব সহজে করা যায়। ঠিক এই কাজটা এই প্রোগ্রামটা করতে পারে। তোমার শুধু $x$ এর মান পাল্টে দেবে, আর প্রোগ্রামটা তোমার জন্য খুশিমনে হিসেবনিকেশ করে তোমাকে মান বের করে দেবে। কি মজা না হুকুশ পাকুশ? কেও করবে অমন? বলো, বলো, বলো?

এই কোডটা এভাবেও লেখা যায়। x**3 মানে হচ্ছে $x^3$।

৪.৪ ডিকশনারি

পাইথনে খুব কাজের একটা ডাটা টাইপ হচ্ছে ডিকশনারি। ধরো আমার একটা ফোনবুক টাইপের প্রোগ্রাম লাগবে। আমি ফোনবুককে যদি আমার বন্ধুর নামটা বলি, সে আমাকে ওর নাম্বারটা বলবে। এটা পাইথনে লেখা যায় এই ভাবে -