প্রোগ্রামিংয়ের মৌলিক ধারণা/স্ট্যান্ডার্ড লাইব্রেরি
সংক্ষিপ্ত বিবরণ
[সম্পাদনা]কম্পিউটার প্রোগ্রামিং ভাষায় প্রোগ্রামাররা নিজের কাজের সুবিধার্থে এমন অনেক ফাংশন ব্যাবহার করে যেগুলি আগে থেকেই প্রস্তুত করা থাকে। এই ফাংশনগুলিকে মূলত স্পেশিফিক টাস্ক ফাংশন (নির্দিষ্ট কাজের ফাংশন) হিসাবে অভিহিত করা হয়। এই সমস্ত স্পেশিফিক টাস্ক ফাংশনকে সংরক্ষিত ও সংগঠিত রাখা হয় একটি ভার্চুয়াল লাইব্রেরি বা কাল্পনিক গ্রন্থাগার -এ যাকে কম্পিউটার প্রোগ্রামের ভাষায় স্ট্যান্ডার্ড লাইব্রেরি বলা হয়। অর্থাৎ সংক্ষেপে বলতে গেলে;
স্ট্যান্ডার্ড লাইব্রেরি হল পূর্বনির্ধারিত ও সফলভাবে পরীক্ষিত কিছু ফাংশনের সংগ্রহ, যেগুলো প্রোগ্রামাররা সরাসরি প্রোগ্রামে ব্যবহার করতে পারেন নির্দিষ্ট কাজ সহজে সম্পন্ন করার জন্য। এই স্ট্যান্ডার্ড লাইব্রেরি প্রোগ্রামিং ভাষার গুরুত্বপূর্ন একটি অংশ।
প্রতিটি প্রোগ্রামিং ভাষার নিজস্ব স্ট্যান্ডার্ড লাইব্রেরি থাকে যাতে নির্দিষ্ট ও পূর্বনিরধারিত ফাংশন সংগ্রহিত থাকে। উদাহরনস্বরূপ, প্রায় প্রতিটি প্রোগ্রামিং ভাষাতেই অনেক গণিত-সংক্রান্ত সমস্যার সমাধান করতে হয়, যেমন কোন সংখ্যার বর্গমূল বা ঘনমূল বের করা, বা কোন ত্রিকোনমিতি সম্পর্কিত সমস্যা, এই সমস্ত কিছুর জন্য কিছু ফাংশন আগে থেকেই প্রস্তুত করা হয় এবং পরীক্ষাও করা হয়। সেই সমস্ত গণিত বিষয়ক ফাংশন স্ট্যান্ডার্ড লাইব্রেরির মধ্যেই সংরক্ষিত থাকে।
স্ট্যান্ডার্ড লাইব্রেরিতে সংরক্ষিত সমস্ত ফাংশন দক্ষ প্রোগ্রামারদের দ্বারা প্রস্তুত এবং ভালোভাবে পরীক্ষা করা থাকে যেন কোন প্রোগ্রামে তাদের প্রয়োগ করা হলে তারা সঠিকভাবে কাজ করে। অধিকাংশ ক্ষেত্রে, এই ফাংশনগুলো একাধিক কম্পিউটার প্রোগ্রাম বিশেষোজ্ঞদের দ্বারা পর্যালোচিত হয় যাতে তা প্রত্যাশিতভাবে কাজ করে কিনা তা নিশ্চিত করা যায়। সেইকারনেই স্ট্যান্ডার্ড লাইব্রেরিতে সংরক্ষিত যেকোন ফাংশন নিশ্চিন্তে প্রোগ্রামে ব্যবহার করা যায়, কারণ এগুলো সঠিকভাবে কাজ করবে। এর ফলে সময় এবং অর্থ উভয়ই সাশ্রয় করা যায়।
বিশদ আলোচনা
[সম্পাদনা]কোন প্রোগ্রামে যেসকল ফাংশন ব্যবহার করা হবে, সেগুলোকে যথাযথ কোডের মাধ্যমে সঠিকভাবে গঠন করা অত্যান্ত জরুরী। বিভিন্ন প্রোগ্রামিং ভাষায় ফাংশন গঠন করার জন্য এবং তার প্রয়োগ নির্ভুলভাবে কার্যকর করার জন্য কিছু নির্দিষ্ট ধাপ বা নিয়ম অনুসরন করা হয়:
- ফাংশন সংজ্ঞায়িত করা বা ফাংশন ডিফাইন করা।
- ফাংশনের উল্লেখ করা বা ফাংশন ডিক্লেয়ার করা — যাকে ফাংশনের প্রোটোটাইপ[১] হিসাবেও উল্লেখ করা হয়।
- এবং ফাংশনের কার্যকারিতার সূচনা করার জন্য ফাংশন কল করা।
উপরিউক্ত সমস্ত ধাপগুলি মডুলার প্রোগ্রামিং নামক অধ্যায়ে বিশদে আলোচনা করা আছে। স্বচ্ছ ধারনার জন্য সেই অধ্যায়টি একবার দেখতে পারেন।
স্ট্যান্ডার্ড লাইব্রেরিতে সংরক্ষিত প্রোগ্রাম ছাড়াও প্রোগ্রামারকে কিছু নিজস্ব ফাংশন তৈরি করতে হয়, তখন সাধারনত সেই ফাংশনকে নির্ভুলভাবে কার্যকরী করতে নিচের ধাপগুলি অনুসরন করতে হয়:
- ফাংশনের প্রোটোটাইপের ঘোষণা বা প্রোটোটাইপের উল্লেখ
- ফাংশন কল করা
- ফাংশন সংজ্ঞায়িত করা
যখন কোন নির্দিষ্ট স্ট্যান্ডার্ড লাইব্রেরির কোন ফাংশন প্রোগ্রামে ব্যবহার করা হয় তখন সেই লাইব্রেরি সম্পর্কিত তথ্য প্রোগ্রামে দিতে হয়। সাধারনত প্রোগ্রামের কোডস্পেসের (যেখানে প্রোগ্রাম মুদ্রিত করা হয়) একদম শীর্ষে সেই নির্দিষ্ট স্ট্যান্ডার্ড লাইব্রেরির নাম সাংকেতিকভাবে মুদ্রিত করা হয়।
উদাহরন স্বরুপ আপনি নিচের সরল সি প্রোগ্রামটি লক্ষ্য করুন।
//standard input-output library declaration
#include<stdio.h>
int main(void){
printf("hello world!\n");
}
প্রোগ্রামের দ্বিতীয় লাইনটি লক্ষ্য করুন। এখানে মুদ্রিত #include<stdio.h> সংকেতটি আসলে স্ট্যান্ডার্ড ইনপুট-আউটপুট লাইব্রেরি নামক একটি বিশেষ স্ট্যান্ডার্ড লাইব্রেরি -এর প্রোটোটাইপ ঘোষনা। এই স্ট্যান্ডার্ড ইনপুট-আউটপুট লাইব্রেরির মধ্যে ব্যাবহৃত কিছু ফাংশন উপরিউক্ত কোডে ব্যাবহার হয়েছে যার জন্য প্রোগ্রামের একদম শীর্ষের লাইনে এই লাইব্রেরির অন্তর্ভুক্তির কথা সাংকেতিক নির্দেশের মাধ্যেমে বলা হয়েছে। প্রোগ্রামের হেডার বা শীর্ষলাইনে এই বিশেষ সাংকেতিক পদ্ধতিতে স্ট্যান্ডার্ড লাইব্রেরির নাম অন্তর্ভুক্ত করা অত্যন্ত জরুরী। ধরুন কোন প্রোগ্রামে এক বিশেষ স্ট্যান্ডার্ড লাইব্রেরি -এর অন্তর্গত কোন স্পেশিফিক টাস্ক ফাংশন ব্যাবহার করা হল, কিন্তু প্রোগ্রামের শীর্ষে সেই বিশেষ স্ট্যান্ডার্ড লাইব্রেরি সম্পর্কিত তথ্যের উল্লেখ করা হলনা। সেক্ষেত্রে কম্পিউটার প্রোগ্রাম সেই স্পেশিফিক টাস্ক ফাংশনটিকে চিনতে এবং তার কার্যকারিতা বুঝতে অক্ষম হবে কারন সেই ফাংশন সম্পর্কিত সকল তথ্য সংরক্ষিত আছে স্ট্যান্ডার্ড লাইব্রেরি -তে। উপরের উদাহরনটিই ধরুন না, এখানে আমরা আউটপুট প্রদর্শনের জন্য সি প্রোগ্রামটির পঞ্চম লাইনে যে printf() নামক নির্দেশনার ব্যবহার করেছি সেটি আদপে একটি ফাংশন যা স্ট্যান্ডার্ড ইনপুট-আউটপুট লাইব্রেরি -এর অন্তর্গত। তাই প্রোগ্রামের শীর্ষে আমরা #include<stdio.h> -এই প্রোটোটাইপ বা সংকেতের মাধ্যমে প্রোগ্রামের মধ্যে স্ট্যান্ডার্ড ইনপুট-আউটপুট লাইব্রেরি -এর অন্তর্ভুক্তির কথা ঘোষনা করেছি। এবার যদি আমরা প্রোগ্রামের শীর্ষে #include<stdio.h> -এই সংকেতটির উল্লেখ না করে সরাসরি printf() নামক ফাংশনটির ব্যাবহার করতাম, তাহলে প্রোগ্রামের আউটপুটে ত্রুটি বা এরর দেখাতো কারন, স্ট্যান্ডার্ড ইনপুট-আউটপুট লাইব্রেরি -এর অনুপস্থতিতে সি প্রোগ্রামে printf() ফাংশন অস্তিত্ববিহীন।
কম্পিউটার প্রোগ্রামের শীর্ষে স্ট্যান্ডার্ড লাইব্রেরি -এর অন্তর্ভুক্তির নির্দেশনার পর লাইব্রেরির অন্তর্গত কোন ফাংশন যখন প্রোগ্রামে ব্যাবহার করা হয় তখন সেই ফাংশনের ব্যাবহারকে প্রোগ্রামে কার্যকরী করতে অন্যান্য সাধারন ফাংশনের মতোই নিয়ম মেনে নিম্নের ধাপগুলি অনুসরন করা হয়,
- ফাংশনের নাম ঘোষণা বা ফাংশনের প্রোটোটাইপের উল্লেখ (হেডার ফাইলে থাকা স্ট্যান্ডার্ড লাইব্রেরির প্রোটোটাইপ ডিক্লেয়ারেশনের মাধ্যমেই তার অন্তর্গত সকল ফাংশনের উল্লেখ হয়ে যায়, আলাধা করে ফাংশনের প্রোটোটাইপের উল্লেখ করতে হয়না।)
- ফাংশন কল (সাধারনত প্রধান ফাংশন
main()-এর দ্বারা কল করা হয়, ইনপুট প্যারামিটারে মান প্রেরনের জন্য।) - ফাংশন সংজ্ঞা (স্ট্যান্ডার্ড লাইব্রেরির মধ্যে আগের থেকেই ফাংশনের মূল গঠনকাঠামো প্রস্তুত থাকে তাই আলাধা করে ফাংশনের গঠনকাঠামো প্রস্তুত করতে হয়না।)
বেশিরভাগ সময়, একটি ফাংশনের প্রোটোটাইপ দেখলে বোঝা যায় যে ফাংশন কল করার পর কীভাবে তার মধযে ইনপুট প্যারামিটারের প্রবেশ করানো হবে এবং কীভাবে সেই ফাংশনের আউটপুট ফেরত আসবে। অর্থাৎ যেকোন ফাংশনের প্রোটোটাইপ তার ইনপুট ও আউটপুটের প্রকৃতি বোধগম্য করতে সহায়তা করে।
এবার আমরা কিছু উদাহরনের সাহায্যে দেখি কিভাবে বিভিন্ন কম্পিউটার প্রোগ্রামিং ভাষায় স্ট্যান্ডার্ড লাইব্রেরি -এর প্রোটোটাইপ ঘোষনা করা হয়। ধরা যাক, কোন প্রোগ্রামে আমরা কোন গানিতিক সমস্যার সমাধান করতে চাই যার জন্য উপযুক্ত ফাংশনটি সংরক্ষিত আছে স্ট্যান্ডার্ড ম্যাথ লাইব্রেরি নামক স্ট্যান্ডার্ড লাইব্রেরি -তে যেখানে মূলত কম্পিউটার প্রোগ্রামে ব্যাবহৃত সকল গানিতিক সমস্যার সমাধানের জন্য বিবিধ ফাংশন সংরক্ষিত আছে। তাহলে এই লাইব্রেরির ফাংশন ব্যাবহার করতে হলে সবার আগে আমাদের প্রোগ্রামের শীর্ষে এই লাইব্রেরির উল্লেখ করতে হবে প্রোটোটাইপ ডিক্লেয়ারেশনের মাধ্যমে। এবার সি++, সি শার্প, জাভা, পাইথন ও সুইফট -এই বিবিধ প্রোগ্রামিং ভাষায় আমরা কিভাবে স্ট্যান্ডার্ড ম্যাথ লাইব্রেরি -এর প্রোটোটাইপের উল্লেখ করব, তা নিম্নের কোডে দেওয়া হল,
| কম্পিউটার ভাষা | স্ট্যান্ডার্ড ম্যাথ লাইব্রেরি ডিক্লেয়ারেশন |
|---|---|
| সি++ | #include <cmath>std::abs(number);
|
| সি শার্প | Math.Abs(number);
|
| জাভা | Java.lang.Math.abs(number)
|
| জাভাস্ক্রিপ্ট | Math.abs(number);
|
| পাইথন | abs(number)
|
| সুইফট | abs(number)
|
মূলত এভাবেই বিভিন্ন প্রোগ্রামিং ভাষায় বিবিধ স্ট্যান্ডার্ড লাইব্রেরি -এর প্রোটোটাইপ -এর ঘোষনা বা উল্লেখ করা হয়।
আধুনিক প্রোগ্রামিং ভাষায় স্ট্যান্ডার্ড লাইব্রেরি -এর কোন ফাংশনের দীর্ঘ ও জটিল নামের পরিবর্তে প্রোগ্রামাররা সংক্ষিপ্ত নাম ব্যাবহারের উপর জোর দেন যেমন, কিছু কিছু কম্পিউটার প্রোগ্রামে absolute -এর পরিবর্তে abs -এর ব্যাবহার দেখা যায়। উদাহরন হিসাবে ধরা যাক কোন কম্পিউটার প্রোগ্রামে যদি আমার দুটি ইন্টেজার ভেরিয়েবল apple এবং banana -এর উপস্থিতি বর্তমান এবং কোন প্রোগ্রামার banana ভেরিয়েবলের absolute বা চরম মান apple নামক ভেরিয়েবলে সংরক্ষিত করতে চায়, তাহলে তাকে নিচের মতো কোড লিখতে হবে:
apple = abs(banana);
যদিও এইরূপ সংক্ষিপ্ত নামকরন কম্পিউটার প্রোগ্রামের আইডেন্টিফায়ার নামকরনের নিয়মের পরিপন্থি, তবুও বর্তমানে এইরূপ সংক্ষিপ্ত নাম বহুল পরিমানে ব্যাবহৃত হচ্ছে।
সুতরাং, আপনি যদি কোন ফাংশনের প্রোটোটাইপ সম্পর্কে জেনে থাকেন তবে সেই ফাংশনের মূল গঠনপ্রকৃতি (সংজ্ঞা) অথবা তার অন্তর্লিখিত কোড বা নির্দেশনা (অর্থাৎ মূল ফাংশন কীভাবে কাজ করে) -এইসকল তথ্য না জেনেও কিভাবে ফাংশনটিকে কল করা হবে এবং কিভাবে ফাংশন থেকে প্রত্যাশিত আউটপুট মান ফেরত পাওয়া যাবে সেই সকল কিছু আপনার অবগত থাকবে। কারণ, যেকোন ফাংশনের সংজ্ঞা বা তার সম্পর্কিত সকল তথ্য প্রোগ্রামের মধ্যে অথবা হেডারে উল্লিখিত স্ট্যান্ডার্ড লাইব্রেরি -তে, থাকে।
পরিভাষাসমূহ
[সম্পাদনা]abs- একটি স্ট্যান্ডার্ড লাইব্রেরির ফাংশন, যা চরম মান বোঝাতে ব্যবহৃত হয়।
- স্থিরবিশ্বাস বা কনফিডেন্স
- স্ট্যান্ডার্ড লাইব্রেরির ফাংশনগুলি সঠিকভাবে কাজ করবে — এই স্থির বিশ্বাস বা নির্ভরতা।
- স্ট্যান্ডার্ড লাইব্রেরি
- নির্দিষ্ট কিছু কাজের জন্য তৈরি ফাংশনের একটি সংগ্রহ, যা একটি প্রোগ্রামিং ভাষায় সার্বজনীন ব্যবহারের জন্য যুক্ত করা হয়।