Быдлокодерам (Заметки)

652
.
(\/)____o_O____(\/)
Натолкнули на создание темы некоторые товарищи, первое это копипаст, индуский метод кода, не знание мат части.
Много раз видел новичков, которые начинали что либо писать (сам таким же был) , но не изучив вопросы и реализации до нужного уровня.
Тема тут создавалась, прямое этому доказательство, на копипастили, создали кучу конструкций IF ELSEIF ELSE,
где то сократили не зная правил, когда можно, когда нельзя, в итоге код разросся и контролировать его стало не возможным, даже если соблюсти все отступы и убрать сокращения.
логика вроде была построенна правильно, но изучить данные почему то ни кто не хочет, а лепить непонятные конструкции, и бежать в форум, создавать тему о помощи, участники увидив который даже не хотят разбираться
в этом быдлокоде, так как свое время всем дорого, а быдлокодеров навалом, проще послать читать книжки.

вот функция которую попытался написать товарищ, чтоб оценить всю сущность проблемы и метод быдлореализации
function on_k($id)
{
$usk=mysql_fetch_array(mysql_query("SELECT * FROM `kolhoz_user` WHERE `id` = '$id'"));
$us=$usk;
$t=time()-600;
if($usk['date_last']<=$t)
{
if($us['pol']==0){if($us['ico']==0){
if($usk['level']>=0 && $usk['level']<30)$img="user_female_offline.png";
elseif($usk['level']>=30 && $usk['level']<35)$img="user_female_gold_offline.png";
elseif($usk['level']>=35 && $usk['level']<40)$img="user_female_platin_offline.png";
elseif($usk['level']>=40 && $usk['level']<45)$img="user_female_green_offline.png";
elseif($usk['level']>=45 && $usk['level']<50)$img="user_female_45_offline.png";
else $img="user_female_50_offline.png";
}else{if($usk['ico']==1)$img="angel_female_off.png";elseif($usk['ico']==2)$img="alladin_female_off.png";elseif($usk['ico']==3)$img="bayker_female_off.png";elseif($usk['ico']==4)$img="boks_female_off.png";elseif($usk['ico']==5)$img="demon_female_off.png";elseif($usk['ico']==6)$img="fiance_female_off.png";elseif($usk['ico']==7)$img="holiday_female_off.png";elseif($usk['ico']==8)$img="glamyr_female_off.png";elseif($usk['ico']==9)$img="love_female_off.png";elseif($usk['ico']==10)$img="shrek_female_off.png";}}
else
{
if($usk['ico']==0){if($usk['level']>=0 && $usk['level']<30)$img="user_male_offline.png";
elseif($usk['level']>=30 && $usk['level']<35)$img="user_male_gold_offline.png";
elseif($usk['level']>=35 && $usk['level']<40)$img="user_male_platin_offline.png";
elseif($usk['level']>=40 && $usk['level']<45)$img="user_male_green_offline.png";
elseif($usk['level']>=45 && $usk['level']<50)$img="user_male_45_offline.png";
else $img="user_male_50_offline.png";
}elseif($usk['ico']==1)$img="angel_male_off.png";elseif($usk['ico']==2)$img="alladin_male_off.png";elseif($usk['ico']==3)$img="bayker_male_off.png";elseif($usk['ico']==4)$img="boks_male_off.png";elseif($usk['ico']==5)$img="demon_male_off.png";elseif($usk['ico']==6)$img="fiance_male_off.png";elseif($usk['ico']==7)$img="holiday_male_off.png";elseif($usk['ico']==8)$img="glamyr_male_off.png";elseif($usk['ico']==9)$img="love_male_off.png";else($usk['ico']==10)$img="shrek_male_off.png";}}
else
{
if($us['pol']==0){if($us['ico']==0){
if($usk['level']>=0 && $usk['level']<30)$img="user_female.png";
elseif($usk['level']>=30 && $usk['level']<35)$img="user_female_gold.png";
elseif($usk['level']>=35 && $usk['level']<40)$img="user_female_platin.png";
elseif($usk['level']>=40 && $usk['level']<45)$img="user_female_green.png";
elseif($usk['level']>=45 && $usk['level']<50)$img="user_female_45.png";
else $img="user_female_50.png";
}
}else{if($usk['ico']==1)$img="angel_female.png";elseif($usk['ico']==2)$img="alladin_female.png";elseif($usk['ico']==3)$img="bayker_female.png";elseif($usk['ico']==4)$img="boks_female.png";elseif($usk['ico']==5)$img="demon_female.png";elseif($usk['ico']==6)$img="fiance_female.png";elseif($usk['ico']==7)$img="holiday_female.png";elseif($usk['ico']==8)$img="glamyr_female.png";elseif($usk['ico']==9)$img="love_male.png";else($usk['ico']==10)$img="shrek_female.png";}
else
{
if($usk['ico']==0){
if($usk['level']>=0 && $usk['level']<30)$img="user_male.png";
elseif($usk['level']>=30 && $usk['level']<35)$img="user_male_gold.png";
elseif($usk['level']>=35 && $usk['level']<40)$img="user_male_platin.png";
elseif($usk['level']>=40 && $usk['level']<45)$img="user_male_green.png";
elseif($usk['level']>=45 && $usk['level']<50)$img="user_male_45.png";
else $img="user_male_50.png";
}
else{if($usk['ico']==1)$img="angel_male.png";elseif($usk['ico']==2)$img="alladin_male.png";elseif($usk['ico']==3)$img="bayker_male.png";elseif($usk['ico']==4)$img="boks_male.png";elseif($usk['ico']==5)$img="demon_male.png";elseif($usk['ico']==6)$img="fiance_male.png";elseif($usk['ico']==7)$img="holiday_male.png";elseif($usk['ico']==8)$img="glamyr_male.png";elseif($usk['ico']==9)$img="love_male.png";else($usk['ico']==10)$img="shrek_male.png";}}
}
echo "<img src='images/icons/$img'/>";
}

не много посидев можно придумать простую функцию, которая сделает нам нужное,
нам надо узнать есть ли у юзера купленная икона, онлайн/офлайн, карму(посты где либо, баллы))), и пол
---
то что автор предложил
RAZDOR
Вот необходимый алгоритм if(женский пол){Если пользователь онлаин и не выбрана картинка{выводим стандартные картинки}иначе{выводим выборочные}или если пользователь офф{выводим стандартные картинки}иначе{выводим выборочные}}иначе(тоесть мужской пол){Если пользователь онлаин и не выбрана картинка{выводим стандартные картинки}иначе{выводим выборочные}или если пользователь офф{выводим стандартные картинки}иначе{выводим выборочны} с реализацией засада
---

Анализ быдлокода
смотрим на аргументы функции - это ид, который в итоге тащит массив с базы, поля юзера, причем все поля
-- зачем тащить опять все с базы, делать еще один запрос, когда иконки эти скорее всего будут выводиться в каких либо циклах (посты, коменты))) , где запрос на юзера уже есть
-- для совместимости двух быдлокодов дублируем массив , чтоб $usk и $us работало, вообще не рационально
----
нам то надо всего 4 поля, это временная метка о последнем посещении сайта, чтоб высчитать онлайн или офлайн, пол юзера, карму или какие либо прочие заслуги, выбранная иконка
значит в функцию можно будет и передать эти аргументы имея запрос от цикла вывода
далее мы видим копипаст, где один с сокращениями конструкций без фигурных скобок (начинающим лучше писать все скобки, самим же проще будет разобраться)
второй копипаст проверяет карму с шагом в 5, менее 30, от 30 до 35, от 35 до 40...
в итоге все это связанно опять же конструкциями IF ELSE по половому признаку и метке онлайн.
Автор кода раздул копипаст до того момента когда его уже даже разбирать и понять сложно, в итоге где то пропустил или не дописал пару тройку скобок, и хана, код не работает, помогите
глянув код, любой адекватный товарищ пройдет мимо, ну или промолчит от полученного шока от кода.

К реализации
я собрал картинки по их логике и общим признакам в группы, посмотрев имена файлов, пришло в голову две реализации
первая - это разбросать по папкам и полученными аргументами управлять выводом (Домашнее задание, если кому интересно посидеть подумать, сделать и получить практику)
вторая - это группы собрать в массив (многомерный) и апперировать ключами (это и будет пример)

Велосипедные хитрости
чтоб не проверять число с шагом, то есть по диапазону (шаг 5), придумался такой вот велосипед
карма умножается на 2, чтоб получилось число которое делится на 10 без остатка
делим на 10 и округляем в большую сторону
то есть условие как бы получилось не больше 30 и меньше 35, а больше 60 и меньше 70, округляем и делим на 10, получаем 7, ключ для картинки от 30 до 35 и так далее

Собираем массив
далее смотрим что карма работает если картинка не выбрана, то есть при значении 0 для поля картинка, прочие выбранные картинки уже от одного до 10
то есть массив от 0 до 10, где 0 элемент тоже массив с ключами полученными от велосипеда
далее нам нужно еще в имени файла указать онлайн и пол

Сама функция получилась 10 строчек

function user_icon($last, $sex, $ico, $level) {
// проверка онлайна // 
$off = ($last + 600) - time() < 0 ? 1 : 0; 
// проверка баланса //
$level = ceil($level*2/10);
$level = $level<6 ? 5 : ($level>10 ? 10 : $level);
// проверка пола //
$sex = $sex > 0 ? 'male' : 'female';

$array_ico = array(array(5 => '', '_gold', '_platin', '_green', '_45', '_50'), 'angel_', 'alladin_', 'bayker_', 'boks_', 'demon_', 'fiance_', 'holiday_', 'glamyr_', 'love_', 'shrek_'); 
$before = $ico > 0 ? $array_ico[$ico] . $sex : 'user_' . $sex . $array_ico[0][$level];

// окончание //
$after = $off > 0 ? ($ico > 0 ? '_off' : '_offline') : '';

return '<img src="images/icons/' . $before . $after . '.png" alt="ico" />';
}

вызов функции в выводе (цикл вывода постов))) передав нужные аргументы
P.S.
вот вам файл из футбольного менеджера на 400кб подобного быдлокода, сам удивляюсь как его с файлов переписали на базу, и не удивляюсь почему дырок навалом и местами просто код неожиданно обрывается
(Гг , наверное этот герой просто от усталости падал под стол , так как сутками втыкал в быдло код )
Прикрепленные файлы:
.
Дочитал до if($usk['level'], дальше читать невозможно и совсем непонятно на кой ляд копировать значение одной переменной в другую и ничего с ним не делать и с $t=time()-600; тоже самое что это? Тупой копипаст с разных скриптов...
.
"Все "правила хорошего кода" написаны кровью, вытекшей из глаз программистов, читавших чужой код"
Сейчас ощутил это на себе. О_о
.
~XeOn~
Koenig, ОМГ. всему быдлокоду быдлокод гг. Особенно файл из футменера
.
SlyDeath (22.11.2012 / 13:07)
"Все "правила хорошего кода" написаны кровью, вытекшей из глаз программистов, читавших чужой код"
Сейчас ощутил это на себе. О_о
Аналогично
.
Koenig (22.11.2012 / 09:53)
Натолкнули на создание темы некоторые товарищи, первое это копипаст, индуский метод кода, не знание мат части.
Много раз видел новичков, которые начинали что либо писать (сам таким же был) , но не из
Это конечно все хорошо,но это не джон.ни кармы, ни баллов в нем нет.если в зависимости от уровня не куплена иконка то выводяться стандартные, он, офф или же купленные.функция была построена на первоначальной лишь добавив условие иконка куплена
.
OtherWorld, Это вобще то высчет для он/оф
.
~XeOn~, Это не фут,и тем более не мое.перебираю чужую игру, практически аналог колхоза
.
RAZDOR (22.11.2012 / 14:40)
OtherWorld, Это вобще то высчет для он/оф
ща я твой код переделаю, с учетом того что это не ждон.
.
~XeOn~, Я могу дать файл стандартный который был до велосипеда.нужно обновить с учетом покупки иконок.если что заплачу
Всего: 35