PDA

View Full Version : خروج از زیر برنامه یا استفاده از بلاک های IF ؟



مهران رسا
شنبه 12 تیر 1389, 14:19 عصر
سلام ،

برخی اوقات در زیر برنامه ای نیاز میشه 10 ها شرط وابسته به هم بررسی بشند . در واقع اعتبار شرط های داخلی در گرو برقرار بودن شرط های خارجی هستند و در صورتی که شرط اول برقرار نباشه شروط بعدی مورد بررسی قرار نمیگیرند . به نظر شما استفاده از بلاک های تو در توی IF معقول تر به نظر میرسه یا استفاده از دستور Exit برای خروج از زیر برنامه ؟ و این که همینطور Exit رو فراخوانی کنیم بعداً مشکلی به وجود نمیاره؟

کد نوشته شده با استفاده از بلاک های IF وابسته به هم :


If [proviso_1] Then
Begin

If [proviso_2] Then
begin

If [proviso_3] Then
begin
Commands
End;

End;

End;استفاده از Exit برای مدیریت شروط :


If Not([proviso_1]) Then
Begin
Exit;
End;

If Not([proviso_2]) Then
Begin
Exit;
End;

If Not([proviso_3]) Then
Begin
Exit;
End;

Commands

vcldeveloper
شنبه 12 تیر 1389, 16:17 عصر
بستگی به Style خودتون داره. سعی کنید خوانایی کد رو کاهش ندید؛ بعضی وقت ها استفاده صحیح از Exit میتونه موجب کاهش کدهای نوشته شده، و افزایش خوانایی بشه؛ گاهی اوقات هم استفاده ناصحیح از Exit ممکنه موجب گیج شدن برنامه نویسی که کد را میخوانه بشه.

سعی کنید از Exit در جاهای مشخصی استفاده کنید، نه بین انبوهی از کدها، بطوری که Exit در بین کدها گم بشه. همچنین، زیاد از حد در یک تابع از Exit استفاده نکنید. الان برای اون کدهای بالا، اگر هر سه شرط رو در یک if..then قرار بدید، و یک Exit بنویسید، کد تر و تمیز تر خواهد بود. اگر این مقادیر چک شده، مقادیری هستند که برای عملکرد صحیح اون تابع الزامی هستند، می تونید به جای Exit، یک Exception مناسب raise کنید، تا علاوه بر خروج از تابع، پیام خطای مناسبی هم به کاربر، و به کد فراخوان این تابع ارسال بشه.


این که همینطور Exit رو فراخوانی کنیم بعداً مشکلی به وجود نمیاره؟
Exit به خودی خود مشکلی نداره، حتی در دلفی 2010، در صورتی که از Exit در داخل یک تابع (نه Procedure) استفاده کنید، می تونید مقدار خروجی تابع را هم با استفاده از Exit تعیین کنید، مثلا اگر مقدار خروجی تابع Boolean هست، می تونید بنویسید:

Exit(False);
که باعث میشه مقدار False به عنوان خروجی تابع برگشت داده بشه.
همچنین، اگر Exit در داخل یک بلوک try..finally فراخوانی بشه، بخش finally به درستی، قبل از خروج از تابع، اجرا میشه.



البته زیاد از حد از Exit استفاده نکنید، به طوری که خوانایی کد کاهش پیدا کنه! گاهی