1

Тема: Яка умова краще?

це не стосується суто php, але власне, яка умова краще?

if(null===$item)

//чи 

if($item===null)

2 Востаннє редагувалося FakiNyan (23.02.2016 20:50:39)

Re: Яка умова краще?

УКРАЇНСЬКА!
а, Умова, а я думав, що мова
p.s. ви серйозно?

3

Re: Яка умова краще?

FakiNyan написав:

УКРАЇНСЬКА!
а, Умова, а я думав, що мова
p.s. ви серйозно?

так серйозно, тут є одна заковика, знаєте яка?

4

Re: Яка умова краще?

muhasjo написав:
FakiNyan написав:

УКРАЇНСЬКА!
а, Умова, а я думав, що мова
p.s. ви серйозно?

так серйозно, тут є одна заковика, знаєте яка?

нє

5

Re: Яка умова краще?

В PHP теж можна присвоювати в умові? Страждайте :D

Подякували: 221VOLT1

6

Re: Яка умова краще?

quez написав:

В PHP теж можна присвоювати в умові? Страждайте :D

прям в точку :D

Подякували: 221VOLT1

7

Re: Яка умова краще?

Другий мені здається.
is_null($item) теж непогано.

Подякували: mike, 221VOLT, leofun013

8

Re: Яка умова краще?

2-й варіант краще читається.
1-й варіант більш безпечний, якщо кодити в "важкі часи".

Подякували: mike, koala, 221VOLT3

9

Re: Яка умова краще?

пан @quez правий
я більше схиляюсь до першого. хоча я в прикладі я написав === замість ==, але це суті практично не міняє.
отже наприклад ВИ пишете код, і машинально написали ось, що

if($item=null){

//...
}

і все, цей код валідний при чому завжди рівне true

на відміну від попередньго коду тут вивалиться еррор, адже константи змінювати заборонено

if(null=$item){

//...
}

такий прийом нічого не міняє логіці роботи, зато убереже від всяких непотрібних багівпомилок

10

Re: Яка умова краще?

== з = ще переплутати можна, але === з = вже важко. А от === від == так не відрізниш.

Подякували: mike, 221VOLT2

11

Re: Яка умова краще?

muhasjo написав:

такий прийом нічого не міняє логіці роботи, зато убереже від всяких непотрібних багівпомилок

Ну як вам сказати, якщо одне око дивиться в один бік, а інший - в інший, то начебто в обох випадках ви бачите, але як би воно... той го... не те

Можна використовувати ще is_null()

12

Re: Яка умова краще?

ktretyak написав:

Ну як вам сказати, якщо одне око дивиться в один бік, а інший - в інший, то начебто в обох випадках ви бачите, але як би воно... той го... не те

щось я незрозумів, на що це вплине?

13

Re: Яка умова краще?

Це впливає на нелогічність думки, це теж саме що міряти не "від -> до", а "до -> від".

14 Востаннє редагувалося 221VOLT (24.02.2016 02:35:43)

Re: Яка умова краще?

muhasjo написав:

пан @quez правий
я більше схиляюсь до першого. хоча я в прикладі я написав === замість ==, але це суті практично не міняє.
отже наприклад ВИ пишете код, і машинально написали ось, що

if($item=null){

//...
}

і все, цей код валідний при чому завжди рівне true

на відміну від попередньго коду тут вивалиться еррор, адже константи змінювати заборонено

if(null=$item){

//...
}

такий прийом нічого не міняє логіці роботи, зато убереже від всяких непотрібних багівпомилок

а чому не можна порівнювати по-інакшому?

зазвичай порівнюють

if($it===null){
echo $z;
}else{
echo $f;
}

чому б не порівнювати

if($it!==null){
echo $f;
}else{
echo $z;
}

?

------

доречі щось я таке в чаті сішників чув, що в с/с++ порівняння z!=0 працює швидше ніж порівняння z==0 (правда від компілятора ще може залежати - оптимізовує чи ні)

15

Re: Яка умова краще?

Повірте, якщо можеш Сам переплутати = з ==, то так самого легко з === :), і так порівнють в більшості тоді, коли треба порівняти включно з типом даних.

Якщо просто пустий рядок, без типу null ($str = null)

var_dump('' == null); //true
var_dump('' === null); //false

Подякували: 221VOLT1

16

Re: Яка умова краще?

221VOLT написав:

доречі щось я таке в чаті сішників чув, що в с/с++ порівняння z!=0 працює швидше ніж порівняння z==0 (правда від компілятора ще може залежати - оптимізовує чи ні)

Суттєво залежить від компілятора, асемблера, налаштувань оптимізації і т.п. Зрештою, можна писати і просто

if(z)...
Подякували: 221VOLT1

17 Востаннє редагувалося iovchynnikov (24.02.2016 10:32:53)

Re: Яка умова краще?

Не буду казати що такі помилки з 1 = дуже рідкі, і важко досвідченому програмісту її зробити, а IDE такі ситуації теж викриває, але у 80% такі перевірки виглядають так:

if (var == null)
   throw new NullPointerException();

Тому навіть якщо мова підтримує присвоєння у if, то там буде true і вивалиться виняток.

Я особисто за 2 другий варіант, тому що він є менш логічно-навантажений (Якщо моя змінна пуста, то... а не Якщо пустота є моєю змінною, то...), що при великій кількості коду є плюсом. Звичайно, це не rocket science, але коли тримаєш у голові 400 ліній коду і тут такий іф, який трохи відходить від звичайної практики, може змусити вас трохи приділити "процесорного часу" на таку дрібницю.

До того цей код абсолютно ідентичний і має абсолютно однакові наслідки, які б значення змінної не були. Це не джавовий equals, де є різниця, писати:

if ("text".equals(myVariable))
//чи
if (myVariable.equals("text"))
Подякували: 221VOLT1

18

Re: Яка умова краще?

Моя історія. Я проголосував за 2гий варіант але вони обоє хороші і все залежить від інструментів.
Є безліч нюансів. Якщо ви пишете з нуля або підтримуєте код. Якщо ви кодити 1н або вас 5ро. Якщо у вас є кльова IDE або ви юзаєте sublime і тд. Тобто кожен код хороший по своєму.
Варіант 1н хороший тоді коли у вас наступні умови:

if(null===$item)


1. Уже були випадки що ви писати if($item=null)
2. Якщо у вас в команді багато молодих і ви їх б`єте по пальцях кожен раз коли вони стараються написати if($item==null)
3. Якщо ви пишете проект з нуля - тоді це хороша практика.
4. Якщо вас не напрягає читати таку конструкцію
5. Якщо ви деколи робите присвоєння в if конструкції

Варіант 2  краще використовувати ось коли:

if($item===null)

1. У вас є ide яка підсказує червоним кольором - про присвоєння у констуркції if
2. Вам легше читати такий код ні тей що представлений у варіанті 1.
3. У вас немає присвоєнь у конструкції if і ви без проблем можете написати if($item==null)
4. У вас є CI або будь які інші тести коду які вам дадуть червоний екран якщо ви напишите if($item=null) щось у цьому роді


До речі подумав що було б кльово мати такий валідатор.

Подякували: 221VOLT1

19

Re: Яка умова краще?

iovchynnikov написав:

Не буду казати що такі помилки з 1 = дуже рідкі, і важко досвідченому програмісту її зробити, а IDE такі ситуації теж викриває, але у 80% такі перевірки виглядають так:

if (var == null)
   throw new NullPointerException();

Тому навіть якщо мова підтримує присвоєння у if, то там буде true і вивалиться виняток.

Але ж там буде false, що в PHP, що в с++.

20

Re: Яка умова краще?

Але ж там буде false, що в PHP, що в с++.

+1 Саме так там буде false і умова ніколи не буде спрацьовувати)

@221VOLT

чому б не порівнювати

    if($it!==null){
    echo $f;
    }else{
    echo $z;
    }

бувають ситуації що вам треба наприклад створити обєкт якщо його немає.

if($user === null ) { 
  $user = new User();
  $user->save();
}
echo   $user->getId();

Ви звісно можете написати

if($user !== null ) { 

} else{
  $user = new User();
  $user->save();
}

echo   $user->getId();

Але це буде дуже погано. І ще одне. для Особисто мені краще перевіряти умову на true аніж на false.

Подякували: 221VOLT1