Должен ли я использовать оператор if или switch? Objective-C - PullRequest
4 голосов
/ 03 декабря 2011

Я всегда задавался вопросом, но не могу найти окончательный ответ.Когда я должен использовать оператор if или switch?Когда один лучше другого?

Например, я мог бы сделать:

-(void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex{
    switch (buttonIndex) {
        case 0:
            //Stuff
            break;

        case 1:
            //Stuff
            break;

        default:
            break;
    }

//OR

    if (buttonIndex == 0) {
        //Stuff
    }
    if (buttonIndex == 1) {
        //Stuff 
    }
}

Надеюсь, вы можете помочь, это всего лишь пример, но я уверен, что в других ситуациях это будетимеют значение по-разному.

Ответы [ 8 ]

13 голосов
/ 03 декабря 2011

В этом случае это не имеет значения.Причина переключения заключается в том, что это быстрее, чем если бы.Если вы напишите длинный код if ... else if ... else if ..., он будет работать медленнее, чем переключение, потому что if выполняет итеративный поиск (O (n)), а switch выполняет поиск по таблице (O (1))

7 голосов
/ 03 декабря 2011

Я считаю, что это субъективный вопрос. Ответ действительно зависит от вас.

Что касается моего собственного кода, мне нравится использовать операторы switch, так как довольно ясно, что происходящее является результатом какого-то условия, которое может делать другие вещи, если условие отличается.

Но если код под оператором switch case: довольно длинный или извилистый, то для моего собственного кода я делаю второе: бит if (buttonIndex == 0) {.

4 голосов
/ 03 декабря 2011

Если вы только проверяете, имеет ли одна переменная определенное значение (buttonIndex == 1), и делаете это для нескольких значений, лучше использовать switch.

Однако, если вы используете более сложные условия (возможно, даже включающие функции в условие), тогда вам следует использовать if statements.

3 голосов
/ 03 декабря 2011

Я бы хотел, чтобы код был как можно ближе к человеческому пониманию. Вот почему три формы решений (if-then-else, switch-case-default,? :) подходят для сопоставления трех разных процессов:

  • ... и теперь, в случае фробничированного quibplatz, мы должны сделать ... (иначе ... должно быть сделано) - это отображение для if)
  • ... и теперь, основываясь на значении quibplatz, мы должны сделать ... если оно равно 0, ... если оно равно 1 (, ... если это не одно из них) если отображение для switch
  • ... мы используем ... или ... на основании того факта, что ... выполняется или нет отображает для ?:

Так что используйте тот, который соответствует тому, как вы думаете о реальном решении как о человеке.

Конечно, следует подчеркнуть , что правильное ОО-решение во многих сценариях ... и мы делаем ... что мы делаем таким образом для ..., таким образом для ... и этот способ для ... , где часто используется switch (но это также справедливо для некоторых if s), состоит в том, чтобы не использовать эти конструкции и заменить их на полимофизм. Ручное принятие решения должно быть сделано только тогда, когда есть реальное решение, а не подделка (логический) полиморфизм.

1 голос
/ 23 апреля 2012

Операторы Switch быстрее вложенных операторов if.Вот и все.

0 голосов
/ 03 декабря 2011

Если 'if' и 'switch' настолько злые, их следовало бы удалить из современных языков программирования. Дело в том, что они все еще там. Я думаю, что ключ в том, что мы должны стараться изо всех сил, чтобы наш код работал правильно и эффективно, легко для понимания и сопровождения. ООП - это только один из способов написания программ, мы не должны писать программы для чистого ООП. Так что это действительно субъективная проблема.

0 голосов
/ 03 декабря 2011

Switch точно так же, как if elseif. Слишком много Switch или if elseif сделает ваш код очень трудным для чтения и понимания. Но нет никаких проблем с функциями.

0 голосов
/ 03 декабря 2011

это зависит от того, что вы хотите сделать внутри него. имейте в виду, что вы не можете выделить новый объект внутри оператора switch

...