همه ما در برنامههای کامپیوتری با اشکالات یا خطاهایی مواجه شدهایم. این خطاها میتوانند ناشی از مشکلات مختلفی باشند، از ورودیهای نادرست تا شرایط غیرقابل پیشبینی در سیستم. در زبان برنامهنویسی سی شارپ، برای مدیریت بهتر این اشکالات از کلمه کلیدی throw استفاده میکنیم. در این مقاله، به زبانی ساده و روان با کاربرد و استفاده از throw در پروژههای واقعی آشنا میشویم.
چرا از throw استفاده میکنیم؟
throw یکی از کلیدواژههای پرکاربرد در سی شارپ است که به ما این امکان را میدهد تا بهصورت دستی یک استثنا یا Exception را به وجود آوریم. این استثنا به ما کمک میکند که مشکلات را به درستی شناسایی کرده و از وقوع آنها در برنامه جلوگیری کنیم. به عنوان مثال، فرض کنید شما در یک بانک کار میکنید و میخواهید مطمئن شوید که مبلغ برداشتی از حساب کاربر منفی نیست. در چنین شرایطی، اگر کاربر یک عدد منفی وارد کند، باید به او هشدار دهیم که این مقدار نادرست است.
مثال:
public void Withdraw(double amount)
{
if (amount < 0)
{
throw new ArgumentException("مبلغ نمیتواند منفی باشد.");
}
// ادامه کد برای برداشت پول از حساب
}
در این کد، اگر کاربر مبلغی منفی وارد کند، برنامه بهطور خودکار خطایی به نام ArgumentException را پرتاب میکند و پیامی مبنی بر اینکه "مبلغ نمیتواند منفی باشد" نمایش داده میشود. این پیام به کاربر کمک میکند تا خطای ورودی خود را بفهمد و آن را اصلاح کند.
ساختار و کاربرد throw در سی شارپ
throw بهطور کلی برای پرتاب کردن Exceptionها در شرایط خاصی استفاده میشود. این استثناها ممکن است از نوعهای مختلفی باشند که بسته به نیاز برنامه، نوع مناسب را میتوان استفاده کرد. در اینجا به چند نوع معمول از استثناها اشاره میکنیم:
ArgumentException: زمانی که آرگومانهای ورودی نادرست یا نامناسب هستند.
NullReferenceException: زمانی که میخواهید به یک شیء null دسترسی پیدا کنید.
InvalidOperationException: زمانی که عملیات مورد نظر در حالت فعلی قابل اجرا نیست.
مثالهای عملی با استفاده از throw
مثال 1: بررسی یک شرط ساده
فرض کنید میخواهید در یک برنامه کاربر سن خود را وارد کند. واضح است که سن نمیتواند منفی باشد. بنابراین، برای اطمینان از ورود صحیح سن توسط کاربر، از throw استفاده میکنیم:
public void SetAge(int age)
{
if (age < 0)
{
throw new ArgumentException("سن نمیتواند منفی باشد.");
}
}
در اینجا اگر کاربر عدد منفی وارد کند، خطایی پرتاب میشود که نشان میدهد سن وارد شده نامعتبر است.
مثال 2: مدیریت تخفیف در یک فروشگاه
در یک پروژه فروشگاهی، فرض کنید میخواهید تخفیفهایی را که برای محصولات مختلف ارائه میشود، مدیریت کنید. تخفیفها باید بین 0 تا 100 درصد باشند، و اگر درصد تخفیف وارد شده خارج از این بازه باشد، باید یک خطا به کاربر نشان داده شود:
public void ApplyDiscount(double discountPercent)
{
if (discountPercent > 100 || discountPercent < 0)
{
throw new ArgumentException("درصد تخفیف باید بین 0 تا 100 باشد.");
}
}
در این مثال، اگر درصد تخفیف بیش از 100 یا کمتر از 0 باشد، خطایی به نام ArgumentException پرتاب میشود و پیامی مبنی بر اینکه "درصد تخفیف باید بین 0 تا 100 باشد" به کاربر نمایش داده میشود.
مدیریت استثناهای پرتاب شده
استفاده از throw برای مدیریت خطاها کافی نیست. زمانی که یک استثنا پرتاب میشود، باید بتوانید آن را به درستی دستگیر یا Catch کنید و برنامه را به درستی به پایان برسانید. این کار با استفاده از بلوک try-catch انجام میشود.
مثال:
try
{
ApplyDiscount(-10); // درصد تخفیف نادرست
}
catch (ArgumentException ex)
{
Console.WriteLine("خطا: " + ex.Message);
}
در اینجا، اگر درصد تخفیف نادرست باشد و خطا پرتاب شود، با استفاده از بلوک catch این خطا دستگیر میشود و به کاربر پیام مناسبی نمایش داده میشود.
مثالهای کاربردی در پروژههای واقعی
1. پروژه بانکی
در یک پروژه بانکی، از throw میتوان برای جلوگیری از ورود اطلاعات نادرست استفاده کرد. به عنوان مثال، اگر کاربر بخواهد مبلغی بیشتر از موجودی خود برداشت کند، باید به او هشدار داده شود:
public void Withdraw(double amount, double balance)
{
if (amount > balance)
{
throw new InvalidOperationException("مبلغ برداشت بیشتر از موجودی است.");
}
}
2. مدیریت فرمهای ورودی در وب
در یک سیستم مدیریت فرمهای آنلاین، ممکن است کاربر برخی فیلدها را به اشتباه پر کند. برای مثال، اگر کاربر یک ایمیل نامعتبر وارد کند، باید به او هشدار داده شود:
public void ValidateEmail(string email)
{
if (!email.Contains("@"))
{
throw new FormatException("ایمیل وارد شده نامعتبر است.");
}
}
در اینجا، اگر ایمیل وارد شده فاقد علامت "@" باشد، خطایی پرتاب میشود که به کاربر هشدار میدهد که ایمیل وارد شده نادرست است.
جمعبندی
کلمه کلیدی throw یکی از ابزارهای بسیار مهم در مدیریت استثناها در سی شارپ است. با استفاده از این قابلیت، میتوانیم برنامههای خود را در برابر خطاها و ورودیهای نادرست محافظت کنیم. با تمرین و استفاده درست از این قابلیت، میتوانید برنامههای امنتر و کارآمدتری بنویسید. از این پس، هرگاه نیاز به کنترل خطا در برنامههای خود داشتید، میتوانید با استفاده از throw به راحتی این کار را انجام دهید.
اگر به این موضوع علاقهمند هستید و میخواهید بیشتر در زمینههای مرتبط بدانید، پیشنهاد میکنم مقاله ی زیر را نیز مطالعه کنید:
دستور where در سی شارپ: این مقاله به شما نحوهی تعریف شرایط و محدودیتها در کد سی شارپ را آموزش میدهد، که برای مدیریت خطاها مفید است.
برای افزودن دیدگاه خود، نیاز است ابتدا وارد حساب کاربریتان شوید