2015-10-29 3 views
0

Я новичок в программировании и имеют простой вопрос: есть «лучше» или более эффективный способ сделать это ...проверка и установка переменной, эффективно

if (x != 0) { 
    y = x; 
} 

или

if (getMethod() != null) { 
    value = getMethod(); 
} 

Я новичок в программировании и выше кода (особенно второй) кажется неэффективным.

Заранее спасибо.

ответ

1

Во втором примере может наблюдаться слабость «Время проверки, время использования». Если первый вызов getMethod() возвращает ненулевое значение, возможно, что ваш второй вызов вернет значение null. Лучший способ сделать это будет:

value = getMethod(); 
    if(NULL != value) 
    { 
     /* use value as planned */ 
    } 
    else 
    { 
     /* handle a null value, probably an error */ 
    } 

, если интересно, вы можете прочитать больше о TOCTTOU слабости here.

Для вашего первого примера я действительно не вижу лучшего способа сделать это.

N.B. Этот ответ с точки зрения программиста C (видя, как C был одним из ваших тегов).

Надежда это помогает - Т.

+0

'value = getMethod();' в начале вашего примера неверно. OP хочет обновить 'значение' только в том случае, если' getMethod(); 'возвращает ничего, кроме' NULL'. –

+0

Прочтите ссылку, имеет смысл - спасибо. – Sammy

0

Вы можете сделать его короче

if (x) y = x; 

такая же, как

if (x != 0) { 
    y = x; 
} 

И

if (getMethod()) value = getMethod(); 

такая же, как

if (getMethod() != null) { 
    value = getMethod(); 
} 
0

Первый фрагмент кода: В C любое ненулевое значение трактуется как true и 0 рассматриваться как false. Таким образом, для первого примера, вы можете записать его в виде:

if (x) { 
    y = x; // this line will be executed if x not equal to zero 
} 

Второй фрагмент кода: Вы назвали getMethod() дважды, не является эффективным. В соответствии с вашим кодом вы присваиваете возвращаемое значение getMethod() в value, если getMethod() возвращает что-либо, кроме NULL. Таким образом, вы можете использовать временную переменную, чтобы проверить возвращаемое значение из getMethod(), как следующее:

temp = getMethod(); 
if (temp != null) { 
    value = temp; 
} 

Это позволит сократить вызывая тот же метод дважды.

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