আজ শুরু করতে যাচ্ছি সি++ নিয়ে নতুন একটি টিউটোরিয়াল। তবে আমি কোনো নিশ্চয়তা দিচ্ছি না যে আমি তোমাকে ২১ দিন কিংবা ১ মাসে সি++ শিখিয়ে দিব! প্রথমেই বলে রাখি, এই সিরিজের প্রথম ৯ পর্বে আলোচিত হবে সি থেকে পাওয়া জিনিসপত্র নিয়ে, যেমন লুপ, কন্ডিশনাল লজিক, অ্যারে ইত্যাদি। কারও প্রোগ্রামিং সম্পর্কে আগে থেকে ধারণা থাকলে এই ৯ টি পর্ব স্কিপ করতে পার। কিংবা চাইলে রিভিশনও দিতে পার! এখন অনেকেই হয়তো বলবে সি খুব ভাল করে না পারলে সি++ ধরা উচিত না। আমি কথাটা পুরোপুরি ভুল বলছি না, তবে সেটা যে পুরোপুরি ঠিকও না, সেটার নিশ্চয়তা দিতে পারি! সি জানলে সুবিধা হবে ঠিক, কিন্তু না জানলে সি++ যে একেবারেই শেখা সম্ভব না সেই ধারণাটা ভুল! তাছাড়া সি-এর প্রতিটা উপাদানই কিন্তু সি++ এ ব্যবহার করা যায়।

প্রথমেই আমাদেরকে জানতে হবে, প্রোগ্রামিং ল্যাঙ্গুয়েজ কী? আমরা জানি কম্পিউটার মানুষের নির্দেশ ছাড়া কিছুই করতে পারে না। কিন্তু তাকে ইংরেজীতে বললেই হয়ে যাবে না যে, “এই কম্পিউটার আমার নামটা প্রিন্ট কর তো!”। তাকে এমন একভাবে বলতে হবে, যাতে সে তা বুঝতে পারে। কম্পিউটার শুধু দুই ধরণের আদেশ সরাসরি বুঝতে পারে – অন এবং অফ, যাকে আমরা রিপ্রেজেন্ট করি বাইনারী 0 এবং 1 দিয়ে।

এখন আমরা যদি 0 এবং 1 দিয়ে কোড লিখতাম, তা হলে প্রথমত যে সমস্যাটা হত, তা হল আমাদের এটা লিখতে খবর হয়ে যেত। আবার এত কষ্ট করে লেখা কোড যখন অন্যকে দেখাতাম, সে মাথা ঘুরে পড়ে যেত! এ সমস্যা সমাধানের জন্যই আমাদের তৈরি করে নিতে হয়েছে নতুন এক ধরণের ভাষা, যা কম্পিউটার বুঝতে পারবে এবং আমাদেরও সেটা লিখতে এবং পড়তে সুবিধা হবে।

কিন্তু আগেই তো বলেছি কম্পিউটার শুধু 0 এবং 1 ছাড়া কিছু বুঝবে না। তাহলে আমরা যে নতুন ল্যাঙ্গুয়েজটা ব্যবহার করবো, তাকে অবশ্যই 0 এবং 1-এ কনভার্ট করে ফেলতে হবে।

প্রথমেই আমাদের দরকার একটি কম্পাইলার। কম্পাইলার কেমনে ইন্সটল করবেন, সেটা আমি শিখাতে যাব না। গুগলে খুঁজে পেতে খুব বেশিতে ২ মিনিট সময় দরকার হবে। একটু কষ্ট হলেও তা নিজে করে নাও। প্রোগ্রামার হতে হলে এই গুগলে সার্চ দিতে জানাটাও অনেক গুরুত্বপূর্ণ! আর যদি না-ই পার, সেক্ষেত্রে কমেন্ট সেকশন তো আছেই। 🙂

তো বেশি কথা না বাড়িয়ে তাড়াতাড়ি একটা প্রোগ্রাম লিখে ফেলি!

#include <iostream>
using namespace std;
int main() {
    cout << "Hello world!" << "\n";
}

এখন এই কোডটা লিখে কম্পাইলারে রান করলে নিচের মত একটা কাল বাক্স আসবে!

Snap 2015-03-01 at 16.40.45

আমি জানি এইটা দেখতে একটুও সুন্দর না। অনেকের হয়তো মনে হবে “Hello World” তো মাইক্রোসফট ওয়ার্ড-এ লিখলেই হয় এত কাহিনী করার কি দরকার! কিন্তু কিছু করার নাই ভাই, আপাতত এভাবেই কাজ চালানো লাগবে আরও কিছু শেখার আগ পর্যন্ত। :p

এখন শুরু করা যাক এই ছোট্ট কোডটার ময়নাতদন্ত।

প্রথম লাইনে আমরা লিখেছিঃ #include <iostream>

এখানে iostream হল একটি হেডার ফাইল, যার পূর্ণ রূপ input output stream. নাম দেখে বুঝতে পারার কথা এর কাজ হল ইনপুট এবং আউটপুট নিয়ে। iostream হেডার ফাইলে এ সংক্রান্ত বেশ কিছু ফাংশন ডিফাইন করে দেওয়া আছে। আর এসব ফাংশন ব্যবহার করতে চাইলে iostream হেডার ফাইলটা যে ইনক্লুড করতে হবে, সেটা তোমার কম্পিউটারকে বলে দিতে হবে। কারণ তোমার কম্পিউটার একটা বেকুব! এই iostream ছাড়াও আরও অনেক হেডার ফাইল আছে। সেগুলো সম্পর্কে আমরা পরে জানবো।

এবার আসা যাক পরবর্তী লাইনেঃ using namespace std;

শুরুতেই এই লাইনের অর্থ বুঝাতে গেলে সব মাথার কয়েক কিলোমিটার উপর দিয়ে চলে যাবে আর সি++ কে ছ্যাকা দিয়ে সবাই ভাগবে। তাই আপাতত এর কাহিনী বুঝাতে যাচ্ছি না। আপাতত তোমার লেখা সব কোডেই এই লাইনটা অ্যাড করে দিও হেডার ফাইল ইনক্লুড করার পর তাহলেই হবে! আরেকটা গুরুত্বপূর্ণ বিষয় হল শেষের সেমিকোলনটা। এটা আমাদের বাংলা ভাষার দাড়ির মতোই। এ সেমিকোলন ঘোষণা করে স্টেটমেন্টের শেষ কোথায়।   একটা দাড়ি কিংবা কমা না দেওয়াতে যেমন বাক্যের ১২-টা বেজে যায়, তেমনি একটি সেমিকোলনের অভাব ১০০০ লাইনের একটা কোডকে ধ্বংস করে দিতে পারে। আমাদের কাছে দাড়ি-কমার ভুল হাস্যকর লাগলেও সি++ এই ব্যাপারে সেইরকম সিরিয়াস। সে সোজা কোডটা কম্পাইল করতেই অস্বীকার করবে, এতোটাই বেয়াদব! :p আর এই সেমিকোলন ব্যাপারটাই অনেক কোডারের জীবনকে গীবন বানিয়ে দিচ্ছে প্রতিনিয়ত। তাই শুরু থেকেই এই ব্যাপারে সতর্ক থাকা খুবই জরুরী!

/* আগ্রহী মানুষজনের জন্য একটা হিন্টস দিয়ে রাখি। এই লাইনটা ব্যবহার না করলে তোমাকে মেইন ফাংশনের ভেতরে cout-এর বদলে লিখতে হত std::cout. এখন আগ্রহ আরও বেড়ে গেলে গুগল! 🙂 */

এই লাইনটার পর শুরু হয়েছে আমাদের মেইন ফাংশন। ফাংশন কি সেটা পরে আরও বিস্তারিত জানতে পারবা। আর এখানে int দ্বারা বুঝাচ্ছে যে ফাংশনটি একটি ইন্টিজার রিটার্ন করবে। সি++ এ এই রিটার্ন-এর ব্যাপারটা বাদ দিলেও কোনো সমস্যা হয় না। সেক্ষেত্রে লিখতে হবে main() { /code/ } এবং কম্পাইলার ধরে নিবে যে ফাংশনটা শূণ্য রিটার্ন করছে, যার অর্থ হল সব ঠিক মত সম্পন্ন হয়েছে।

আরেকটা ব্যাপার আপাতত জেনে রাখ যে, এই মেইন ফাংশন হল সকল ফাংশনের বাপের মত। তোমার কোডে অন্য কোনো ফাংশন ব্যবহার কর আর না কর, মেইন ফাংশন অবশ্যই থাকতে হবে এবং কোড রান করার পর আর যত ফাংশনই থাকুক না কেন, প্রথমেই এই মেইন ফাংশন থেকেই কাজ শুরু হবে। মেইন ফাংশন ডিক্লারেশনের পর আমরা দু’টি কার্লি ব্রেস (সোজা বাংলায় সেকেন্ড ব্যাকেট) দেখতে পাচ্ছি। এরা নির্দেশ করে ফাংশনটির শুরু এবং শেষ কোথায়।

আমাদের মেইন ফাংশনের মধ্যে একটা লাইনই আছে, সেটা হলঃ cout << “Hello world!” << “\n“;

এই লাইনটাতে আমরা cout (উচ্চারণ c out) অবজেক্টটা ব্যবহার করেছি। এইটা আমরা ব্যবহার করতে পারছি এই কারণে যে আমরা iostream হেডার ফাইলটা ইনক্লুড করতে বলে দিয়েছি এবং এই cout-এর কাজ ওই হেডার ফাইলে বলে দেওয়া আছে।

তারপর দেখা যাচ্ছে “<<“। এদেরকে বলা হয় “insertion character”। এরা বলে দিচ্ছে কী আউটপুট করতে হবে।

cout লেখার ফলে একটা ফাংশনের ডাক পড়ছে এবং সেই ফাংশনের আর্গুমেন্ট হিসেবে যাচ্ছে “<<“-এর পরের লেখাগুলো। ফাংশনের আর্গুমেন্টকে তুলনা করা যেতে পারে সমীকরণের প্যারামিটারগুলোর সাথে। বৃত্তের ক্ষেত্রফল জানতে ব্যাসার্ধ জানতে হয়, এই আর্গুমেন্ট ব্যাপারটাও এমনই।

/* কিছু তাত্ত্বিক কথাবার্তা মাথার উপর দিয়ে যাওয়া স্বাভাবিক। আমার উপর বিশ্বাস রাখতে পার, এই ব্যাপারে বেশি মাথা ঘামানোর দরকার নাই। আস্তে আস্তে সব বুঝতে পারবা! */

আর cout  এর পরে “\n” দিয়ে নতুন একটা লাইনে যেতে বলা হচ্ছে। এটা এভাবে না লিখে cout << “Hello World!\n“; লিখলেও চলতো। আবার cout << “Hello World” << endl; ও লেখা যায়, সবগুলোর কাজই একই।

এখন দেখা যাক এদের মাঝে যেকোনো একটি লাইন বাদ দিয়ে দিলে কি হয়। তুমি যদি এই কোডে #include <iostream> কিংবা using namespace std; এর যেকোনো একটি বাদ দিয়ে দাও, তাহলে কম্পাইলার এটা আর কম্পাইল করতে পারবে না আর নিচের এররটা দেখাবেঃ

error: ‘cout’ was not declared in this scope

এধরণের এরর দেখলে সাথে সাথেই বুঝে নিবা যে, cout যে হেডার ফাইলে আছে, সেটা তুমি ইনক্লুড কর নাই কিংবা using namespace std; লাইনটা তুমি লিখ নাই। আগেই বলেছি তোমার কম্পিউটার খুবই বেকুব। লাইন ধরে বুঝিয়ে না দিলে এটি কিছুই করতে পারবে না!

কোডের আরেকটা গুরুত্বপূর্ণ জিনিস হল কমেন্ট। কমেন্টের স্ট্রাকচার সাধারণত দুই ধরণের।

এক লাইনের কমেন্ট গুলো করা হয় এভাবেঃ // this is a comment

একাধিক লাইনের কমেন্ট করা হয় এভাবেঃ

/* this 

is 

a comment.

oka frans?

*/

কমেন্টগুলো শুধুমাত্র প্রোগ্রামাররাই দেখে। কম্পাইলার এদেরকে সম্পূর্ণভাবে ইগনোর করে। নিচের কোডটা রান করলেই বুঝতে পারবে।

#include <iostream>
/*
ami ekta
tv kinchi
onek boro
tv
*/
using namespace std;
int main() {
    // this is a comment
    cout << "Hello world!" << "\n";
    /* bujhchen
    vabi
    ajke onek 
    din por ilish
    radhchi
    ja moja
    hoiche na!
    */
}
/* kemon 
acho 
frans?*/

আজকের মত এখানেই শেষ। তবে শেষের আগে কিছু প্রশ্ন রেখে যাই!

(১) কোন ফাংশনটা সব কোডে থাকতে হয়?

a. start()

b. main()

c. read()

d. end()

(২) ফাংশনের শুরু এবং শেষ কিভাবে বুঝানো হয়?

a. start আর end লিখে

b. oi beta tham

c. {}

d. []

(৩) cout কোন হেডার ফাইলে আছে?

a. iostream

b. iostream

c. iosterm

d. stream

(৪) কোন চিহ্নের মাধ্যমে স্টেটমেন্টের শেষ বোঝায়?

a. .

b. ,

c. ।

d. ;

এগুলা না পারার মত কিছুই না। :p না পারলে লেখাটা আরেকবার পড়ে নাও। 🙂

সমস্যা থাকলে আমাকে জানাও। চেষ্টা করবো যথাসাধ্য সাহায্য করতে।

Muntasir Wahed

Muntasir Wahed

System Administrator at স্বশিক্ষা.com
Jack of all trades, master of none.
Muntasir Wahed
Muntasir Wahed