Вопрос по операторам If-Else в XCode

#objective-c #xcode #ios #xcode4

#objective-c #xcode #iOS #xcode4

Вопрос:

Использует ли этот код:

 
if (foobar == 1)    
{  
 method(a)  
}   
else if (foobar == 2)      
{   
 method(b)   
}

void method (foo)   
{   
//method 1foo   
//method 2foo   
//method 3foo   
}
  

делает его более быстрым или компилируется в исполняемый файл меньшего размера, чем этот код:

 
if (foobar == 1)    
{   
//method 1a   
//method 2a   
//method 3a   
}   
else if (foobar == 2)   
{   
//method 1b   
//method 2b   
//method 3b   
}   
  

или имеет какой-либо эффект вообще при компиляции в Xcode?

Я знаю, что коды отрывочны. Извините. Спасибо за совет по редактированию, мистер Дейв.

Комментарии:

1. должны ли быть назначения во втором примере кода?

2. Определите «лучше». Вы имеете в виду «быстрее», или «более читаемый», или, может быть, «будет компилироваться в исполняемый файл меньшего размера»?

Ответ №1:

Не повторяйтесь. Да, вы можете избежать незначительных накладных расходов при вызове функции, исключив функцию и скопировав ее содержимое везде, где вы ее используете, но это не лучший способ ускорить вашу программу. Разница в скорости будет настолько мала, что вы, вероятно, не сможете обнаружить ее даже после многих, многих итераций. И вы просто напрашиваетесь на ошибки, когда вы меняете одно место, но не другое (ы).

Комментарии:

1. Однако в целях удобства чтения, что лучше. Кроме того, спасибо за СУХУЮ ссылку.

2. Для удобства чтения первое намного, намного лучше. Каждый раз, когда вы повторяете код, есть вероятность, что код на самом деле не тот. Если вы вызываете одну и ту же функцию из нескольких мест, читатель сразу понимает, что код в каждом месте один и тот же. Конечно, есть ограничения, поэтому используйте свое суждение. Не создавайте отдельную функцию только потому, что пара строк встречается в вашем приложении два или три раза. Обычно вы не стали бы использовать функцию только для вызова alloc, а затем -init, например.

Ответ №2:

Предполагая, что основное различие, о котором вы спрашиваете, заключается в использовании внешнего метода вне вашего условного оператора…

Нет, не то, что я могу придумать. Однако на любом языке обычно хорошей идеей является инкапсулировать общую функциональность в один метод везде, где это возможно, чтобы все было организовано и легко читалось. Другими словами, я бы выбрал ваш первый вариант. =)

Ответ №3:

То, что вы описали, известно как встраивание. Встраивание обычно ускоряет код, но в определенных случаях может замедлить его. В любом случае, если остальной код уже не сильно оптимизирован и не находится в очень жестком цикле, вы не заметите никакой разницы в скорости.

Комментарии:

1. Спасибо за ссылку. В любом случае, что бы вы порекомендовали для удобства чтения кода?