این کد یک مثال کامل از مدیریت دادههای متنی (Strings) در یک لیست است. بیایید قدمبهقدم مثل یک کارگردان که صحنه را میچیند، آن را بررسی کنیم:
۱. تعریف لیست (The Initialization)
View Source Code
در اینجا شما یک ظرف (Container) از نوع لیست ایجاد کردید که فقط رشتههای متنی (
string) را قبول میکند. در همان لحظه اول، دو نفر به نامهای Ali و reza را داخل این لیست قرار دادید. ۲. افزودن اعضای جدید (The Addition) View Source Code با استفاده از متد
.Add()، دو نفر دیگر را به صف اضافه کردید. حالا لیست شما شامل ۴ نام است. نکته مهم این است که در لیست، ترتیب حفظ میشود؛ یعنی "hasan" نفر سوم و "nahid" نفر چهارم لیست هستند. ۳. نمایش با حلقه (The Foreach Loop) View Source Code این بخش بسیار هوشمندانه است. حلقه
foreachمیگوید: «برو داخل لیست
namesو یکییکی نامها را بردار، اسمش را بگذار
nameو کد داخل
{} را برایش اجرا کن».
نتیجه: هر اسم در یک خط جدید و با یک علامت خطتیره (-) در کنارش چاپ میشود. این روش برای ساختن لیستهای ستونی عالی است. ۴. ترکیب و نمایش یکجا (The String Join) View Source Code در اینجا شما از متد
Joinاستفاده کردید تا تمام نامها را با یک علامت اسلش (
/) به هم گره بزنید و به یک تکرشته (String) تبدیل کنید. خروجی این خط:
Ali/ reza/ hasan/ nahid* علامت
\nهم باعث میشود که قبل از چاپ این خط، یک خط خالی ایجاد شود تا ظاهر کار مرتبتر باشد. ۵. توقف برنامه (The Pause) View Source Code برنامه در اینجا متوقف میشود و منتظر میماند تا شما کلیدی را فشار دهید. بدون این خط، پنجره سیاه کنسول بلافاصله بعد از چاپ نامها بسته میشد. --- یک نکته کوچک برای حرفهایتر شدن: در برنامهنویسی، نام متغیرها معمولاً با حروف کوچک شروع میشوند (مثل
allNameبه جای
AllName) تا با نام کلاسها اشتباه نشوند. این یک قرارداد دوستانه بین برنامهنویسان است!
بسیار عالی! حالا که یاد گرفتید چطور به لیست اضافه کنید و آن را نمایش دهید، وقت آن است که یاد بگیرید چطور لیست را مدیریت کنید.
درس جدید ما شامل سه بخش بسیار مهم است:
Remove (حذف کردن از لیست)
Sort (مرتبسازی بر اساس حروف الفبا)
Clear (خالی کردن کل لیست)
بیا این کد را با هم بررسی کنیم:
View Source Code
توضیح نکات جدید:
students.Sort():
این متد جادویی، تمام متنهای داخل لیست را به ترتیب حروف الفبا مرتب میکند. (اگر عدد بود، از کوچک به بزرگ مرتب میکرد).
students.Remove("Ali"):
دنبال کلمه "Ali" میگردد و اگر آن را پیدا کند، از لیست حذفش میکند.
students.RemoveAt(0):
این دستور خیلی سریعتر است چون مستقیماً سراغ قفسه شماره ۰ (اولین قفسه) میرود و هر چه داخلش هست را دور میاندازد.
_ _نکته: همیشه قبل از
RemoveAtچک کنید که لیست خالی نباشد (
Count > 0) تا برنامه خطا ندهد. students.Clear()*: مثل این است که لیست را کاملاً با پاککن پاک کنید. لیست باقی میماند اما تعداد اعضای آن صفر میشود. یک سوال برای اینکه مطمئن شویم متوجه شدی: اگر ما لیستی داشته باشیم شامل
{"C", "A", "B"} و دستور Sort()را روی آن اجرا کنیم، به نظر شما ترتیب نمایش در
foreachچطور خواهد بود؟
حالا که یاد گرفتید چطور به لیست اضافه کنید، آن را مرتب کنید و حذف کنید، وقت آن است که یاد بگیرید چطور در لیست جستجو کنید و به موقعیت (Index) هر آیتم دسترسی پیدا کنید.
در دنیای برنامهنویسی، این یکی از پرکاربردترین بخشهاست؛ مثلاً پیدا کردن یک کاربر در بین هزاران کاربر.
درس جدید: جستجو و پیدا کردن موقعیت (Search & Index)
بیا این کد ساده و کاربردی را با هم ببینیم:
View Source Code
توضیح نکات مهم این درس:
Contains("Green"):
این متد مثل یک بازرس عمل میکند. اگر "Green" در لیست باشد، مقدار True(درست) و اگر نباشد،
False(نادرست) برمیگرداند. این برای شرطهای
ifبسیار عالی است.
IndexOf("Blue"):
این متد به شما میگوید که "Blue" در کدام خانه لیست نشسته است.
* در این لیست، "Red" در خانه 0، و "Blue" در خانه 1 است. پس عدد 1 را چاپ میکند.
نکته طلایی (عدد 1-):
اگر از IndexOfبخواهید چیزی را پیدا کند که در لیست نیست (مثل Black در مثال بالا)، سیشارپ عدد 1- را برمیگرداند. این یعنی: «هر وقت خروجی 1- بود، بدان که آن آیتم پیدا نشد». چرا این درس مهم است؟ تصور کنید میخواهید یک نام را حذف کنید، اما اول باید مطمئن شوید که آن نام اصلاً در لیست هست یا نه. یا مثلاً میخواهید بدانید نفر چندم در صف است. یک تمرین کوچک برای خودت: سعی کن کدی بنویسی که اول چک کند اگر رنگ "Red" در لیست بود، آن را حذف کند. (راهنمایی: از ترکیب
ifو
Containsاستفاده کن).
مفهوم Get و Set در واقع مثل یک «نگهبان» برای متغیرهای کلاس عمل میکنند.
- Get:
یعنی «خواندن» یا «گرفتن» مقدار.
- Set:
یعنی «نوشتن» یا «مقداردهی» به متغیر.
در سیشارپ به اینها میگوییم Property (ویژگی).
یک مثال بسیار ساده (کلاس ماشین)
فرض کنید میخواهیم نام یک ماشین را ذخیره کنیم:
View Source Code
چرا از Get و Set استفاده میکنیم؟ (داستان نگهبان)
اگر فقط از متغیر ساده استفاده کنیم، هر کسی میتواند هر مقداری (حتی غلط) به آن بدهد. اما با
getو
setمیتوانیم شرط بگذاریم. به این مثال با شرط دقت کنید: View Source Code توضیح ساده: وقتی مینویسید user.Age = 25; بخش set اجرا میشود و عدد ۲۵ در متغیر ذخیره میشود. وقتی مینویسید Console.Write(user.Age); بخش get اجرا میشود تا عدد را به شما نشان دهد. کلمه
valueدر بخش set، همان عددی است که شما میخواهید به متغیر بدهید (در اینجا همان ۲۵). خلاصه: get: برای دیدن (خروجی). set: برای گذاشتن (ورودی). این مفهوم در لیستها هم خیلی کاربرد دارد؛ مثلاً وقتی میخواهید لیستی از «اشیاء» (مثل لیستی از ماشینها) بسازید. دوست دارید بدانید چطور یک لیست از کلاسها بسازیم؟
این کد یک مثال استاندارد و کامل از برنامهنویسی شیءگرا (OOP) در سیشارپ است. در اینجا شما به جای کار با متغیرهای ساده (مثل فقط یک نام یا فقط یک عدد)، یک موجودیت به نام «شخص» (Person) ساختهاید.
بیایید این کد را به ۵ بخش اصلی تقسیم کنیم:
۱. قالببندی (The Class Definition)
View Source Code
اینجا شما یک نقشه یا الگو کشیدهاید. میگویید: «هر کسی که در برنامه من یک Person محسوب میشود، حتماً باید یک کد شناسایی (Id)، یک نام (Name) و یک سن (Age) داشته باشد.»
* get/set: یعنی این ویژگیها قابل خواندن و تغییر دادن هستند.
۲. ایجاد ظرف اصلی (The List)
View Source Code
این خط یک لیست خالی ایجاد میکند. اما تفاوتش با لیستهای قبلی این است که این لیست فقط و فقط اشیائی از نوع
Personرا قبول میکند. ۳. روش سنتی افزودن (Traditional Way) View Source Code این روش طولانیتر است: ابتدا یک شیء خام به نام
p1میسازید. تکتک ویژگیهایش را پر میکنید. در نهایت آن را به لیست
peopleاضافه میکنید. ۴. روش سریع و مدرن (Object Initializer) View Source Code این روش بسیار محبوب است. شما همزمان که دارید شیء را میسازید (
new Person)، مقادیر آن را هم داخل
{} مشخص میکنید و مستقیماً به متد Addمیفرستید. کد شما کوتاهتر و خواناتر میشود. ۵. استخراج اطلاعات (Iteration) View Source Code در این حلقه:
personنمایندهی یکی از آن آدمهایی است که در لیست ذخیره شدهاند. با علامت
$(String Interpolation) خیلی راحت متغیرها را وسط متن چاپ کردهاید. * در هر بار چرخیدن حلقه، برنامه سراغ *Property*های آن شخص میرود و مقادیر را برای چاپ کردن "Get" میکند (میخواند). خلاصه کاربردی: این کد به شما اجازه میدهد دادههای مرتبط را دسته بندی کنید. مثلاً اگر بخواهید سن "Sara" را تغییر دهید، میدانید که دقیقاً باید سراغ
Ageدر آن ردیف خاص بروید، بدون اینکه به نام یا آیدی او آسیبی برسد. یک پیشنهاد: آیا میخواهید یاد بگیرید چطور یک کد بنویسید که فقط افرادی را چاپ کند که سن آنها بالای ۲۵ سال است؟ (شرط گذاشتن روی لیست اشیاء).
کد شما یک برنامه کنسولی است که وظیفهاش دریافت نام و قیمت کالا از کاربر، ذخیره آنها، انجام محاسبات آماری و نمایش نتایج است. مراحل اجرای برنامه به ترتیب عبارتند از:
ابتدا یک کلاس به نام PriceItem تعریف شده است که شامل دو ویژگی است: نام کالا (رشته) و قیمت کالا (عدد اعشاری).
سپس لیستی از این آیتمها ساخته میشود تا آیتمهایی که کاربر وارد میکند داخل آن ذخیره شود.
پیام راهنمایی به کاربر نمایش داده میشود تا نام و قیمت کالا را وارد کند و اگر بخواهد تمام کند، نام را خالی بگذارد.
در هر بار اجرای حلقه، ابتدا نام کالا از کاربر گرفته میشود. اگر نام خالی بود، برنامه وارد بخش محاسبات میشود و حلقه تمام میشود.
سپس با حلقهای مجزا، از کاربر قیمت کالا دریافت میشود؛ به گونهای که اگر کاربر عدد صحیح وارد نکند، پیام خطای قرمز رنگ نمایش داده شده و دوباره قیمت درخواست میشود. این باعث میشود ورودی قیمت فقط عدد صحیح قبول شود.
پس از اینکه قیمت معتبر وارد شد، یک نمونه جدید از PriceItem با نام و قیمت مشخص شده ساخته شده و به لیست افزوده میشود.
پس از پایان ورود دادهها، مجموع کل قیمتها محاسبه میشود.
سپس میانگین قیمتها محاسبه میشود، البته این کار فقط وقتی انجام میشود که لیست حداقل یک مورد داشته باشد؛ در غیر این صورت میانگین صفر خواهد بود.
تعداد کل آیتمهای وارد شده نیز شمارش میشود.
سپس تمام آیتمها همراه با قیمتهایشان به صورت مرتب و قابل خواندن در کنسول نمایش داده میشوند. قیمتها به صورت سه رقمی جدا شده نمایش داده میشوند (مثلاً 1,000).
در ادامه، مجموع، میانگین و تعداد کل آیتمها نمایش داده شده و در نهایت برنامه منتظر فشردن یک کلید توسط کاربر میماند تا پنجره بسته نشود.
این روند باعث میشود کاربر بتواند دادهها را به درستی وارد کند و برنامه به طور ایمن و دقیق آنها را پردازش و نمایش دهد.