সূচিপত্র

আজ শুরু করতে যাচ্ছি সি নিয়ে নতুন একটি টিউটোরিয়াল। তবে আমি কোনো নিশ্চয়তা দিচ্ছি না যে আমি তোমাকে ২১ দিন কিংবা ১ মাসে সি শিখিয়ে দিব! :p

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

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

কিন্তু আগেই তো বলেছি কম্পিউটার শুধু 0 এবং 1 ছাড়া কিছু বুঝবে না। তাহলে আমরা যে নতুন ল্যাঙ্গুয়েজটা ব্যবহার করবো, তাকে অবশ্যই 0 এবং 1-এ কনভার্ট করে ফেলতে হবে।  এই কাজটার জন্য আমাদের প্রয়োজন একটি কম্পাইলার। কম্পাইলার কীভাবে ইন্সটল করবেন, সেটা আমি শিখাতে যাব না। একটি বহুল ব্যবহারিত নাম বলে দিচ্ছি – Codeblocks – Download link। গুগলে “How to install codeblocks” দিয়ে সার্চ দিলে খুঁজে পেতে খুব বেশিতে ২ মিনিট সময় দরকার হবে। একটু কষ্ট হলেও তা নিজে করে নাও। প্রোগ্রামার হতে হলে এই গুগলে সার্চ দিতে জানাটাও অনেক গুরুত্বপূর্ণ! আর যদি না-ই পার, সেক্ষেত্রে কমেন্ট সেকশন তো আছেই। 🙂

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

#include <stdio.h>
int main() {
    printf("Hello world.\n");
    return 0;
}

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

Snap 2015-03-01 at 16.40.45

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

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

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

এখানে stdio.h হল একটি হেডার ফাইল, যার পূর্ণ রূপ Standard Input Output। নাম দেখে বুঝতে পারার কথা এর কাজ হল ইনপুট এবং আউটপুট নিয়ে। stdio.h হেডার ফাইলে এ সংক্রান্ত বেশ কিছু ফাংশন ডিফাইন করে দেওয়া আছে। আর এসব ফাংশন ব্যবহার করতে চাইলে stdio.h হেডার ফাইলটা যে ইনক্লুড করতে হবে, সেটা তোমার কম্পিউটারকে বলে দিতে হবে। কারণ তোমার কম্পিউটার একটা বেকুব!

হেডার ফাইলে আমাদের প্রোগ্রামের ভেতরে যে printf() স্টেটমেন্টটি দেখছো, সেটাকে কীভাবে কম্পিউটার বুঝার মত একটা কমান্ডে পরিণত করা যায়, সেই মন্ত্রই দেওয়া থাকে! এই stdio.h ছাড়াও আরও অনেক হেডার ফাইল আছে। সেগুলো সম্পর্কে আমরা পরে জানবো।

এই লাইনটার পর শুরু হয়েছে আমাদের মেইন ফাংশন। ফাংশন কি সেটা পরে আরও বিস্তারিত জানতে পারবা। আর এখানে int দ্বারা বুঝাচ্ছে যে ফাংশনটি একটি ইন্টিজার রিটার্ন করবে। খেয়াল কর, এজন্য কোডটির শেষে আমরা লিখেছি return 0; এবং আমাদের কোড রান করার পর একটা লেখা ভেসে উঠছে, “Process returned 0″। এখন তুমি 0 বদলে দিয়ে 1 লিখে দাও, দেখ কী হয়! এটা খুব একটা দরকার নেই আপাতত। এটুকু জেনে রাখ, ০ রিটার্ন করলে কম্পাইলার ধরে নিবে যে ফাংশনটা যেহেতু শূণ্য রিটার্ন করছে, সেহেতু সব ঠিক মত সম্পন্ন হয়েছে।

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

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

এখানে আমরা printf() নামে একটা ফাংশন ব্যবহার করেছি। এটা আমরা ব্যবহার করতে পারছি এই কারণে যে ,আমরা stdio.h হেডার ফাইলটা ইনক্লুড করতে বলে দিয়েছি এবং এই printf()-এর কাজ ওই হেডার ফাইলে বলে দেওয়া আছে।

এর ভেতরে আমরা দু’টি ” চিহ্নের মধ্যে আমাদের কাঙ্ক্ষিত মেসেজটি লিখছি। ” চিহ্নের ভেতরের অংশটিকে বলা হয় control string। শেষে  “\n” দিয়ে নতুন একটা লাইনে যেতে বলা হচ্ছে। শুধু “Hello World” লিখে দেখ কী হয়!

এই printf(“Hello world!\n“); লাইনটি হল একটা স্টেটমেন্ট। প্রতিটা স্টেটমেন্ট-এর শেষ হয় একটি সেমিকোলন দ্বারা (;)। এই সেমিকোলনের ব্যাপারে শুরু থেকেই সতর্ক থাকবে। নাহলে শেষ বয়সে এটি অনেকেরই চুল ছেঁড়ার কারণ হয়ে দাঁড়ায়!

এখন দেখা যাক এদের মাঝে যেকোনো একটি লাইন বাদ দিয়ে দিলে কি হয়। তুমি যদি এই কোডে #include <stdio.h>  বাদ দিয়ে দাও, তাহলে কম্পাইলার এটা আর কম্পাইল করতে পারবে না, আর নিচের Error টা দেখাবেঃ

error: ‘printf()’ was not declared in this scope

এ ধরণের Error দেখলে সাথে সাথেই বুঝে নিবা printf() ফাংশনটি যে হেডার ফাইলে আছে, সেটা তুমি ইনক্লুড কর নাই। আগেই বলেছি তোমার কম্পিউটার খুবই বেকুব। লাইন ধরে বুঝিয়ে না দিলে এটি কিছুই করতে পারবে না!

আর printf() বাদ দিলে তো কোনো কাজই হবে না। মেইন ফাংশনে কিছু করতে বলে নাই। কম্পিউটার নিজ থেকে করবে কেন! এক্ষেত্রে কোডটি রান করবে, কিন্তু কিছু শো করবে না। আর মেইন ফাংশন বাদ দিলে তো কোড রানই করবে না!

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

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

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

/* this 

is 

a comment.

oka frans?

*/

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

#include <stdio.h>
/*
ami ekta
tv kinchi
onek boro
tv
*/
int main() {
    // this is a comment
    printf("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. []

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

a. studio.h // Trust me. এই ভুলে অনেকেই করে! :p

b. iostream

c. iosterm

d. stdio.h

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

a. .

b. ,

c. ।

d. ;

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

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

Muntasir Wahed

Muntasir Wahed

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