PDA

View Full Version : switch يا else-if



Tiam121
شنبه 30 مرداد 1389, 17:46 عصر
سلام خدمت همه اساتيد
كسي اطلاع داره سرعت ساختار switch بيشتره با else-if يا اينكه تفاوتي ندارن؟

amirh_karimifar
شنبه 30 مرداد 1389, 18:33 عصر
مسلما سرعت switch case بیشتره . مخصوصا زمانی که case ها زیاد باشن . چون که با if else شما برنامه تمام شرط ها رو چک میکنه . ولی با switch case کامپایلر با جستجو بین case ها case مورد نظر رو پیدا میکنه و در صورتی که پیدا کنه بقیه ی case ها رو دیگه چک نمی کنه .

FastCode
شنبه 30 مرداد 1389, 19:29 عصر
ولی با switch case کامپایلر با جستجو بین case ها case مورد نظر رو پیدا میکنه و در صورتی که پیدا کنه بقیه ی case ها رو دیگه چک نمی کنه .

خیر.
در switch case کامپایلر در برنامه شما یک static lookup table ایجاد میکنه.که هر item اون به یک نقطه توی کد اشاره میکنه.
مثلا
0x0000001A
0x00000024
0x0000003F
0x00000052
0x0000009A
0x0000006B
0x0000009A
0x0000009A
0x0000009A
0x0000007C
وقتی برنامه به switch case میرسه, تست میکنه که از range خارج نباشه.اگر باشه به default میره در غیر این صورت به اون جایی که توی static array بهش اشاره شده میره.

در ضمن من نفهمیدم کامپایلر روی سیستم کاربر دنبال چی میگرده, اگر ممکنه یه مقدار بیشتر توضیح بدید.

amirh_karimifar
شنبه 30 مرداد 1389, 21:41 عصر
دوست عزیز . ایشون یک سوال پرسیده بودن . منم به اندازه ی سوادم کمکشون کردم .
چه خوب بود که شمام همین کارو می کردین . در ضمن اینجا froum هست . ممکنه بعدا کسی دیگه این مطلب رو بخونه . چه خوب بود که همین جا همه رو از علمتون مستفیض می کردید .

cardano7
یک شنبه 31 مرداد 1389, 10:15 صبح
معمولا این قدر عوامل مختلف سرعت رو پایین میارند که اختلاف سرعت if-else و switch توش گمه. علت استفاده از اونا بیشتر خوانایی برنامه هست و نه سرعت.
توصیه میکنم که همیشه از switch استفاده کنید مگر در سه حالت که این کار عملی نیست:

1- تعداد شرط ها کم باشه. مثلا برای 3 شرط به صرفه نیست که switch به کار بره.

2- موضوع شرط متفاوت باشه. طوری که نشه switch به کار برد. مثلا:


if(Today==Chrismass)
do something;
else if(lunch==spagetti
do something else;
3- در صورتی که موضوع شرط یکی هست اما موارد مقایسه مقادیر ثابت نیستند. چون داخل case نمی تونیم یک عبارت متغیر بنویسیم. یعنی مثال زیر عملی نیست:


switch(Animal.Name.ToLower())
{
case "Fish".ToLower():
something...;
break;
case "Cat".ToLower():
something...;
break;
case "Dog".ToLower():
something...;
break;
}