প্রোগ্রামিং উইথ রুবিঃ ইট সুড়কি যোগাড়যন্ত্র
রুবি হচ্ছে কম্পিউটারের ইংরেজী। ৫-৬ দিন নিয়মিত রুবি প্র্যাকটিস করলে তারপরে রুবিতে প্রোগ্রাম লেখায় সময় মনে হবে আপনি সেকেন্ড ল্যাংগুয়েজ ব্যবহার করতেছেন। খুবই সহজ এবং এক্সপ্রেসিভ।
যাইহোক, প্রোগ্রামিং শিখবেন ভালো কথা। তবে শুরুর আগে দুটো কথা বলে দেই। শেখার সময় কোন কোড মুখস্থ করার ট্রাই করবেন না। কিছু মনে না থাকলে নাই, রেফারেন্স ঘেটে যাবেন। প্রোগ্রামিং জিনিসটা ধীরে ধীরে আপনার সেকেন্ড ন্যাচারে পরিণত হবে। যতক্ষণ সেটা না হচ্ছে ততক্ষণ হাতের আশেপাশে রেফারেন্স রাখবেন, সাথে ধুমসে প্র্যাকটিস করবেন। যত বেশি প্র্যাকটিস করবেন ততবেশি এগিয়ে যাবেন।
প্রোগ্রামিং মুখস্থ করার ট্রাই করলে আপনার বাড়িতে আগুন লেগে যেতে পারে, আপনার গার্লফ্রেন্ড আরেকজনের সাথে ভেগে যেতে পারে কিংবা আপনার বিড়ালটা বিছানায় হাগু করা শুরু করে দিতে পারে। অবশ্যই আমি এসব কোনটার জন্যই দায়ী থাকবো না, আমার সতর্ক করে দেয়া দরকার, আগেই করে দিয়েছি!
আচ্ছা মনে আছে, গতদিন আমি খুব গুরুত্তপূর্ণ একাট কমান্ডের কথা বলেছিলাম? ঠিক ধরেছেন, আমি [inline-code]irb[/inline-code] এর কথা বলতেছি। ওকে, একটা কমান্ড প্রম্পটে [inline-code]irb[/inline-code] চালু করে ফেলুন তো দেখি। না পারলে আগের পর্বের পোস্ট ভালো করে পড়ে আসুন! আর পারলে চলুন আগাই।
[inline-code]5 + 5[/inline-code] লিখে বড় এন্টার কী টা ধাপ করে চেপে দিন! দেখেন তো কি আউটপুট দেয়। আমার এরকম আসলোঃ
[code type=ruby]2.2.1 :001 > 5 + 5
=> 10
2.2.1 :002 >[/code]
ওয়াও, আপনি দেখি আপনার প্রথম রুবি কোড লিখে ফেলেছেন। এই নেন চকোলেট, থুক্কু খুশিতে আমি নিজেই চকোলেট খায়ালাইছি। তো আরও দুয়েকটা নাম্বার দিয়ে ট্রাই করে দেখেন কি হয়। প্রোগ্রামিং শেখার মূল কথা হচ্ছে কিউরিসিটি। আমি বলার আগেই দুয়েকবার ট্রাই করে ফেলবেন। ভয় কি, সমস্যা হলে আমি তো আছিই! নরমাল এরিথমেটিক সব সাইনই রুবি সাপোর্ট করে।
[code type=ruby]2.2.1 :002 > 6 * 2
=> 12
2.2.1 :003 > 9-4
=> 5
2.2.1 :004 > 7/2
=> 3[/code]
ভাই থামেন। ৭ রে ২ দিয়া ভাগ করলে ৩ হয় ক্যামনে? ৩.৫ হহওয়ার কথা না?
ধইরালাইছেন দেখি। আচ্ছা দাড়ান, কচ্ছি! রুবি এর হিসাবে ৭ হচ্ছে Integer নাম্বার, ২ ও Integer (সংক্ষেপে int) নাম্বার। অন্যদিকে ৩.৫ হচ্ছে Flooting তথা দশমিক নাম্বার। রুবির সোজা কথা, একটা Integer কে আরেকটা Integer কে ভাগ দিলে আমিও একটা Integer নাম্বারই দিবো! এখানে এই দেয়াটাকে প্রোগ্রামিংয়ের ভাষায় retern করা বলে, দেখছেন আমি আগেই বলছিলাম না, রুবি হচ্ছে প্রোগ্রামিংয়ের ইংরেজী! আচ্ছা যাই হোক, আগের রেজাল্টটা ঠিক করার উপায় কি? জি, আবার ঠিকমতই ধরে ফেলেছেনঃ
[code type=ruby]2.2.1 :006 > 7.0 / 2
=> 3.5[/code]
যে কোন একটা নাম্বারকে Flooting তথা দশমিক নাম্বার করে দেন, হয়ে গেলো ঝামেলা শেষ। তো আপনার দৈনন্দিন ব্যবহারের জন্য আরেকটা ক্যালকুলেটর পেয়ে গেলেন। বন্ধুবান্ধবের মাঝে কালো স্ক্রীণের ক্যালকুলেটর বের করে চাইলে একটু ভাব নিতেই পারেন! এবার বিশাল একটা সংখ্যার ভাগশেষ বের করে ফেলুন তাহলেঃ
[code type=ruby]2.2.1 :008 > 5287257257425 % 25425
=> 9475[/code]
গুড জব, তালিয়া!
আচ্ছা, আপনি কিন্তু খুব সহজেই আমাদের এই ছোট্ট ক্যালকুলেটর দিয়ে দুটো নাম্বার কম্পেয়ার করে ফেলতে পারবেন।
[code type=ruby]2.2.1 :009 > 5 > 2
=> true
2.2.1 :010 > 5 > 6
=> false
2.2.1 :011 > 5 == 5
=> true[/code]
এবার রুবি আপনাকে [inline-code]true/false[/inline-code] ফেরত দিচ্ছে, খেয়াল করেছেন? সিম্পল ইংলিশ, ৫ কি ২ এর চেয়ে বড়? জি। ৫ কি ৬ এর চেয়ে বড়? না। সিম্পল!
তো এই [inline-code]true[/inline-code] আর false এর একটা সুন্দর নাম আছে। প্রোগ্রামাররা একে আদর করে Boolean (সংক্ষেপে bool) বলে ডাকে। তো এর পরে কেউ যদি বলে এই জিনিস একটা bool ভ্যালু রিটার্ন করে। তাহলে সিম্পলি বুঝে নিবেন যে একটা [inline-code]true[/inline-code] বা [inline-code]false[/inline-code] আসতেছে, আর কিচ্ছু না!
আচ্ছা আপনি লাস্টের লাইনটা খেয়াল করেছেন? আমরা দুইটা সংখ্যা সমান কিনা তা চেক করার জন্য [inline-code]==[/inline-code] দুইটা ইকুয়াল সাইন ব্যবহার করেছি। নরমাল ম্যাথে আপনি হয়তো একটা ব্যবহার করেন। রুবি দুইটা জিনিস সমান কিনা এটা চেক করার জন্য ডাবল ইকুয়ালই ব্যবহার করে। একটা ইকুয়াল সাইনের আলাদা একটা ব্যবহার আছে, সেটা আমি একটু পড়ে দেখাচ্ছি। আর দুইটা সমান নাম্বার চেক করার ব্যাপারটা চাইলেই কিন্তু একটু উল্টে দেয়া যায় সহজেই! এজন্য একটা আশ্চর্যবোধক চিহ্ণ ব্যবহার করা হয়। নিচের উদাহরণগুলো দেখলেই পরিষ্কার হয়ে যাবেঃ
[code type=ruby]5 != 6
=> true[/code]
আপনি বলতেছেন ৫ আর ৬ সমান না, রুবি ও আপনার সাথে একমত প্রকাশ করতেছে।
অনেক হইছে সংখ্যা নিয়ে, চলুন এবার আমরা একটু A B C D নিয়ে গুতাগুতি করি! আপনারা কেউ কেউ হয়তো এতক্ষণে a লিখে এন্টারও চেপে দিয়েছেন এবং রুবি আপনাকে প্র্যাঙ্ক করার জন্য কি সব হাবিজাবি লিখে ফেরত পাঠিয়ে দিয়েছে। ব্যাপারনা, খেলার সাথী, একটু আধটু এরাম করতেই পারে। একচুয়ালী হইছে কি, নরমাল রুবিকে যদি A বা B বুঝাতে চান তাহলে ওটাকে একটু দুইপাশে [inline-code]/'[/inline-code] কোটেশন দিয়ে মুড়ে দিতে হবে। সেটা সিংগেল বা ডাবল কোটেশন যে কোনটা হতে পারে, পুরোটাই আপনার ইচ্ছা।
Hello Ruby
[code type=ruby]2.2.1 :016 >
Hello Ruby
=>
My name is Babar
2.2.1 :017 >
My name is Babar
=>
আমার নাম বাবর
2.2.1 :018 >
আমার নাম বাবর
=>[/code]
HabiJabi
আরেহ, রুবি দেখি বাংলাও বুঝে! সাবাশ। এইরকম কোটেশন দিয়ে হাবিজাবি A B C D বা বাংলা লেখাকে কি বলে জানেন? আপনি কি বলেন, সেটা জানি না, বাট আমি এইটারে String (সংক্ষেপে str) বলে ডাকি। String এ শুধু A B C D ই না, আপনার কীবোর্ডে যত সাইন আছে, মোটামুটি সবই ঢুকিয়ে দেয়া যায়! খেয়াল করে দেখছেন, প্রোগ্রামররা সবকিছুরই একটা সুন্দর নাম বের করে রাখছে, তার আবার একটা করে সংক্ষেপও আছে! ভাবজ, বুঝতে হবে!
আপনি ম্যাথের দুই একটা অপরেটর স্ট্রিংয়ের সাথেও ব্যবহার করতে পারেন।
[code type=ruby]2.2.1 :022 >+
Abaro Habijabi
HabiJabiAbaro Habijabi
=>
HabiJabi
2.2.1 :023 >* 5
HabiJabiHabiJabiHabiJabiHabiJabiHabiJabi
=>[/code]
I will not do it again
প্রথমটা ব্যবহার করা হইছে দুইটা String কে একসাথে করার জন্য। পরেরটা হলো একটা স্ট্রিং কে ৫ বার রিপিট করার জন্য। তো, যারা বাচ্চা আছে এখনথেকে যদি ক্লাসের ম্যাম কান ধরে বলে বলে, এক হাজার বার লেখো,তাহলে কি করা যেতে পারে?
I will not do it again" * 1000[/code]
[code type=ruby]2.2.1 :025 >
সেই মজা। আমি অবশ্য আউটপুটটা দিলাম না, বিশাল আউটপুট হয়ে যাবে!
মেলা খেলাধুলা হইছে, আসেন, আমি দুইটা গোপন কথা কই! কান পাতেন মিয়া, গোপন কথা কেউ এমনে কয় নাকি! এইযে লাইনগুলা দেখতেছেন না, বিভিন্ন সংখ্যা দিয়ে বানানো বা স্ট্রিং দিয়ে বানানো? প্রোগ্রামাররা না এইগুলারে লাইন কয় না, তারা এইগুলারে Statement আর নাইলে Expression বলে ডাকে! আমরাও এরথেকে আর লাইন বলবো না, Statement বা Expression বলে ডাকবো, ঠিকাছে?
আচ্ছা চলেন, আজকের দিনের কাহিনী শেষ করি। তার আগে একটা জিনিস বাকি আছে। আমি আপনাদের বলছিলাম, একটা ইকুয়াল সাইন কি কাজে ব্যবহার হয় রুবিতে সেটা বলবো। মনে আছে, ছোটবেলায় ম্যাথ করতেন, ধরি x = 5. জি ভাইজান, আজকে আরেকবার আপনি ঠিক ধরেছেন, আমরা একটা ইকুয়াল সাইন ব্যবহার করি পরিবর্তনশীল কোনকিছু মনে রাখার জন্য অনেকটা রেফারেন্স রাখার মত। তবে সুবিধা হচ্ছে মনে রাখার জিনিসটা সংখ্যা বা স্ট্রিং যে কোনটাই হতে পারে!
[code type=ruby]2.2.1 :031 > x = 5
=> 5
2.2.1 :032 > y = Hello Ruby
=> Hello Ruby
[/code]
এখানে বাম দিকেরটা (x বা y) কে বলা হয় Variable (সংক্ষেপে var), আর পুরো এক্সপ্রেশনটাকে বলা হয় Assignment Expression, যেহেতু আমরা একটা ভ্যালু (স্ট্রিং বা সংখ্যা) এসাইন করতেছি একটা Variable এ। ভ্যারিয়েব লেখার কিছু নিয়ম কানুন আছে। প্রথম দেখায় এটাকে স্ট্রিংয়ের মত মনে হলেও, এর কিন্তু কোন কোটেশন নেই। আর দুই একটা ছোটখাটো নিয়ম হলো, ভ্যারিয়েবল সংখ্যা দিয়ে শুরু হতে পারবে না, সবসময় একটা অক্ষর দিয়ে শুরু হতে হবে। নাম বড় হলে আন্ডারস্কোর [inline-code][/inline-code] ব্যবহার করতে পারবেন, কিন্তু ড্যাশ ব্যবহার করা যাবে না।
আপনি উপরের ভ্যারিয়েবগুলো দিয়ে খুব সহজেই এখন তার ভ্যলুগুলো পেতে পারেন। প্রয়োজনে আগের ভ্যলু মুছে নতুন ভ্যালুও ঢুকিয়ে দিতে পারেন।
[code type=ruby]2.2.1 :033 > x
=> 5
2.2.1 :034 > y
=> Hello Ruby
2.2.1 :035 > x = Da da da
=> Da da da
2.2.1 :036 > x
=> Da da da
2.2.1 :037 > myname = Babar
=> Babar
2.2.1 :038 > Ruby says
+ x
=> Ruby says Da da da
2.2.1 :039 > my_name
=> Babar
[/code]
ওকা, বেশি বেশি প্র্যাকটিস করেন, আর সাহস থাকলে নিচের এক্সপ্রেশনের আউটপুটটা কমেন্ট করে জানান!
[code type=ruby]5 + 045[/code]
ভালো থাকুন, আর কোন সমস্যা হলে অবশ্যই জানাবেন।