PDA

View Full Version : فرق بین If و If else ؟



ebrahim.rayatparvar
یک شنبه 17 خرداد 1394, 14:48 عصر
سلام مهندسان و دوستان خوب من.
یه موضوعیی خیلی رفته رو مخم. همه میدونم برای استفاده از دستوراتی که 1 شرطه هستن if دستور خیلی خوبیه و برای 2 شرطه بودن از if else استفاده کنیم بهتره.
تو دوران دانشجویی استادی داشتیم یه توضیحاتی داده بود که بیشتر بچه های دانشجو که میدونید البته مثل من زیادن نه مثل شما مهندسان برای همین از شما میخوام توضیح بدین خو میگفتم مثل من به درس های تئوری کمی مشکل دارن و سریع خسته می شن برای همین موضوع رو خوب درک نمیکنن.
ولی تا جایی که یادمه گفته بود دستور if تو حافظه جایی رو میگیره و دستور else if نزدیک ترین خانه رو به خودش میگیره یعنی اگه بجای else if دوباره if بزاریم مشکلی پیش نمیاد از لحاظ منطقی کارتون رو انجام میده ولی خانه حافظه رو شاید دورتر بگبره برای پیدا کردن آدرس کمی زمانبر است. البته این رو هم باید به دوستان گفت مزایای else if من هر جور می بینم بالا تر است چون امکان داره شرط اول درست باشه و دیگر شرط های دیگر رو چک نکنه و ادامه کار ولی با if خالی همه شرطها ناخواسته چک میشه.

خوب شما الان می پرسید چرا این سوال رو کردم باید درباره سوال شما ارض کنم که من عموما با برنامه Resharper خیلی حال میکنم و دوستان میدونند بعد از استفاده از این ابزار تو سی شارپ چه موقط پیشنهادش خوبه چه موقع نه خوب نیست. حالا کد زیر رور ببینید :


if (Password == string.Empty)
return "1";
if (Password2 == string.Empty)
return "2";
if (Password != Password2 )
return "3";
dalCls._Password = Password;


همینطور که میبینید به صورت if جدا نوشته شده است این قطعه کد تو یکی از متد های من در کلاس کاربر من در لایه BL است که اگه شرط اول درست بود فلان پیغام خطا رو بده و .... من اینو به صورت if - else if نوشته بودم که بعد Resharper گفت به این حالت بهینه تره. خوب دوستان به نظر شما الان این کد بهینه تره یا با if - else if چرا؟؟؟

winner1
یک شنبه 17 خرداد 1394, 15:07 عصر
if خالی به هیچ if دیگه ای وابسته نیت و در هر صورت برسی میشه ول if else برسی شدن یا نشدنش به if قبل خودش بستگی داره

ebrahim.rayatparvar
یک شنبه 17 خرداد 1394, 15:13 عصر
این موضوع رو خودم هم بالا گفتم از لحاظ کامپایل و سرعت و پویایی در کد بالا و جایی که من استفاده کردم رو می گم دقت کند کجا استفاده کردم چون جای دیگه این کار رو Resharper به من پیشنهاد نداده.

davidrobert
یک شنبه 17 خرداد 1394, 15:52 عصر
اگر شرط تکی باشه از if خالی هر چند بار هستش استفاده میکنی اما وقتی بعد if اولی تمام شد و در if else به کار بردیم امدیم گفتیم به زبان فارسی.
معنی if میشه اگه و معنی else if اگه این نشود.
اگه ( کادرمتن1.متن=="")
{
کادرپیام.نمایش("کادرمتن را پورکنید")
}
اگه این نشود این کار انجام بده( کادرمتن1.متن !="")
{
کادر پیام.نمایش("اطلاعات وارد شده است.")
}
این فرق بین if و esle if هستش.

ebrahim.rayatparvar
یک شنبه 17 خرداد 1394, 15:55 عصر
مهندس جان این که کار if , if - ese بود اینو که خودم بالا توضیح دادم که بگم اینا رو میدونم.
شما ببینید من کد رو کجا زدم و اول با if else if ردم ولی ابزار resharper امده برام اصلاح کرده میگه به این شکل بهتره و بهینه که برام سوال شده چرا تو کلاس این کار رو میگه بکنم و لی تو بجای دیگه نه.

Mahmoud.Afrad
یک شنبه 17 خرداد 1394, 16:29 عصر
دلیلش استفاده از return هاست. چون با درست بودن هر شرط return اتفاق میافته و شرطهای بعدی بررسی نمیشن. در اصل ریشارپر کد شما رو خواناتر کرده و در عمل فرقی با قبل نداره. البته در شرایط دیگه این کار رو نخواهد کرد. کافیه به جای return مثلا پیغامی نمایش بدید و if و else استفاده کنید. نهایتا شاید ریشارپر پیشنهاد تبدیل کد رو به switch ... case بده.

SabaSabouhi
یک شنبه 17 خرداد 1394, 17:15 عصر
سلام
پاسخ پرسش شما داده شده، من فقط می‌خوام این رو اضافه کنم که در #C فرمانی به نام else if نداریم. ( تو بعضی از زبان‌ها داریم )
در واقع این else if از در کنار هم قرار گرفتن یک if - else و یک if دیگه ایجاد می‌شه.

صبا صبوحی

ebrahim.rayatparvar
یک شنبه 17 خرداد 1394, 17:25 عصر
دلیلش استفاده از return هاست. چون با درست بودن هر شرط return اتفاق میافته و شرطهای بعدی بررسی نمیشن. در اصل ریشارپر کد شما رو خواناتر کرده و در عمل فرقی با قبل نداره. البته در شرایط دیگه این کار رو نخواهد کرد. کافیه به جای return مثلا پیغامی نمایش بدید و if و else استفاده کنید. نهایتا شاید ریشارپر پیشنهاد تبدیل کد رو به switch ... case بده.

مرسی مهندس جان حرف شما درست حالا از نظر کامپایلر این دو نوع کد کدام بهینه تره؟؟

winner1
یک شنبه 17 خرداد 1394, 21:15 عصر
رفیق خوب از نظر کامپایل کد که شما نوشتی فرقی با if else نداره ولی واسه بهتر شدن خوانایی کد بهتره از if else استفاده کنی :لبخندساده:

stackprogramer
یک شنبه 17 خرداد 1394, 21:29 عصر
با سلام،
if (condition)
{
// executed only if "condition" is true
}
else if (other condition)
{
// executed only if "condition" was false and "other condition" is true
}
else
{
// executed only if both "condition" and "other condition" were false
}
داخل این تکه کد،از سه تا if,else if,else استفاده شده، فرض کن شرط if درست نباشه،else ifوقتی اجرا می شه،که if قبلی درست نباشه،اما else وقتی اجرا می شه،که دوتای قبلی درست نباشه،دقت کن منظورم را خواهی فهمید تفاوت else و else if داخل تعداد شرط های 3 به بالا مشخص می شه،

از دید الگوریتمی اگه بخوای به برنامه نگاهی کنی،برای دوشرطی else استفاده کن،برای سه شرطی به بالا،else if و انتهای ان else این طوری اپتیمازترین است،:لبخندساده:

RmeXXXXXXXXX
یک شنبه 17 خرداد 1394, 22:46 عصر
سوال شما از ریشه مشکل داره! if برای بررسی یک حالت از شرایط می باشد در حالی که else برای بررسی سایر حالات میباشه. مثه انشعاب (Branch).
اگر از قسمت else استفاده نکنید و بجاش از یک if دیگر استفاده کنید مثه اینه که یک شاخه از حالات رو بررسی نکنید بجاش یه دوشاخه حالت جدید بسازید. 4 شاخه - کاری اضافه.
درمورد اینکه چرا ReSharper کدتون رو اینجوری کردن به خاطر سربارش نیست(همونطور که سایر دوستان هم اشاره کردن) بلکه به خاطر رعایت الگوی- invert if- برنامه نویسی می باشد. به این تعریف که: بجای استفاده از if های تو در تو و پیوسته در اولین فرصت (با اولین شرط نادرست) از متد خارج شویم.

var dlg=new OpenFileDialog()
if(dlg.ShowDialog()== DialogResult.Ok)
{
load image
save file
and so on
}

پیشنهاد میشه برای یکپارچه سازی کد (کمتر انشعاب داشته باشه - کمتر آکولاد داشته باشه) اینچنین بنویسید

var dlg=new OpenFileDialog();
if(dlg.ShowDialog() != DialogResult.Ok) return;

load image
save
and so on

بدیت ترتیب کد پیوسته به نظر میاد و در صورت درست نبودن خارج میشیم و نه در صورت درست بودن ادامه بدیم == کد قابل فهم تر و ماندگارتر