متغیرها و انواع داده 🎯
اینجا یاد میگیریم دادهها رو چطور ذخیره و مدیریت کنیم!
متغیر چیست؟ 🤔
متغیر مثل یک جعبه است که میتوانیم دادههایمان را در آن نگهداری کنیم. هر جعبه (متغیر) یک برچسب (نام) و یک نوع مشخص دارد.
🎯 مثال از زندگی واقعی
فکر کنید شما یک کتابخانه دارید. هر قفسه برای نوع خاصی از کتاب است:
• قفسه رمان → فقط کتابهای رمان
• قفسه علمی → فقط کتابهای علمی
• قفسه تاریخ → فقط کتابهای تاریخی
// تعریف متغیر: مثل گذاشتن برچسب روی جعبه
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
// روش معمولی - ما نوع را مشخص میکنیم
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 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 متغیر استفاده کنید
using System;
class Program
{
static void Main()
{
// مقادیر ثابت
const string UNIVERSITY_NAME = "دانشگاه تهران";
const string FACULTY = "مهندسی کامپیوتر";
// اطلاعات دانشجو - استفاده از انواع مختلف
string firstName = "سارا";
string lastName = "محمدی";
var age = 21; // استفاده از var
int studentId = 98123456;
var gpa = 18.75; // استفاده از var
bool isActive = true;
// محاسبه سال ورود
int currentYear = 2024;
int entranceYear = currentYear - 4;
// نمایش کارت شناسایی
Console.WriteLine("╔══════════════════════════════════════╗");
Console.WriteLine("║ کارت شناسایی دانشجو ║");
Console.WriteLine("╠══════════════════════════════════════╣");
Console.WriteLine($"║ دانشگاه: {UNIVERSITY_NAME} ║");
Console.WriteLine($"║ دانشکده: {FACULTY} ║");
Console.WriteLine($"║ نام: {firstName} {lastName} ║");
Console.WriteLine($"║ سن: {age} سال ║");
Console.WriteLine($"║ شماره دانشجویی: {studentId} ║");
Console.WriteLine($"║ سال ورود: {entranceYear} ║");
Console.WriteLine($"║ معدل: {gpa} ║");
Console.WriteLine($"║ وضعیت: {(isActive ? "فعال" : "غیرفعال")} ║");
Console.WriteLine("╚══════════════════════════════════════╝");
Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
Console.ReadKey();
}
}
🛒 تمرین 2: سیستم فروشگاه ساده
یک برنامه برای محاسبه قیمت خرید بنویسید:
- • نام محصول و قیمت واحد (string, double)
- • تعداد خریداری شده (int)
- • درصد تخفیف و مالیات (const)
- • محاسبه قیمت نهایی
- • نمایش فاکتور کامل
using System;
class Program
{
static void Main()
{
// تنظیمات ثابت فروشگاه
const string STORE_NAME = "فروشگاه دیجیکالا";
const double DISCOUNT_PERCENT = 15.0; // 15 درصد تخفیف
const double TAX_PERCENT = 9.0; // 9 درصد مالیات
// اطلاعات محصول
var productName = "گوشی سامسونگ";
var unitPrice = 12000000.0; // قیمت به تومان
int quantity = 2;
var customerName = "آقای احمدی";
// محاسبات
double totalPrice = unitPrice * quantity;
double discountAmount = totalPrice * (DISCOUNT_PERCENT / 100);
double priceAfterDiscount = totalPrice - discountAmount;
double taxAmount = priceAfterDiscount * (TAX_PERCENT / 100);
double finalPrice = priceAfterDiscount + taxAmount;
// نمایش فاکتور
Console.WriteLine("═══════════════════════════════════════════");
Console.WriteLine($" {STORE_NAME}");
Console.WriteLine("═══════════════════════════════════════════");
Console.WriteLine($"مشتری: {customerName}");
Console.WriteLine($"تاریخ: {DateTime.Now:yyyy/MM/dd}");
Console.WriteLine("───────────────────────────────────────────");
Console.WriteLine($"محصول: {productName}");
Console.WriteLine($"قیمت واحد: {unitPrice:N0} تومان");
Console.WriteLine($"تعداد: {quantity} عدد");
Console.WriteLine($"جمع کل: {totalPrice:N0} تومان");
Console.WriteLine($"تخفیف ({DISCOUNT_PERCENT}%): -{discountAmount:N0} تومان");
Console.WriteLine($"مالیات ({TAX_PERCENT}%): +{taxAmount:N0} تومان");
Console.WriteLine("───────────────────────────────────────────");
Console.WriteLine($"مبلغ نهایی: {finalPrice:N0} تومان");
Console.WriteLine("═══════════════════════════════════════════");
Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
Console.ReadKey();
}
}
📊 تمرین 3: تحلیل نمرات دانشجو
برنامهای برای تحلیل نمرات یک دانشجو بنویسید:
- • نمرات 4 درس مختلف (double)
- • محاسبه میانگین
- • تعیین وضعیت قبولی (bool)
- • نمایش گزارش کامل با رنگبندی
using System;
class Program
{
static void Main()
{
// تنظیمات ثابت
const double PASSING_GRADE = 10.0;
const string STUDENT_NAME = "مریم کریمی";
const string SEMESTER = "ترم اول 1403";
// نمرات دروس
var mathGrade = 17.5;
var physicsGrade = 15.25;
var chemistryGrade = 18.0;
var englishGrade = 16.75;
// محاسبات
double totalGrades = mathGrade + physicsGrade + chemistryGrade + englishGrade;
var average = totalGrades / 4.0;
bool isPassed = average >= PASSING_GRADE;
// تعیین رتبه
string grade;
if (average >= 17)
grade = "عالی";
else if (average >= 15)
grade = "خوب";
else if (average >= 12)
grade = "متوسط";
else if (average >= PASSING_GRADE)
grade = "قبولی";
else
grade = "مردودی";
// نمایش گزارش
Console.WriteLine("╔══════════════════════════════════════════╗");
Console.WriteLine("║ گزارش نمرات ║");
Console.WriteLine("╠══════════════════════════════════════════╣");
Console.WriteLine($"║ دانشجو: {STUDENT_NAME} ║");
Console.WriteLine($"║ ترم: {SEMESTER} ║");
Console.WriteLine("╠══════════════════════════════════════════╣");
Console.WriteLine($"║ ریاضی: {mathGrade,6} ║");
Console.WriteLine($"║ فیزیک: {physicsGrade,6} ║");
Console.WriteLine($"║ شیمی: {chemistryGrade,6} ║");
Console.WriteLine($"║ انگلیسی: {englishGrade,6} ║");
Console.WriteLine("╠══════════════════════════════════════════╣");
Console.WriteLine($"║ میانگین: {average,6:F2} ║");
Console.WriteLine($"║ وضعیت: {(isPassed ? "قبول" : "مردود"),6} ║");
Console.WriteLine($"║ رتبه: {grade,6} ║");
Console.WriteLine("╚══════════════════════════════════════════╝");
// پیام تبریک یا تسلیت
if (isPassed)
{
Console.WriteLine("\n🎉 تبریک! شما با موفقیت قبول شدید!");
if (average >= 17)
Console.WriteLine("💫 عملکرد شما فوقالعاده بوده است!");
}
else
{
Console.WriteLine("\n😔 متاسفانه در این ترم قبول نشدید.");
Console.WriteLine("💪 ولی ناامید نشید، ترم بعد بهتر خواهد بود!");
}
Console.WriteLine("\nبرای خروج کلیدی را فشار دهید...");
Console.ReadKey();
}
}