সি# প্রোগ্রামিং ভাষা

সি#("সি সার্প" উচ্চারিত হয়) একটি সহজ, আধুনিক, অবজেক্ট-অরিয়েন্টেড এবং টাইপ-নিরাপদ(type-safe) প্রোগ্রামিং ভাষা। সি এবং সি++ প্রোগ্রামিং থেকে মূলত সি# প্রোগ্রামিং ভাষার উৎপত্তি। এছাড়া সি, সি++, জাভা এবং জাভাস্ক্রিপ্ট এর পরেই এটি বেশ পরিচিত ভাষা।
বিভিন্ন ধরণের এপ্লিকেশন নির্মাণের জন্য C# কে ডিজাইন করা হয়েছে এবং যা .NET ফ্রেমওয়ার্কের উপর রান হয়।
C# একটি অবজেক্ট-অরিয়েন্টেড প্রোগ্রামিং ভাষা। যাইহোক, C# কম্পোনেন্ট-অরিয়েন্টেড প্রোগ্রামিংও সমর্থন করে। সমসাময়িক সফটওয়্যার ডিজাইন ক্রমবর্ধমানভাবে স্বতঃপ্রযুক্ত(self-contained) এবং স্ব-কার্যকারিতা(self-describing) প্যাকেজের সমন্বয়ে গঠিত সফটওয়্যার কম্পোনেন্ট(components) এর উপর নির্ভর করে।
আর এ কম্পোনেন্টগুলো প্রোপার্টি, মেথড এবং ইভেন্ট এর সমন্বয়ে একটি প্রোগ্রামিং মডেল তৈরি করে। এই কম্পোনেন্টগুলোর নিজস্ব কিছু বৈশিষ্ট্য(attributes) থাকে যেগুলো কম্পোনেন্ট সম্পর্কে ঘোষণামূলক তথ্য প্রদান করে এবং এই কম্পোনেন্টগুলো তাদের নিজস্ব ডকুমেন্টেশন অন্তর্ভুক্ত করে।
কম্পোনেন্টের এই ধারণাকে সরাসরি সমর্থন করার জন্য সি# ভাষা গঠন সরবরাহ করে। এছাড়া সফটওয়্যার সামগ্রি(component) তৈরি এবং ব্যবহার করার জন্য C# কে খুবই সহজ করে তৈরি করা হয়েছে।
C# এর কিছু উপাদান বা বৈশিষ্ট্য দৃঢ় এবং টেকসই এপ্লিকেশন নির্মাণে সহযোগীতা করে। যেমনঃ
- Garbage collection: স্বয়ংক্রিয়ভাবে অনধিগম্য এবং অব্যবহৃত অবজেক্ট দ্বারা দখলকৃত মেমরি পুনরুদ্ধার(reclaim) করে।
- exception handling: ত্রুটি সনাক্তকরণ এবং পুনরুদ্ধারের জন্য একটি সুসংহত এবং সম্প্রসারণযোগ্য (structured and extensible) পদ্ধতি সরবরাহ করে।
- type-safe: ভাষাটির টাইপ-সেফ ডিজাইন অনির্দিষ্ট ভ্যারিয়েবল থেকে পাঠ, array কে তার সীমানার বাইরে থেকে ইন্ডেক্স, অথবা অনির্ধারিত টাইপ কাস্ট(type cast) সম্পাদন অসম্ভব করে তুলে।
C# এর রয়েছে একটি ইউনিফাইড টাইপ সিস্টেম(unified type system)। যার কারণে প্রিমিটিভ(primitive ) টাইপ(যেমন- int
এবং double
) সহ সমস্ত C# টাইপ একটি মূল object
টাইপ এর উত্তরাধিকারী।
সুতরাং সকল টাইপ এক সেট সাধারণ অপারেশন সরবরাহ করে এবং যেকোন টাইপের মান(value) একটি সুসংগত পদ্ধতিতে সংরক্ষণ, পরিবহন, এবং পরিচালিত হতে পারে। অধিকন্তু, C# ব্যবহারকারী কর্তৃক সংজ্ঞায়িত রেফারেন্স এবং ভ্যালু টাইপ উভয়ই সমর্থন এর মাধ্যমে অবজেক্টকে ডাইনামিকভাবে বরাদ্দ করার সম্মতি দেয়।
C# প্রোগ্রাম এবং লাইব্রেরী সময়ের সাথে সাথে যেন সামঞ্জস্যপূর্ণভাবে বিবর্তিত হতে পারে তা নিশ্চিত করতে C# এর নকশাতে সংস্করণের উপর ব্যপক গুরুত্ব দেওয়া হয়েছে।
অনেক প্রোগ্রামিং ল্যাংগুয়েজ এই সমস্যাটির দিকে খুব সামান্য মনোযোগ দেয়। ফলস্বরূপঃ নির্ভরশীল লাইব্রেরিগুলোর নতুন সংস্করণ চালু হওয়ার সাথে সাথে ঐসব প্রোগ্রামিং ল্যাংগুয়েজ দ্বারা লিখিত প্রোগ্রামগুলি প্রয়োজনের তুলনায় বেশি ভেঙ্গে যায়।
কিন্তু C# এর ডিজাইন সংস্করণের উপর ভিত্তি করে সরাসরি প্রভাবিত হয় যা আলাদা virtual
এবং override
মডিফায়ার, method overload resolution এর নীতি এবং explicit interface member declaration এর সাপোর্ট অন্তর্ভুক্ত করে।
"Hello, World" প্রোগ্রাম
নতুন কোন প্রোগ্রামিং ল্যাঙ্গুয়েজ প্রবর্তন করার জন্য ঐতিহ্যগতভাবে "Hello, World" প্রোগ্রাম ব্যবহার করা হয়। নিম্নে C# এ "Hello, World" প্রোগ্রাম দেখানো হলোঃ
using System;
class Hello
{
static void Main()
{
Console.WriteLine("Hello, World");
}
}
C# সোর্স ফাইল সাধারণত .cs
এক্সটেনশন দিয়ে লেখা হয়। ধরে নিলাম, আমাদের "Hello, World" প্রোগ্রামটি hello.cs
ফাইলে সংরক্ষিত আছে। এই প্রোগ্রামটিকে কমান্ড লাইন থেকে নিম্নের কমান্ড ব্যবহার করে কম্পাইল(compile) করা যেতে পারেঃ
csc hello.cs
যা hello.exe নামে সম্পাদনযোগ্য একটি আসেম্বলি কোড উৎপন্ন করে। এই এপ্লিকেশনটি রান করানোর পরে নিম্নোক্ত আউটপুট পাওয়া যাবে।
Hello, World
csc
কমান্ড সম্পূর্ণ ফ্রেমওয়ার্কের জন্য কম্পাইল করে। তাই সকল প্লাটফর্মে এই কমান্ডের মাধ্যমে কম্পাইল নাও হতে পারে।
C# ল্যাঙ্গুয়েজ সম্পর্কে আরও অনেক কিছুই জানার আছে। নিম্নের টপিক্সগুলি C# ল্যাঙ্গুয়েজের বিভিন্ন উপাদান(element) সম্পর্কে সংক্ষিপ্ত ধারণা প্রদান করে। আমাদের এই টপিক্সগুলির সংক্ষিপ্ত বর্ণনা C# ল্যাঙ্গুয়েজের সমস্ত উপাদান সম্পর্কে মৌলিক তথ্য সরবরাহ করবে এবং আপনাকে C# ল্যাঙ্গুয়েজের উপাদানগুলির আরও গভীরে যেতে সহায়তা করবে।
এই অধ্যায়ে আপনি C# ল্যাঙ্গুয়েজের গঠন(structure) সম্পর্কে জানবেন। যেমন- program, namespace, type, member এবং assembly।
এই অধ্যায়ে আপনি C# ল্যাঙ্গুয়েজের value type, reference type এবং variable সম্পর্কে জানবেন।
এই অধ্যায়ে আপনি সি# এক্সপ্রেশন সম্পর্কে জানবেন। operand এবং operator এর সমন্বয়ে Expression নির্মিত হয়। এক্সপ্রেশন ভ্যালু উৎপন্ন করে।
এই অধ্যায়ে আপনি সি# স্টেটমেন্ট সম্পর্কে জানবেন। কোন প্রোগ্রামের কার্যাবলী প্রকাশের জন্য statement ব্যবহার করা হয়।
এই অধ্যায়ে আপনি সি# এর ক্লাস, অবজেক্ট এবং মেম্বার সম্পর্কে জানবেন। C# ল্যাঙ্গুয়েজ এর সবচেয়ে মৌলিক টাইপ হলো class। আর object হলো ক্লাসের দৃষ্টান্ত(instance)। member এর মাধ্যমে ক্লাস নির্মিত হয়।
এই অধ্যায়ে আপনি সি# Struct সম্পর্কে জানবেন। Struct হলো একটি ডেটা স্ট্রাকচার যা ক্লাসের মত না এবং এটি ভ্যালু টাইপের।
এই অধ্যায়ে আপনি সি# Array সম্পর্কে জানবেন। Array হলো একটি ডেটা স্ট্রাকচার যা একাধিক ভ্যারিয়েবল ধারণ করে যেগুলোকে সংখ্যা সূচক(index) এর দ্বারা অ্যাক্সেস করা হয়।
এই অধ্যায়ে আপনি সি# ইন্টারফেস সম্পর্কে জানবেন। Interface একটি চুক্তি সঙ্গায়িত করে যা class এবং struct দ্বারা বাস্তবায়িত হয়। একটি ইন্টারফেসে method, property, event এবং indexer থাকতে পারে।
একটি ইন্টারফেসে সঙ্গায়িত উপাদনগুলোকে(members) ইন্টারফেস নিজে বাস্তবায়ন ঘটায় না। এটি শুধুমাত্র উপাদনগুলোকে নির্ধারণ করে দেয়। এই উপাদনগুলো(members) অবশ্যই class এবং struct কর্তৃক বাস্তবায়ন হতে হবে।
এই অধ্যায়ে আপনি enum type সম্পর্কে জানবেন। Enum type হলো এক সেট কনস্ট্যান্ট এর স্বতন্ত্র ভ্যালু টাইপ(value type)
এই অধ্যায়ে আপনি Delegate টাইপ সম্পর্কে জানবেন। delegate type নির্দিষ্ট প্যারামিটার এবং রিটার্ন টাইপসহ একটি মেথড এর রেফারেন্স প্রদান করে। Delegate এর মাধ্যমে method কে entity হিসেবে বিবেচনা করা সম্ভব। Delegate কে ভ্যারিয়েবলে এসাইন করে প্যারামিটার হিসেবে ফাংশনের মধ্য দিয়ে অতিক্রম করানো যেতে পারে।
Delegate এর ধারণা অন্যান্য প্রোগ্রামিং ল্যাঙ্গুয়েজের ফাংশন পয়েন্টার এর মতই। কিন্ত এটি ফাংশন পয়েন্টার এর মত না। এটি object-oriented এবং type-safe.
এই অধ্যায়ে আপনি সি# এট্রিবিউট সম্পর্কে জানবেন। Attribute একটি প্রোগ্রামকে টাইপ, মেম্বার এবং অন্যান্য এনটিটি সম্পর্কে বিভিন্ন ধরণের ঘোষণামূলক তথ্য নির্ধারণের জন্য সক্ষম করে।