سه شنبه, ۱۶ بهمن, ۱۴۰۳ / 4 February, 2025
حوزه پویا (dynamic) در زبان C# در کجا وجود دارد؟
برخورد با استثنا (Exception Handling)
چگونگی طرّاحی یک برنامه اهمّیّتی ندارد، همیشه ممکن است خطایی در طول اجرای آن رخ دهد. شما باید خطاها را پیشبینی کرده و آنها را جزو برنامه به حساب آورید، در صورت به وجود آمدن خطاها یا استثناها، کد هست که آنها را کنترل میکند. این کد باید در مراحل اوّلیّه توسعه، تصحیح شود. هدف ما، تولید کد قابل اطمینان و پایدار است.
یک راه برای برخورد با استثناها، صرفنظر کردن از برنامه است. به عنوان مثال، یک خطای رایج، تقسیم بر صفر است. اگر برنامه شما قرار باشد، کنترل یک رآکتور هستهای را اجرا کند، چهطور؟ شما نمیتوانید، برنامه خود را رها کنید. خطاها از طریق throw و catch استثناها، کنترل میشوند. throwing یک استثنا، روشی است که نشان میدهد چیزی بد کار کرده است. catch یک استثنا، روشی برای برخورد با استثنا است.
از ترکیب try/catch/finally برای کنترل استثناها استفاده میشود.
اگر یک استثنا throw شود، از بلوک try خارج شده و کنترل به آن برنمیگردد. حال هر متد غیر void باید یک مقدار برگرداند و عبارت بازگشتی بعد از کدی است که خطا در آن رخ داده است. این منجر به تضاد میشود. ما میتوانیم عبارت بازگشتی را در بلوک اختیاری finally قرار دهیم. امکان دیگر این است که عبارت بازگشتی را کاملا بیرون عبارت try / catch قرار دهیم.
نحو برای throw و catch
بعد از یک بلوک try، باید یک یا چند بلوک catch برای کنترل انواع بهخصوصی از استثناها وجود داشته باشد. هیچ تداخل کدی بین بلوکها نمیتواند وجود داشته باشد. یک بلوک ممکن است برای یک خطا چک کند و یک استثنا را throw کند و استثنا را در جای دیگری از کد، کنترل کند. عنصر اصلی برای تحقّق کنترل استثنا این است که بلوک catch – کنترلکننده استثنا – از کدی که استثنا را throw میکند – بلوک try -، مجزّاست. بلوک try حاوی الگوریتم معمولی است. بلوک catch، شامل کدی برای شرایط کنترل استثناست.
یک استثنا ممکن است تنها در طول یک بلوک try حاوی به صورت پویا، throw شود؛ یعنی عبارت throw باید متعلّق به حوزه دینامیک (پویا) یک بلوک try بیرونی باشد. حوزه پویا به چگونگی اجرای برنامه برمیگردد. به آنچه که در عمل اتّفاق میافتد، دقّت کنید. حوزه ایستا (استاتیک) به چگونگی نوشته شدن برنامه اطلاق میشود. تعاریف آن را ملاحظه کنید. حوزه پویا تنها با اجرای برنامه مشخّص میشود. شما نمیتوانید لزوما آن را با خواندن برنامه، تعیین کنید.
حوزه ایستا به روش نوشته شدن برنامه اطلاق میشود. تمامی متغیّرهای محلّی و پارامترهای یک متد، در حوزه استاتیک آن هستند. حوزه ایستا تنها با خواندن برنامه مشخّص میشود. حوزه پویا را میتوان با اجرای برنامه تعیین کرد.
هنگامی که یک استثنا throw میشود، زبان از هر دو حوزه ایستا و پویا استفاده میکند تا برای کنترل آن، یک شرط catch بیابد. زبان میداند که چگونه برنامه تعریف شده است که همان حوزه ایستای متدهای آن را تعریف میکند. زبان همچنین یک رکورد از هر متد که در برنامه فراخوانی میشود، در پشته فراخوانی متد قرار میدهد. یک جنبه مهمّ پشته فراخوانی متد این است که متد در حال اجرا همواره توسّط بلوک بالایی در پشته فراخوانی متد، نمایش داده میشود.
هنگامی که یک استثنا رخ میدهد، زبان در سرتاسر برنامه به عقب trace میکند تا یک شرط مناسب catch بیابد. عمل trace از بلوکی که استثنا را throw کرد، شروع میشود. اگر استثنا در متدی که در آن throw شده است، catch نشود، زبان از پشته فراخوانی متد استفاده میکند تا از طریق فراخوانیهای متدها در طول اجرا، جستجو را انجام دهد.
محمد معصومی شهربابک
ایران مسعود پزشکیان دولت چهاردهم پزشکیان مجلس شورای اسلامی محمدرضا عارف دولت مجلس کابینه دولت چهاردهم اسماعیل هنیه کابینه پزشکیان محمدجواد ظریف
پیاده روی اربعین تهران عراق پلیس تصادف هواشناسی شهرداری تهران سرقت بازنشستگان قتل آموزش و پرورش دستگیری
ایران خودرو خودرو وام قیمت طلا قیمت دلار قیمت خودرو بانک مرکزی برق بازار خودرو بورس بازار سرمایه قیمت سکه
میراث فرهنگی میدان آزادی سینما رهبر انقلاب بیتا فرهی وزارت فرهنگ و ارشاد اسلامی سینمای ایران تلویزیون کتاب تئاتر موسیقی
وزارت علوم تحقیقات و فناوری آزمون
رژیم صهیونیستی غزه روسیه حماس آمریکا فلسطین جنگ غزه اوکراین حزب الله لبنان دونالد ترامپ طوفان الاقصی ترکیه
پرسپولیس فوتبال ذوب آهن لیگ برتر استقلال لیگ برتر ایران المپیک المپیک 2024 پاریس رئال مادرید لیگ برتر فوتبال ایران مهدی تاج باشگاه پرسپولیس
هوش مصنوعی فناوری سامسونگ ایلان ماسک گوگل تلگرام گوشی ستار هاشمی مریخ روزنامه
فشار خون آلزایمر رژیم غذایی مغز دیابت چاقی افسردگی سلامت پوست