No history yet

Syntax aur Control Flow

C# کی بنیادی ساخت اور نحو

C# میں ہر پروگرام کی ایک مخصوص ساخت ہوتی ہے۔ جب آپ ایک نیا کنسول ایپلیکیشن بناتے ہیں، تو آپ کو کچھ پہلے سے لکھا ہوا کوڈ نظر آئے گا۔ یہ C# پروگرام کا بنیادی ڈھانچہ ہے۔

using System;

namespace HelloWorldApp
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

آئیے اس ساخت کو سمجھیں۔ using System; ایک ہدایت ہے جو کمپائلر کو بتاتی ہے کہ ہم System نامی لائبریری استعمال کر رہے ہیں۔ آپ کے کوڈ کے لیے ایک کنٹینر کی طرح کام کرتا ہے، جو ناموں کے تصادم سے بچنے میں مدد دیتا ہے۔ class آبجیکٹ اور ڈیٹا کو منظم کرنے کا ایک طریقہ ہے۔ آخر میں، ہر C# ایپلیکیشن کا ایک داخلی نقطہ (entry point) ہوتا ہے، جو میتھڈ ہے۔ آپ کا پروگرام یہیں سے چلنا شروع ہوتا ہے۔

ویری ایبلز اور ڈیٹا کی اقسام

ویری ایبلز ڈیٹا کو ذخیرہ کرنے کے لیے میموری میں نامزد مقامات ہیں۔ C# ایک مضبوط قسم کی زبان (statically-typed language) ہے، جس کا مطلب ہے کہ آپ کو ویری ایبل کی قسم کا اعلان کرنا پڑتا ہے اور اسے بعد میں تبدیل نہیں کیا جا سکتا۔ یہ غلطیوں کو کم کرنے اور کوڈ کو زیادہ قابل اعتماد بنانے میں مدد کرتا ہے۔

Data Typeوضاحتمثال
intمکمل اعداد (integers) کو ذخیرہ کرتا ہے۔int age = 30;
doubleاعشاریہ والے اعداد (floating-point numbers) کو ذخیرہ کرتا ہے۔double price = 19.99;
stringحروف کی ترتیب (text) کو ذخیرہ کرتا ہے۔string name = "Ali";
boolصرف دو قدریں رکھ سکتا ہے: true یا false۔bool isLoggedIn = true;

ایک قسم سے دوسری قسم میں تبدیل کرنے کو ٹائپ کاسٹنگ کہتے ہیں۔ جب ڈیٹا کا کوئی نقصان نہ ہو تو C# خود بخود تبدیلی کر دیتا ہے (Implicit Casting)۔ مثال کے طور پر، ایک int کو double میں ڈالنا محفوظ ہے۔

int myInt = 9;
double myDouble = myInt; // خودکار یا ضمنی کاسٹنگ
Console.WriteLine(myDouble); // آؤٹ پٹ: 9

لیکن جب ڈیٹا کے ضائع ہونے کا خطرہ ہو، جیسے double کو int میں تبدیل کرنا، تو آپ کو واضح طور پر بتانا پڑتا ہے کہ آپ یہ کرنا چاہتے ہیں (Explicit Casting)۔

double myDouble = 9.78;
int myInt = (int)myDouble; // واضح یا صریح کاسٹنگ
Console.WriteLine(myInt); // آؤٹ پٹ: 9

کنٹرول فلو

پروگرام کا فلو منطق (logic) اور تکرار (iteration) کے ذریعے کنٹرول ہوتا ہے۔ مشروط بیانات (conditional statements) آپ کو مختلف حالات کی بنیاد پر مختلف کوڈ بلاکس چلانے کی اجازت دیتے ہیں۔

if-else کا استعمال ایک یا دو شرائط کی جانچ کے لیے بہترین ہے، جبکہ switch اس وقت زیادہ کارآمد ہوتا ہے جب آپ کو ایک ہی ویری ایبل کی متعدد ممکنہ قدروں کی جانچ کرنی ہو۔

// if-else کی مثال
int time = 20;
if (time < 18) 
{
  Console.WriteLine("Good day.");
} 
else 
{
  Console.WriteLine("Good evening.");
}

// switch کی مثال
int day = 4;
switch (day)
{
  case 6:
    Console.WriteLine("Today is Saturday.");
    break;
  case 7:
    Console.WriteLine("Today is Sunday.");
    break;
  default:
    Console.WriteLine("Looking forward to the Weekend.");
    break;
}

لوپس (Loops) آپ کو ایک کوڈ بلاک کو بار بار چلانے کی اجازت دیتے ہیں۔ for لوپ اس وقت مفید ہے جب آپ جانتے ہوں کہ آپ کو کتنی بار تکرار کرنی ہے۔ while لوپ اس وقت تک چلتا ہے جب تک کہ ایک مخصوص شرط پوری ہوتی رہے۔

// for لوپ 5 بار چلے گا
for (int i = 0; i < 5; i++)
{
  Console.WriteLine(i);
}

// while لوپ بھی 5 بار چلے گا
int j = 0;
while (j < 5)
{
  Console.WriteLine(j);
  j++;
}

foreach لوپ خاص طور پر مجموعوں (collections) جیسے کہ arrays یا lists پر تکرار کرنے کے لیے ڈیزائن کیا گیا ہے۔ یہ استعمال میں آسان ہے اور غلطی کا امکان کم ہوتا ہے کیونکہ یہ انڈیکس کو خود سنبھالتا ہے۔

string[] cars = {"Volvo", "BMW", "Ford", "Mazda"};
foreach (string car in cars)
{
  Console.WriteLine(car);
}

ویلیو ٹائپس بمقابلہ ریفرنس ٹائپس

C# میں، ڈیٹا کی اقسام کو دو بڑی کیٹیگریز میں تقسیم کیا جاتا ہے: ویلیو ٹائپس اور ریفرنس ٹائپس۔ یہ سمجھنا میموری کے استعمال اور کارکردگی کے لیے بہت ضروری ہے۔

ویلیو ٹائپس (Value Types) اپنی قدر (value) براہ راست اپنے اندر رکھتی ہیں۔ جب آپ ایک ویلیو ٹائپ ویری ایبل کو دوسرے کو تفویض کرتے ہیں، تو قدر کی کاپی بنتی ہے۔ int, double, bool, اور structs ویلیو ٹائپس ہیں۔ یہ عام طور پر اسٹیک (Stack) پر ذخیرہ ہوتی ہیں، جو ایک تیز، LIFO (Last-In, First-Out) میموری کا ڈھانچہ ہے۔

ریفرنس ٹائپس (Reference Types) اپنی اصل قدر کو ذخیرہ نہیں کرتیں۔ اس کے بجائے، وہ میموری میں اس مقام کا حوالہ (reference) رکھتی ہیں جہاں اصل ڈیٹا ذخیرہ ہوتا ہے۔ string, arrays, اور class آبجیکٹ ریفرنس ٹائپس ہیں۔ یہ ڈیٹا پر ذخیرہ ہوتا ہے، جو ایک بڑا، زیادہ متحرک میموری ایریا ہے۔ اسٹیک پر صرف اس ہیپ میموری کا پتہ ذخیرہ ہوتا ہے۔

اس فرق کا مطلب یہ ہے کہ جب آپ ایک ریفرنس ٹائپ ویری ایبل کو کاپی کرتے ہیں، تو آپ اصل ڈیٹا کو کاپی نہیں کر رہے ہوتے، بلکہ صرف اس کا حوالہ کاپی کر رہے ہوتے ہیں۔ دونوں ویری ایبلز میموری میں ایک ہی آبجیکٹ کی طرف اشارہ کر رہے ہوتے ہیں۔

Quiz Questions 1/6

C# ایپلیکیشن کا داخلی نقطہ (entry point) کون سا میتھڈ ہوتا ہے؟

Quiz Questions 2/6

C# کو "statically-typed language" کہنے کا کیا مطلب ہے؟

اب آپ C# کے بنیادی نحو، ڈیٹا کی اقسام، اور کنٹرول فلو سے واقف ہو چکے ہیں۔ یہ بنیادی بلاکس آپ کو زیادہ پیچیدہ اور طاقتور پروگرام بنانے کی بنیاد فراہم کرتے ہیں۔