ধাপ
২
যেহেতু আমরা কোডিং কোডব্লকস দিয়ে শিখব, তো শুরুতে কোডব্লকস চালু করুন। কোডব্লকসের বাংলা নির্দেশিকা এখানে দেয়া আছে। তারপর নতুন ডকুমেন্ট চালু করুন এবং যে কোনো নাম দিয়ে .c এক্সটেনশন দিয়ে সংরক্ষণ করুণ (নির্দেশিকায় দেয়া উদাহরণ সমূহের জন্য একটি আলাদা ফোল্ডার তৈর করতে পারেন)।
শুরুতে সংরক্ষণ করলে কোডব্লকস জানবে যে আমরা কি ভাষা ব্যবহার করছি, ফলে সে অনুযায়ী কোডব্লকস আমাদের সাহায্য করতে পারবে। এ সাহায্যের ভিতর থাকবে লিখার সময় ইঙ্গিত (hints), কোড হাইলাইট করা ইত্যাদি।
তো আমাদের প্রথম কোড হিসেবে নিচের Hello world! কোডটি ব্যবহার করব। তো কোডব্লকসে নিচের কোডটি লিখুন। কপি-পেস্ট না করে দেখে দেখে লিখা উত্তম।
#include<stdio.h>
int main()
{
printf("Hello world!");
return 0;
}
২.১ - সি দিয়ে প্রথম কোড
এবার কি-বোর্ড থেকে F9 চাপ দিন। সব ঠিকঠাক লিখলে নিচের মত ফলাফল দেখতে পাবেনঃ
কি-বোর্ড থেকে যে কোনো একটি বোতাম চাপুন, তাহলে ফলাফল উইন্ডো বন্ধ হবে। তো আপনি এখন একজন কোডার.. :)
আমারা যে প্রোগ্রামটি বানালাম তাকে "Hello world!" প্রোগ্রাম বলে। এ প্রোগ্রাম দিয়ে প্রোগ্রামিং শুরু করা একটি ঐতিহ্য (বিস্তারিত)।
যেহেতু আমরা আমাদের প্রথম প্রোগ্রাম লিখে ফেলেছি (আগে থেকে ধারনা না থাকলে তেমন কিছু বুঝেননি আশা করি কোডের ;) )। তো এবার কোডের (চুলচেরা) বিশ্লেষণ করা যাক।
ফাংশন হল প্রোগ্রামের একটি ছোট অংশ। একটি প্রোগ্রামে এক বা একাধিক ফাংশন থাকতে পারে। প্রোগ্রাম কি করবে না করবে তার কোড এই ফাংশন গুলোর ভিতরই লিখা হয়।
যে কোন প্রোগ্রাম যখন চালু করা হয় তখন ঐ প্রোগ্রামের নির্দিষ্ট একটি ফাংশন থেকে প্রোগ্রামটি শুরু হয়। সি এর ক্ষেত্রে এ প্রধান ফাংশনটির নাম main। সি প্রোগ্রামে যে বা যত ফাংশন ই থাক না কেন অবশ্যই একটি main ফাংশন থাকতে হবে, এবং main ফাংশন অবশ্যই একাধিক হতে পারবেনা।
ফাংশন লিখার নিয়ম নিম্নরূপঃ
returnType functionName(argument)
{
...
}
ফাংশনের শুরুতে returnType নাও থাকতে পারে। returnType কি তা একটি পর আলোচনা করছি। returnType এর পর একটি ফাঁকা যায়গা (Space) দিয়ে লিখতে হবে functionName (ফাংশনের নাম যেমনঃ main ইত্যাদি)। এরপর প্রথম বন্ধনী "()" দিতে হবে। এ বন্ধনীর ভিতর argument লিখতে হয়। এটিও নাও থাকতে পারে। argument নিয়ে পরে বিস্তারিত আলোচনা করা হবে।
ফাংশনের নাম লিখার পর ফাংশন কোড শুরু করতে হয় দ্বিতীয় বন্ধনী "{" দিয়ে। তারপর প্রয়োজনীয় কোড লিখে আবার দ্বিতীয় বন্ধনী "}" দ্বারা ফাংশন শেষ করতে হয়।
তো বলা যায় একটি ফংশনে অবশ্যই নিচের অংশ গুলো থাকতে হবেঃ
functionName()
{
...
}
উদাহরণ ২.১ এ আমরা main() ফাংশন দেখেছি। সেখানে returnType ছিল, কিন্তু argument ছিল না।
প্রোগ্রামিং হচ্ছে কিছু নির্দেশের সমষ্টি। এক একটি নির্দেশকে এক একটি statment বলতে পারেন। সি ভাষায় প্রতিটি স্টেটমেন্টের শেষে একটি করে সেমিকোলন (;) দিতে হয়। যেমনঃ
printf("Hello world!");
এটি একটি স্টেটমেন্ট। যাতে printf() ফাংশনকে call করা হয়েছে। call করা বলতে কোন ফাংশনকে চালু (run) করা বুঝায়, অর্থাৎ ঐ ফাংশনে যে সব স্টেটমেন্ট আছে সেগুলো করতে বলা হয়। printf() ফাংশনকে কল করা হলে এ ফাংশনের argument এ যা লিখা হবে তা পর্দায় দেখাবে। আমরা ফলাফল উইন্ডোতে দেখেছি সেখানে প্রথম লাইনে লিখা ছিল "Hello world!", এ লিখাটি printf() এর ভিতর double inverted comma (" ") এর ভিতর লিখা হয়েছে বলেই তা দেখিয়েছে। লিখাটি পরিবর্তন করে ২.১ কোডটি চালিয়ে দেখুন, দেখবেন printf() এর ভিতর যা লিখবেন তাই ফলাফল উইন্ডোতে দেখাবে (কিছু ব্যতিক্রম ছাড়া)।
ফাংশনে যদি returnType দেয়া হয় তাহলে অবশ্যই ফাংশনে return স্টেটমেন্ট থাকতে হবে। আমাদের ২.১ উদাহরণে যেহেতু returnType হিসেবে int ব্যবহার করেছিলাম, তাই সেখানে return 0; স্টেটমেন্টটি লিখা হয়েছে।
returnType নিয়ে সামান্য কিছু বলে রাখি। কোনো ফাংশনে returnType দেয়ার অর্থ হল ফাংশনটিকে কল করা হলে ফাংশটির ভিতরের স্টেটমেন্ট সমূহ ফাংশন শেষে (ফংশনের স্টেটমেন্ট গুলো পালন করা শেষে) একটি ফলাফল ফেরত (return) দিবে। returnType এ যে টাইপ দেয়া থাকবে সে টাইপের return ই ফাংশন থেকে পাওয়া যাবে।
বাস্তব উদাহরণ হতে পারে Blender (যা দিয়ে শরবত বানানো যায় ;) )। এ Blender এ আপনি argument (input) হিসেবে আম দিয়ে একে কল (চালু) করলে এটি এর স্টেটমেন্ট সমূহ পালন করবে। তারপর স্টেটমেন্ট শেষ হলে আপনাকে আমের শরবত return দিবে। তো এখানে Blender হল একটি ফাংশন :) ।
উদাহরণ ২.১ এ returnType দেয়া হয়েছে int, int বুঝায় integer, মানে পূর্ণ সংখ্যা। অর্থৎ main() ফাংশনটি একটি পূর্ণ সংখ্যা return দিতে পারবে/দেবে। ফংশনের শেষে তাই লিখা হয়েছে return 0;, অর্থাৎ এ main() ফাংশনটি একটি integer মান return দিবে, এবং এ মানটি হবে শূন্য (০)।
আমরা ফলাফল উইন্ডোটির দিকে আরেকবার লক্ষ করিঃ
দেখুন দ্বিতীয় লাইনে লিখা আছে "Precess returned 0..."। তো এ লাইনে কেন শূণ্য দেয়া হয়েছে বুঝতে পেরেছেন কি?
আপনি উদাহরণ ২.১ এ return এর মান শূণ্য (০) না দিয়ে অন্য পূর্ণ সংখ্যা (integer) দিয়ে দেখুন। তারপর দেখুন precess return এ কি মান দেখায়!
আমরা প্রাথমিক সব গুলো উদাহরণে main() ফাংশনে returnType হিসেবে int টাইপ এবং return 0; স্টেটমেন্টটি ব্যবহার করবে। এটিকে একটি নিয়ম ধরতে পারেন। পরের ধাপ গুলোতে এ নিয়ে বিস্তারিত আলোচনা করা হবে।
এ লাইনকি আসলে কি বুঝায়?
আমরা আগেই জেনেছি যে ফাংশনে returnType দিলে ফাংশন একটি মান return করে। আবার returnType না দিলেও কিন্তু ফাংশন সমূহ এলোমেলো মান return করে। main() ফাংশনটিও এরকম একটি মান return করে। যে মানটি প্রোগ্রাম বন্ধ হওযার পর অপারেটিং সিস্টেম জানতে পারে। main() ফাংশনের মান শূন্য হওয়া মানে প্রোগ্রামটি কোনো সমস্যা ছাড়াই বন্ধ হয়েছে। আপনি যদি main() ফাংশনে কোনো returnType না দেন এবং return 0; না লিখেন, তাহলে main() ফাংশন শূণ্য return দিবে না, ফলে অপারেটিং সিস্টেম ধরে নিবে আপনার প্রোগ্রাম ঠিক মত কাজ করছে না!
উদাহরণ ২.১ এ int এবং return 0; মুছে দিয়ে দেখুন কি ফলাফল আসে!
এ return মানের আরো কাজ এবং গুরুত্ব আছে। তা পরে আলোচনা করা হবে।
সবই তো বুঝলাম, কিন্তু #include<stdio.h> টা কেন লিখা হল? এবার এটা নিয়েই বলব।
প্রথম যখন মেশিনভাষা দিয়ে কম্পিউটারে প্রোগ্রামিং করা হত, তখন একটি যোগ করার জন্যও অনেক কোড লিখতে হত। পরে নতুন নতুন ভাষা তৈরি করা হয়। ফলে কোডের আকার কমতে থাকে। সর্বশেষে কোডিং আরো সহজ এবং সংক্ষিপ্ত করার জন্য প্রোগ্রামাররা প্রায় ব্যবহৃত হয় এরকম কাজ (ছোট প্রোগ্রাম) গুলো ফাংশন আকারে লিখে কম্পাইলারের সাথে যুক্ত করে দিল। এ ফাংশন কোড গুলোকে আবার বিভিন্ন বিভাগ (category) এ ভাগ করা হল এবং প্রতি বিভাগের জন্য এক একটি আলাদা কোড ফাইল ব্যবহার করা হল। এসব কোড ফাইলকে বলা হয় এক একটি লাইব্রেরি। আর এ লাইব্রেরির ফাংশন গুলোই হল library function।
সি ভাষাতেও এরকম প্রচুর লাইব্রেরি ফাংশন রয়েছে। সি ভাষায় লাইব্রেরি ফাংশনকে কোডের শুরুতে নিম্নোক্ত ভাবে যুক্ত করা হয়ঃ
#include<libraryName>
libraryName এর যায়গাতে যে লাইব্রেরির ফাংশন দরকার সে লাইব্রেরির নাম লিখা হয়।
আমরা যে printf() ফাংশনটি ব্যবহার করেছি তাও একটি লাইব্রেরির অন্তর্ভুক্ত। লাইব্রেরিটির নাম হল stdio.h। সি ভাষার লাইব্রেরি ফাংশন গুলোতে .h এক্সটেনশন ব্যবহার করা হয়। এগুলোকে header ফাইলও বলে, তাই .h এক্সটেনশন। stdio এসেছে STanDard Input/Output থেকে। এ হেডার ফাইলে সি এর স্ট্যান্ডার্ড ইনপুট এবং আউটপুট ফাংশনসমূহ দেয়া আছে। printf() একটি আউটপুট ফাংশন।
বিভিন্ন কম্পানির কম্পাইলারে বিভিন্ন ধরনের হেডার ফাইল থাকে। তবে কিছু নির্দিষ্ট হেডার ফাইল সব কম্পাইলারেই দেয়া থাকে। তারমধ্যে stdio.h একটি।
stdio.h এর ভিতর আরো যেসব ফাংশন থাকে তার একটি তালিকা নিচের চিত্রে দেয়া আছে। চিত্রটি Turbo C++ 3.0 থেকে নেয়া।
মনে রাখবেনঃ
আরেকটি উদাহরণঃ
#include<stdio.h>
int main()
{
printf("How are you?\n");
printf("I'm fine.");
return 0;
}
২.২ - উদাহরণের জন্য উদাহরণ
\n ব্যবহার করা হয় কার্সরকে পরের লাইনে নিয়ে যেতে। অর্থাৎ \n = Enter।
মোটামুটি সি নিয়ে প্রাথমিক আলোচনা এখানেই শেষ।