۲

متغیرها و انواع داده 🎯

اینجا یاد می‌گیریم داده‌ها رو چطور ذخیره و مدیریت کنیم!

متغیر چیست؟ 🤔

متغیر مثل یک جعبه است که می‌توانیم داده‌هایمان را در آن نگهداری کنیم. هر جعبه (متغیر) یک برچسب (نام) و یک نوع مشخص دارد.

🎯 مثال از زندگی واقعی

فکر کنید شما یک کتابخانه دارید. هر قفسه برای نوع خاصی از کتاب است:
• قفسه رمان → فقط کتاب‌های رمان
• قفسه علمی → فقط کتاب‌های علمی
• قفسه تاریخ → فقط کتاب‌های تاریخی

مثال ساده از متغیر
// تعریف متغیر: مثل گذاشتن برچسب روی جعبه
string bookTitle;        // جعبه‌ای برای نگهداری نام کتاب
int pageCount;          // جعبه‌ای برای نگهداری تعداد صفحات
bool isAvailable;       // جعبه‌ای برای نگهداری وضعیت موجودی

// قرار دادن مقدار در جعبه‌ها
bookTitle = "هری پاتر";
pageCount = 350;
isAvailable = true;

// نمایش محتویات جعبه‌ها
Console.WriteLine("نام کتاب: " + bookTitle);
Console.WriteLine("تعداد صفحات: " + pageCount);
Console.WriteLine("موجود است؟ " + isAvailable);

چطور متغیر تعریف کنیم؟ ✍️

در C# برای تعریف متغیر، باید سه چیز را مشخص کنیم:

🏷️

۱. نوع داده

چه نوع اطلاعاتی؟

📝

۲. نام متغیر

چی صداش کنیم؟

💎

۳. مقدار اولیه

چه مقداری بذاریم؟

ساختار کامل تعریف متغیر
// ساختار: نوع_داده نام_متغیر = مقدار_اولیه;
//          ↑         ↑          ↑
//       نوع داده   نام      مقدار

int studentAge = 20;           // عدد صحیح
string studentName = "احمد";   // متن
bool isPassed = true;          // درست یا غلط
double grade = 18.5;           // عدد اعشاری

// می‌توانیم بعداً مقدار را تغییر دهیم
studentAge = 21;               // حالا 21 ساله شده
studentName = "محمد احمدی";    // اسم کامل
isPassed = false;              // متأسفانه قبول نشده
grade = 17.25;                 // نمره جدید

⚠️ نکات مهم

  • • نوع متغیر بعد از تعریف قابل تغییر نیست
  • • نام متغیر نباید با عدد شروع شود
  • • نام متغیر نباید فاصله داشته باشد
  • • از کلمات کلیدی C# نمی‌توان به عنوان نام استفاده کرد

انواع داده‌های اصلی در C# 📊

C# انواع مختلفی از داده‌ها را پشتیبانی می‌کند. هر نوع برای کاربرد خاصی طراحی شده است:

📝 string - برای متن

برای نگهداری کلمات، جملات و هر نوع متنی استفاده می‌شود.

// تعریف متغیرهای متنی
string firstName = "علی";
string lastName = "احمدی";
string fullName = firstName + " " + lastName; // ترکیب دو متن
string message = "سلام دنیا!";
string emptyText = ""; // متن خالی

// نمایش
Console.WriteLine("نام: " + firstName);
Console.WriteLine("نام خانوادگی: " + lastName);
Console.WriteLine("نام کامل: " + fullName);
Console.WriteLine(message);

🔢 int - برای اعداد صحیح

برای اعداد بدون اعشار مثل سن، تعداد، امتیاز و غیره.

// تعریف متغیرهای عددی صحیح
int age = 25;
int score = 100;
int numberOfStudents = 30;
int temperature = -5; // عدد منفی هم مجاز است
int zero = 0;

// عملیات ریاضی
int sum = 10 + 20;        // جمع: 30
int difference = 50 - 15; // تفریق: 35
int product = 6 * 7;      // ضرب: 42
int division = 20 / 4;    // تقسیم: 5

// نمایش
Console.WriteLine("سن: " + age);
Console.WriteLine("امتیاز: " + score);
Console.WriteLine("جمع: " + sum);

🎯 double - برای اعداد اعشاری

برای اعداد با اعشار مثل قد، وزن، قیمت و محاسبات دقیق.

// تعریف متغیرهای اعشاری
double height = 175.5;     // قد به سانتی‌متر
double weight = 70.2;      // وزن به کیلوگرم
double price = 12.99;      // قیمت
double pi = 3.14159;       // عدد پی
double percentage = 85.7;  // درصد

// محاسبات اعشاری
double bmi = weight / ((height/100) * (height/100)); // محاسبه BMI
double total = price * 3;  // قیمت کل برای 3 عدد

// نمایش
Console.WriteLine("قد: " + height + " سانتی‌متر");
Console.WriteLine("وزن: " + weight + " کیلوگرم");
Console.WriteLine("BMI: " + bmi);

✅ bool - برای درست یا غلط

فقط دو مقدار دارد: true (درست) یا false (غلط). برای تصمیم‌گیری استفاده می‌شود.

// تعریف متغیرهای منطقی
bool isStudent = true;        // دانشجو است؟
bool isMarried = false;       // متأهل است؟
bool hasLicense = true;       // گواهینامه دارد؟
bool isOnline = false;        // آنلاین است؟

// مقایسه‌ها که نتیجه bool دارند
int age = 18;
bool isAdult = age >= 18;     // بزرگسال است؟ (true)
bool isChild = age < 13;      // کودک است؟ (false)

string name = "علی";
bool hasName = name != "";    // اسم دارد؟ (true)

// نمایش
Console.WriteLine("دانشجو است؟ " + isStudent);
Console.WriteLine("بزرگسال است؟ " + isAdult);
Console.WriteLine("کودک است؟ " + isChild);

🎮 مثال کامل: اطلاعات بازیکن

// اطلاعات کامل یک بازیکن
string playerName = "محمد حسینی";
int playerAge = 22;
double playerHeight = 180.5;
bool isActive = true;
int gamesPlayed = 15;
double averageScore = 18.7;
bool isTeamCaptain = false;

// نمایش اطلاعات
Console.WriteLine("=== اطلاعات بازیکن ===");
Console.WriteLine("نام: " + playerName);
Console.WriteLine("سن: " + playerAge + " سال");
Console.WriteLine("قد: " + playerHeight + " سانتی‌متر");
Console.WriteLine("وضعیت: " + (isActive ? "فعال" : "غیرفعال"));
Console.WriteLine("بازی‌های انجام شده: " + gamesPlayed);
Console.WriteLine("میانگین امتیاز: " + averageScore);
Console.WriteLine("کاپیتان تیم: " + (isTeamCaptain ? "بله" : "خیر"));

🔄 کلمه کلیدی var - تشخیص خودکار نوع

گاهی اوقات نوشتن نوع داده طولانی و تکراری است. کلمه کلیدی var به کامپایلر می‌گوید که خودش نوع متغیر را تشخیص دهد.

🎯 چطور کار می‌کند؟

کامپایلر با نگاه کردن به مقدار اولیه، نوع متغیر را تشخیص می‌دهد:
• اگر "سلام" باشد → string
• اگر 25 باشد → int
• اگر 18.5 باشد → double
• اگر true باشد → bool

مقایسه var با تعریف معمولی
// روش معمولی - ما نوع را مشخص می‌کنیم
string studentName = "علی احمدی";
int studentAge = 20;
double studentGrade = 17.5;
bool isPresent = true;

// روش var - کامپایلر نوع را تشخیص می‌دهد
var studentName2 = "سارا محمدی";  // خودکار string می‌شود
var studentAge2 = 19;            // خودکار int می‌شود
var studentGrade2 = 18.25;       // خودکار double می‌شود
var isPresent2 = false;          // خودکار bool می‌شود

// هر دو روش یکسان هستند!
Console.WriteLine("نام اول: " + studentName);
Console.WriteLine("نام دوم: " + studentName2);

✅ مزایای var

  • • کد کوتاه‌تر و خواناتر می‌شود
  • • وقت کمتری برای تایپ کردن
  • • در حلقه‌ها و عملیات پیچیده مفید است

⚠️ نکات مهم var

  • • حتماً باید مقدار اولیه داشته باشد
  • • فقط زمانی استفاده کنید که نوع واضح باشد
  • • نمی‌توان آن را null کرد (مگر با تنظیمات خاص)

🔒 کلمه کلیدی const - مقادیر ثابت

گاهی اوقات مقادیری داریم که هرگز تغییر نمی‌کنند، مثل نام دانشگاه، عدد پی، یا حداکثر تعداد دانشجو. برای این موارد از const استفاده می‌کنیم.

🎯 چرا const استفاده کنیم؟

• جلوگیری از تغییر اشتباهی مقادیر مهم
• کد قابل اعتمادتر و ایمن‌تر
• سرعت بیشتر در اجرا
• خوانایی بهتر کد

تعریف و استفاده از const
// تعریف مقادیر ثابت
const string UNIVERSITY_NAME = "دانشگاه تهران";
const string COUNTRY = "ایران";
const int MAX_STUDENTS_PER_CLASS = 30;
const int MIN_PASSING_GRADE = 10;
const double PI = 3.14159;
const bool IS_ONLINE_COURSE = true;

// استفاده از مقادیر ثابت
string welcomeMessage = "به " + UNIVERSITY_NAME + " خوش آمدید!";
int currentStudents = 25;
bool canAddMoreStudents = currentStudents < MAX_STUDENTS_PER_CLASS;

// نمایش اطلاعات
Console.WriteLine(welcomeMessage);
Console.WriteLine("حداکثر ظرفیت کلاس: " + MAX_STUDENTS_PER_CLASS);
Console.WriteLine("تعداد فعلی: " + currentStudents);
Console.WriteLine("می‌توان دانشجو اضافه کرد؟ " + canAddMoreStudents);
Console.WriteLine("حداقل نمره قبولی: " + MIN_PASSING_GRADE);

📋 قوانین const

  • • حتماً باید مقدار اولیه داشته باشد
  • • بعد از تعریف قابل تغییر نیست
  • • معمولاً با حروف بزرگ نوشته می‌شود
  • • فقط مقادیر ساده (string, int, double, bool) مجاز است
مثال کاربردی: تنظیمات بازی
// تنظیمات ثابت بازی
const string GAME_NAME = "ماجراجویی در فضا";
const string VERSION = "1.2.0";
const int MAX_LIVES = 3;
const int POINTS_PER_ENEMY = 100;
const double SPEED_MULTIPLIER = 1.5;
const bool DEBUG_MODE = false;

// متغیرهای قابل تغییر بازی
int currentLives = MAX_LIVES;
int totalScore = 0;
int enemiesDefeated = 0;

// شبیه‌سازی بازی
enemiesDefeated = 5;
totalScore = enemiesDefeated * POINTS_PER_ENEMY;
currentLives = currentLives - 1;

// نمایش وضعیت
Console.WriteLine("=== " + GAME_NAME + " ===");
Console.WriteLine("نسخه: " + VERSION);
Console.WriteLine("جان باقی‌مانده: " + currentLives + "/" + MAX_LIVES);
Console.WriteLine("دشمنان شکست خورده: " + enemiesDefeated);
Console.WriteLine("امتیاز کل: " + totalScore);

💪 تمرین‌های عملی

حالا وقتش رسیده که چیزهایی که یاد گرفتیم رو عملی کنیم! سه تمرین مختلف آماده کردم که هر کدوم یه جنبه از متغیرها رو تمرین می‌کنه.

🎯 تمرین 1: کارت شناسایی دانشجو

یک برنامه بنویسید که اطلاعات کامل یک دانشجو را ذخیره و نمایش دهد:

  • • نام و نام خانوادگی (string)
  • • سن و شماره دانشجویی (int)
  • • معدل (double)
  • • وضعیت فعال بودن (bool)
  • • از const برای نام دانشگاه استفاده کنید
  • • از var برای حداقل 2 متغیر استفاده کنید

🛒 تمرین 2: سیستم فروشگاه ساده

یک برنامه برای محاسبه قیمت خرید بنویسید:

  • • نام محصول و قیمت واحد (string, double)
  • • تعداد خریداری شده (int)
  • • درصد تخفیف و مالیات (const)
  • • محاسبه قیمت نهایی
  • • نمایش فاکتور کامل

📊 تمرین 3: تحلیل نمرات دانشجو

برنامه‌ای برای تحلیل نمرات یک دانشجو بنویسید:

  • • نمرات 4 درس مختلف (double)
  • • محاسبه میانگین
  • • تعیین وضعیت قبولی (bool)
  • • نمایش گزارش کامل با رنگ‌بندی