এত্ত সহজ সি প্রোগ্রামিং! — একটি কোড এবং তার পরিচিতি

সি প্রোগ্রামিংয়ের লাইন বাই লাইন ব্যাখ্যা। Header file, Indentation এবং Statement নিয়ে বিস্তারিত আলোচনা।

Ehsanul Islam
8 min readJul 13, 2022

যে কারণে এই ব্লগটি আপনার জন্য-

  • সি প্রোগ্রামিংয়ের লাইন বাই লাইন ব্যাখ্যা।
  • একজন বিগিনারের মাথায় ঘুরতে থাকা কোডিং নিয়ে বেশ কিছু প্রশ্নের সমাধান
  • প্রোগ্রামিংয়ের কিছু বেসিক জিনিসপত্র বোঝা।
  • Header file, Indentation এবং Statement নিয়ে বিস্তারিত আলোচনা।

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

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

ছোটবেলায় সবাই-ই কিন্তু আমরা টুকটাক কোন-না-কোন গেম খেলেছি, তাই না? যেমনঃ DX ball, Road rush, Virtual Cop 2 (VCop2), Mostofa, Vice City ইত্যাদি। খেয়াল করে দেখুন তো, প্রথমদিকে আপনি কিন্তু খুব বেশি লেভেল পর্যন্ত আগাতে পারতেন না। মাঝে মাঝে গেমের প্রথম বসটিকে মারতে পারলেও দ্বিতীয় বসকে মারাটা মুশকিল হয়ে যেত। কিন্তু খেলতে খেলতেই তো আপনি যে কোন গেমে ধীরে ধীরে অনেক পারদর্শী হয়ে উঠেন, তাই না? আপনার শুধু প্রয়োজন কিভাবে খেলতে হয় তা জানা এবং খেলতে খেলতে গেমটির খুঁটিনাটি সম্পর্কে অবগত হওয়া।

ঠিক তেমনি প্রোগ্রামিং ল্যাঙ্গুয়েজ হল আপনাদের জন্য অপরিচিত একটি গেমের মতই। একটু ধরে ফেলতে পারলেই আপনাদের কাছে অনেক সহজ এবং মজার মনে হবে।

একটি কোড এবং তার পরিচিতি

Photo by Oskar Yildiz on Unsplash

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

বেশ অনেকক্ষণ বকবক করলাম। এবার চলুন সি প্রোগ্রামিংয়ের ছোট্ট একটি কোড দিয়ে শুরু করা যাক।

ভালো করে বোঝার জন্যে নিচের ছবিটি দেখি।

সি প্রোগ্রামিং দিয়ে বাংলাদেশ প্রিন্ট করানো

দেখতে খুব অদ্ভুত লাগছে কি? ঘাবড়ানোর কারণ নেই, আস্তে আস্তে সবকিছুই জেনে যাবেন। এবার দেখা যাক আমি কি লিখেছি কোডে।

১ম লাইনঃ #include <stdio.h> , এটিকে বলা হয় হেডার ফাইল। সি প্রোগ্রামগুলো এরকম হেডার ফাইল দিয়ে শুরু হয়। এটা কেন লিখেছি একটু পরে বলছি।

২য় লাইনঃ এই লাইনটি ফাঁকা রেখেছি। দেখতে সুন্দর লাগে তাই।

৩য় লাইনঃ int main() , এটিকে বলে মেইন ফাংশন। সি প্রোগ্রাম গুলো মেইন ফাংশন থেকে কাজ করা শুরু করে। তাই যেকোনো প্রোগ্রামে একটি (এবং কেবলমাত্র একটি) মেইন ফাংশন থাকতে হবে। ফাংশনের শুরুটাও যেমন দ্বিতীয় বন্ধনী দিয়ে করতে হয় (৪র্থ লাইনে), তেমনি শেষও করতে হয় দ্বিতীয় বন্ধনী (৭ম লাইনে) দিয়ে।

৫ম লাইনঃ আমরা আমাদের যাবতীয় যে সকল কোড করব তার সবকিছুই লেখা হয়ে থাকে ফাংশনের বডির ভিতর, অর্থাৎ দ্বিতীয় বন্ধনীর মধ্যকার জায়গার ভেতর। কোন ফাংশনে দ্বিতীয় বন্ধনীর এই মধ্যকার জায়গাকে বলা হয় ফাংশনটির ব্লক (block)। এই ব্লকের ভিতর আমরা যা খুশি তাই লিখতে পারবো, অর্থাৎ যেকোনো কোড করতে পারবো। উপরের ছবিতে ৫ম লাইনে আমি শুধুমাত্র বাংলাদেশ নামটি প্রকাশ করানোর জন্য কোড লিখেছি। এভাবে কোন কিছু প্রকাশ করানো বা আউটপুট দেখানোকে প্রোগ্রামিংয়ে বলা হয় প্রিন্ট করানো। এটিকে লিখতে হয় printf() এভাবে। printf() এর মাঝে ডাবল কোটেশনের ভেতর আপনি যা লিখবেন তাই আউটপুট হিসেবে স্ক্রিনে দেখাবে। এটাকেই প্রিন্ট করানো বলে। এগুলো নিয়ে আমরা পরে বিস্তারিত আলোচনা করব।

৬ষ্ঠ লাইনঃ দ্বিতীয় বন্ধনী শেষ করার আগের লাইনে আমি return 0; লিখেছি। সেটা কেন এখন ব্যাখ্যা করব না। ফাংশন নিয়ে বিস্তারিত আলাপ করার সময় বলব। তবে আপাতত, আপনারা যে কোন প্রোগ্রামে নিচের এই লাইনটি লিখে ফেলবেন চোখ বন্ধ করে।

হেডার ফাইল (Header file)

উপরের ছবির প্রথম লাইনটিকে বলা হয় হেডার ফাইল (header file) । এটা কিভাবে লিখে মোটামুটি মুখস্থ করে রাখুন। এরকম অনেক রকম হেডার ফাইল আছে। যেমনঃ #include <stdlib.h> , #include <string.h> ইত্যাদি। তবে ছবির #include <stdio.h> হলো একটি বেসিক বা মূল হেডার ফাইল (header file)। অর্থাৎ এটা দিয়েই আমরা প্রায় সব ধরনের কাজ করে ফেলতে পারবো। header file-গুলো লেখা হয় এভাবেঃ #include <ফাইল_নেম.h>

এটি একটি প্রি-প্রসেসর কমান্ড। যার মাধ্যমে আমরা আমাদের কম্পাইলারকে (কম্পাইলার হল- আমরা যে সফটওয়্যার/IDE-তে কোড লিখি সেটা) বলছি stdio.h নামের ফাইলটি প্রোগ্রামে অ্যাড করতে বা include করতে। stdio.h ফাইলে স্ট্যান্ডার্ড ইনপুট আর আউটপুট সংক্রান্ত যাবতীয় ফাংশন লেখা আছে। তাই standard input output কে সংক্ষেপে std i o লিখা হয়েছে। এখানে .h হচ্ছে header ফাইলের এক্সটেনশন (extension)। আমরা কেবল এই হেডার ফাইলগুলো ব্যবহারই করব, ভেতরে কি কাজ হচ্ছে সেটি আমাদের দেখার দরকার নেই।

header file গুলো আসলে এক একটি লাইব্রেরী। সি প্রোগ্রামিংয়ে এই header file দিয়েই কোড লিখা শুরু করতে হয়। এতে করে পরবর্তী সকল লাইনই সি প্রোগ্রামিং এর অন্তর্গত বলে বিবেচিত হয়। লাইব্রেরী জিনিসটা একটু ক্লিয়ার করে বলে রাখি। ধরে নিন আপনি তরকারি রান্না করবেন। তো তরকারি রান্না করার জন্য যে সকল উপকরণ এবং নিয়মকানুন লাগবে (যা না মানলেই নয়), তার বিস্তারিত সবই একটি বইয়ে দেওয়া আছে। আপনার কিন্তু এখন এই বইকে অনুসরণ করেই যে কোন তরকারি রান্না করতে হবে, তা যেভাবেই রান্না করুন না কেন! আবার বিরিয়ানি রান্না করার জন্য বিরিয়ানির নিয়ম এবং উপকরণ আছে এমন একটি বই লাগবে। সি প্রোগ্রামিংয়ে লাইব্রেরীটা হলো অনেকটা এই বইয়ের মতোই। মানে, আমরা প্রথম লাইনের পর যে সকল কোড লিখব তা সঠিকভাবে রান(run) করার জন্য বা ঠিকভাবে কাজ করানোর জন্য যে সকল দিক নির্দেশনা দরকার তার সবই উল্লিখিত header file এ থাকতে হবে।

সব থেকে বড় কথা হল উপরের #include <stdio.h> এই হেডার ফাইল দিয়েই আমরা মোটামুটি সব ধরনের কাজ করে ফেলতে পারবো। অর্থাৎ প্রায় বেশির ভাগ ফাংশনের দিকনির্দেশনা এই হেডার ফাইলের মাঝেই আছে। শুধুমাত্র হঠাৎ মাঝে মাঝে আমাদের অতিরিক্ত header file যুক্ত করতে হতে পারে। এ বিষয়গুলো আমরা কাজ করতে করতে শিখে যাব। আপাতত এতটুকুই জেনে রাখুন।

এবার আসি “ফাংশন” কি জিনিস?

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

সি প্রোগ্রামিং এ ফাংশনগুলো কয়েক রকমের হয়ে থাকে। যেমন কিছু ফাংশানের ভেতরে আমরা কোড লিখি। কোডগুলো অবশ্যই { } ব্রাকেটের ভেতর লিখতে হবে। { } ব্রাকেটের ভেতরকার পুরো অংশকে সেই ফাংশনের বডি বা ব্লক (block) বলা হয়। যেমনঃ ছবির main() ফাংশন, যেখানে { } ব্র্যাকেটের ভেতর কিছু জিনিস লেখা হয়েছে। main() হল সি প্রোগ্রামিং এর প্রধান ফাংশন, মানে মেইন ফাংশন। এখান থেকেই কম্পিউটার কাজ করা শুরু করে এবং এখান থেকেই সকল ধরনের দিকনির্দেশনা দেওয়া হয়।

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

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

ফাংশন নিয়ে পরবর্তীতে আমরা বিস্তারিত আলোচনা করব। আপাতত যা পড়লেন এইটুকুই জেনে রাখুন। কাজ করতে করতে আমরা কতকিছু যে শিখবো- তা টেরই পাবেন না।

ইনডেন্টেশন (Indentation)

এবার খুব গুরুত্বপূর্ণ একটি কথা বলে রাখি। উপরের প্রথম কোডটি লক্ষ্য করলে দেখবেন- সবগুলো লাইন এডিটরের বাঁ পাশ থেকে শুরু করেছি, কিন্তু শুধুমাত্র ৫ম৬ষ্ঠ লাইনের আগে চারটি স্পেস (ফাঁকা জায়গা) দিয়ে রেখেছি। এটিকে বলে ইনডেন্টেশন (Indentation)

কোড লেখার সময় এরকমটা না করলেও কিন্তু চলবে। তাই অনেকেই এই ইনডেন্টেশনের ব্যাপারে সতর্ক থাকেন না। যেকোনো ভালো অভ্যাস তৈরি করার মতোই এটি খুবই গুরুত্বপূর্ণ, যেমনটা খাওয়ার আগে হাত ধুয়ে নেওয়া। কেননা ইনডেন্টেশন না থাকলে কেউই আপনার কোডটি ভালোভাবে পড়তে পারবে না, এমনকি আপনার নিজেরও কোডিংয়ে কোন ভুল বের করতে হলে হিমশিম খেতে হবে।

সৌন্দর্য বৃদ্ধির পাশাপাশি কি কাজ করা হচ্ছে তা একটি প্রোগ্রামারের চোখে স্পষ্ট করে তুলে ধরাই হল ইনডেন্টেশনের প্রধান কাজ। এক কথায়, এই অভ্যাসটি আপনাকে সুশৃংখল ভাবে কোড লিখতে ও পড়তে সাহায্য করবে। বলাই বাহুল্য যে, এই অভ্যাস না থাকার কারণে আপনি হয়তো আপনার বসের অথবা অন্য কোন প্রোগ্রামারের কাছে বকাও খেয়ে যেতে পারেন। সুতরাং ইনডেন্টেশন করার অভ্যাসটা খুবই গুরুত্বপূর্ণ। শুরু থেকেই এর অনুশীলন করবেন, তাতে আপনারই মঙ্গল।

ইনডেন্টেশনের জন্য চারটি স্পেস দেওয়াই স্ট্যান্ডার্ড, সেক্ষেত্রে একটি ট্যাব (Tab) চাপ দিয়েই চারটি স্পেস এর কাজ হয়ে যাবে। কোড লিখতে লিখতে আপনারা বুঝে যাবেন কখন, কিভাবে, কোন জায়গায় এটি ব্যবহার করতে হয়।

Statement কি?

সি প্রোগ্রামিংয়ে Statement বোঝার সহজ উপায় হল লাইনের শেষে সেমিকোলন( ; ) থাকবে। অর্থাৎ সেমিকোলন( ; ) দিয়ে শেষ হওয়া প্রত্যেকটি লাইনই এক একটি Statement । অতএব, আমাদের উপরের কোডের ৫ম লাইন হল একটি Statement

কোডিং করার সময় আমাদের একাধিক স্টেটমেন্ট লিখতে হয়। সেমিকোলন দেওয়ার মাধ্যমে এই Statement গুলোকে পৃথক করে দেওয়া হয়। শুরুর দিকে অনেকেই স্টেটমেন্টের শেষে সেমিকোলন দিতে ভুলে যায়। সেক্ষেত্রে প্রোগ্রামটি রান করানোর সময় কম্পাইলেশন ইরর (compilation error) নামক একটি জিনিস আমরা দেখতে পাব। অর্থাৎ কম্পাইলার বুঝতে পারে যে- একটি স্টেটমেন্টের সাথে আরেকটি স্টেটমেন্ট মিশে গেছে, পৃথক করা হয়নি। আর এ জন্যই কম্পাইলার কোডটি কম্পাইল করতে পারেনা। তাই সে আমাদেরকে বলে দেয় কম্পাইলেশন ইরর (compilation error)। অতএব অবশ্যই কোড করার সময় এই বিষয়টি আপনি লক্ষ্য রাখবেন।

গুরুত্বপূর্ণ টিপস:

  • সি প্রোগ্রামিংয়ে সকল ফাংশনের মাথা হল মেইন main() ফাংশন, তাই এর নাম main()
  • printf() এর কাজ হল কোন কিছু প্রকাশ করানো বা প্রিন্ট করানো, তাই এর নাম printf()
  • Header File: #include <stdio.h> এই লাইনটি লেখার মাধ্যমে, কম্পাইলার আপনার লিখা প্রোগ্রামটি কম্পাইল করার পূর্বে, stdio.h ফাইলটি সর্বপ্রথম include করে নেয়, তারপর কম্পাইল করা শুরু করে দেয়।
  • প্রত্যেকটি প্রোগ্রামিং ল্যাঙ্গুয়েজ কিছু ভিন্ন ভিন্ন নিয়মকানুন মেনে গঠিত হয়। তাই এদেরকে লিখার কিছু আলাদা আলাদা স্টাইল বা প্যাটার্ন থাকে। কোড লেখার এই স্টাইল বা প্যাটার্নকে বলা হয় সিনট্যাক্স (syntex)

গুরুত্বপূর্ণ লিংক:

--

--