فصل 6 از 40 درس 1 از 1

ورودی و خروجی در Console

ورودی و خروجی در Console

بخشی از آموزش جامع C# و .NET 10

محتوای درس ورودی و خروجی در Console

برنامه‌های Console محیط مناسبی برای تمرین ورودی، خروجی، فرمت‌بندی متن و اعتبارسنجی داده هستند. مدیریت صحیح ورودی کاربر اولین گام در نوشتن برنامه‌های مقاوم در برابر داده نامعتبر است.

۱. Write و WriteLine

Write خروجی را بدون رفتن به خط بعد چاپ می‌کند و WriteLine پس از چاپ Line Break اضافه می‌کند.

مثال

Console.Write("Name: ");
         Console.WriteLine("Alborz");

در این مثال، مفهوم «Write و WriteLine» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۲. ReadLine

ReadLine یک string یا null برمی‌گرداند. داده دریافت‌شده معمولاً پیش از استفاده باید Trim، Parse یا اعتبارسنجی شود.

مثال

Console.Write("Name: ");
         string name=Console.ReadLine() ?? "Unknown";
         Console.WriteLine(name);

در این مثال، مفهوم «ReadLine» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۳. String Interpolation

Interpolation با $ خوانایی ساخت رشته‌های ترکیبی را نسبت به اتصال‌های متعدد با + افزایش می‌دهد.

مثال

string name="Mouse"; decimal price=900_000m;
         Console.WriteLine($"{name}: {price:N0}");

در این مثال، مفهوم «String Interpolation» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۴. Format Specifiers

برای اعداد، تاریخ و درصد می‌توان از قالب‌های استاندارد مانند N2، C و P استفاده کرد.

مثال

decimal price=1234567.89m;
         Console.WriteLine($"{price:N2}");
         Console.WriteLine($"{DateTime.Now:yyyy-MM-dd}");

در این مثال، مفهوم «Format Specifiers» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۵. اعتبارسنجی ورودی

ورودی خارجی قابل اعتماد نیست؛ بنابراین باید محدوده، نوع و الزامات آن پیش از ادامه منطق بررسی شود.

مثال

if (!int.TryParse(Console.ReadLine(), out int age))
             Console.WriteLine("Invalid age");

در این مثال، مفهوم «اعتبارسنجی ورودی» در یک قطعه کد مستقل نمایش داده شده است. مقدارها و نام‌ها عمداً ساده انتخاب شده‌اند تا رفتار اصلی قابل مشاهده باشد؛ در پروژه واقعی همین الگو با مدل دامنه، اعتبارسنجی و مدیریت خطای متناسب ترکیب می‌شود.

۶. مثال‌های عملی

Console.Write("Name: ");
         string name = Console.ReadLine()?.Trim() ?? string.Empty;
         Console.WriteLine($"Welcome {name}");

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

Console.Write("Quantity: ");
         if (!int.TryParse(Console.ReadLine(), out int quantity) || quantity < 0)
         {
             Console.WriteLine("Invalid quantity");
             return;
         }
         
         Console.WriteLine($"Quantity: {quantity:N0}");

این نمونه عملی چند مفهوم فصل را در کنار هم قرار می‌دهد و برای مشاهده رفتار واقعی کد قابل اجرا و تغییر است.

۷. خطاهای رایج

• استفاده مستقیم از ReadLine بدون کنترل null

• اعتماد به ورودی عددی بدون TryParse

• استفاده بیش از حد از اتصال رشته‌ها با +

۸. نکات اجرایی

• نام‌ها، Typeها و Methodها را متناسب با مفهوم دامنه و بدون ابهام انتخاب کنید.

• هشدارهای کامپایلر و Nullable را بدون بررسی خاموش نکنید.

• منطق هر بخش را تا حد امکان کوچک، قابل تست و مستقل از I/O غیرضروری نگه دارید.

۹. تمرین عملی

یک ماشین‌حساب ساده Console بسازید که دو عدد و نوع عملیات را دریافت کند و نتیجه قالب‌بندی‌شده نمایش دهد.

۱۰. جمع‌بندی

در این فصل، مبانی «ورودی و خروجی در Console» با تمرکز بر ساختارهای اصلی زبان، الگوهای صحیح استفاده و خطاهای رایج بررسی شد. تسلط بر این مفاهیم زمینه لازم برای اتصال موضوع به فصل‌های بعدی و طراحی کدهای خواناتر، قابل نگهداری و قابل تست را فراهم می‌کند.