2016-06-30 2 views
-4

Код 1: (!)Наиболее эффективное использования 'если'

if(!(varOfsomeClass->isValid($imParams))){ 
    //some function i need to run 
} 
  • функция запуска IsValid
  • обратное значение с не
  • контрольное значение с, если

Code 2 :

if((varOfsomeClass->isValid($imParams))){ 
} else { 
    //some function i need to run 
} 
  • функция запуска IsValid
  • проверки значения с, если
  • войти еще часть (может быть, или ничего не делать, потому что IsValid верно)

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

нб: Код 1 действительно более «человеческое»

+2

Напишите код, который на самом деле понятен .. здесь нет никаких оснований * беспокоиться о «наиболее эффективном» здесь, особенно в контексте PHP. (Примечание: на некоторых языках есть 'if', который является инвертированным-'if', но PHP и другие диалоги C-ish этого не делают.) – user2864740

+0

https://en.wikipedia.org/wiki/Program_optimization#When_to_optimize – CBroe

+0

первое и самое главное, что переменные php начинаются с '$'. Во-вторых, ваш вопрос не имеет никакого значения. Не задавайте вопросов, просто чтобы спросить. – Peter

ответ

0

Похоже, что вы ничего не делаете в случае isValid возвращает истинный. Я бы рекомендовал придерживаться первой версии, где у вас есть только один if заявление, по нескольким причинам:

  • Меньше кода, чтобы читать, легче понять
  • Оставив пустой блок можно интерпретировать как «код не закончено»для других участников

Технически говоря, кроме инструкции на JUMP сборок сохраненной может быть (в зависимости от переводчика), и код будет столь же эффективным ... не пытайтесь думать о тех, микро-оптимизации, если он делает код менее читаемым.

+0

* cough * PHP * cough * – user2864740

+0

Да, измененный компилятор для переводчика, действительно :-) –

1

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

Помните, что if() сам оценивает выражение, переданное ему для истинно/ложных значений, поэтому добавление ! в большинстве случаев является избыточным.

Другими словами, почему бы вам нужно сделать:

$number = 1; 
if(!$number){} 

вместо этого.

$number = 1; 
if($number){} 

, если вы пытаетесь быстро выходе что-то, если $number является false, а затем перейти к чему-то еще, это не имеет никакого смысла использовать первый.

0

Интересный вопрос. Я хотел бы предложить, чтобы поставить его в этом мини-тестов и проверить его:

$startA = microtime(true); 
for($i = 0; $i < 10000; $i++) 
{ 
    //Code 1 
} 
$endA = microtime(true); 

unset ($all, $your, $variables); 

$startB = microtime(true); 
for($i = 0; $i < 10000; $i++) 
{ 
    //Code 2 
} 
$endB = microtime(true); 

echo $endA-$startA."<br />"; 
echo $endB-$startB."<br />"; 
+0

'0.00024104118347168 // используя! оператор ' ' 0.00018596649169922 // используя else' –

+0

вы запускаете его несколько раз? Результаты могут различаться, и только многие прогоны покажут вам «тренд» – JRsz

+0

да бежали несколько раз –

1
if(!(varOfsomeClass->isValid($imParams))){ 
    //some function i need to run 
} 

Этот тип кода использовать меньше ресурсов при сравнении с типом кода 2.

0

Оба они одинаково эффективны.

Первый запрос требует дополнительной инструкции о сокращении !, второй - на дополнительном счете else. Использование PHP-кода C очень эффективно при обработке if/else конструкций. Возможно, даже в том случае, если второе утверждение будет сведено к чему-то подобному, как первая функция в парсере.

Однако второй из них менее читабельен, я бы предпочел первый.

0

Лучшего с использованием, если это зависит от того, как вам нужно ваше возвращаемого значения,

  1. Если вам необходимо вернуть значение не условие (реверс/ложь) только у могли бы использовать:

    if (! varOfsomeClass->isValid($imParams)){ 
        //some function you need to run 
    } 
    
  2. Если вам нужна право (истинный) возвращаемого значения, а затем использовать:

    if (varOfsomeClass->isValid($imParams)){ 
        // some function you need to run true 
    } 
    
  3. Если вам нужно истинные и ложные (как) возвращаемое значение, а затем использовать:

    if (varOfsomeClass->isValid($imParams)){ 
        // some function you need to run true 
    } else { 
        // some function you need to run false 
    } 
    

И для вашего примечания, никогда не использовать это:

if (varOfsomeClass->isValid($imParams)){ 
} else { 
    //some function you need to run 
} 

Это то, что вы назвали не «человеческим», это как будто вы светлые, но у вас темнеют. :)

Смежные вопросы