Узкопрограммерское: два восхитительных образца кода-"лапши"

Mar 28, 2014 18:13

Кроме программистов, вряд ли кому-то будет интересно. А вот (не)знание сетевых языков не важно, суть и так очевидна, коды простые.

1. Настолько законченный шедевр, что даже нарочно пародию такую не напишешь. Адреса ящиков изменил во избежание, а вот "орфография-пунктуация" (сиречь переносы строк) сохранены для пущего и вящего.

Быдлокод php )

программизм

Leave a comment

Comments 38

maksa March 28 2014, 16:00:58 UTC
Я бы написал allsum2=allsum2+0;
Это концептуально правильно. :-)

И думаю - нет, не писал бы ты так же. Это, конечно, можно воспитать, но некоторых людей и воспитывать не надо - они в процессе обучения (неважно, как оно проводилось) сами всё понимают.

Reply

strelf1 March 28 2014, 16:40:31 UTC
Ну если скорость игнорить (действительно копейки ж), то концептуально да. =)

Хотя нет, не совсем. Концептуально 0+allsum2 ! Внимательнее код посмотри.

Reply


back_in_usa March 28 2014, 20:58:44 UTC
хаотичный набор вместо сетки условий

Не знаю, что такое сетка условий, но в JavaScript есть switch.

тупое плюсование вместо констант

А ещё в JavaScript есть оператор +=

Reply

bbb28 March 28 2014, 22:06:28 UTC
Ну, switch-то тут в лоб не прокатит. Там же на каждый вариант swithx-а and-ом паровозом еще условия прицеплены.

Reply

back_in_usa March 28 2014, 22:14:43 UTC
Очевидно, что должен быть switch по значению поля dostavka.

Reply

strelf1 March 29 2014, 06:44:44 UTC
Ну так да, switch тут оптимален.
В крайнем случае, если уж с ифами вертеть, то хотя бы иерархично, с вложениями по разным веткам и c else.

+= это уже детали синтаксиса. А вот 150, 200 и так далее можно было в отдельную переменную писать и уже в конце всё плюсовать (или вообще массив выделить).

Reply


j_j_marvin March 28 2014, 22:04:20 UTC
Мне кажется, что человек в здравом уме, вне зависимости от опыта, такое написать не может. Так что у тебя не было шансов стать автором такого шедевра. Мир жесток.

Reply

strelf1 March 29 2014, 06:40:36 UTC
Бывают ситуации "в бессознательном состоянии" (как же ещё творится всё гениальное?), ну там спьяну, в 5 утра, после 22 часов за компьютером и т.п.

Reply


bbb28 March 28 2014, 22:10:13 UTC
и тупое плюсование вместо констант

О-хо-хо. Если бы ты знал, как часто я натыкаюсь на подобное в коде, который сейчас поддерживать приходится. И числа эти не суммы денег (как в твоем примере), а именно какие-то алтернативы. Типа, 1 - это задолженность, 2 - проценты, 3 - просроченные проценты. Вот примерно так. И таких вот "номеров" с десяток.

Я сам фигел. Ну, блин, это это ж, вообще ОСНОВЫ. Школа. Использование констант.

(Если это важно, язык - PL/SQL)

Reply

strelf1 March 29 2014, 06:45:41 UTC
С подобным я вообще всё время работаю. Но эти два примера - апофигеоз.

Reply


roma7 March 29 2014, 00:26:43 UTC
За очень много лет я повидал очень много разного кода.

Первое -- понятно. Обычные такие следы отладки на пожаре.

А, вот, о втором давай поговорим, если не возражаешь.

Можешь сформулировать, почему именно ты так ругаешь второй код.

Почему плох транслит?

Почему ты считаешь что "сетка условий" (загадочное словосочетание, но, думаю, я тебя понял) была бы лучше?

Что за константы ты хотел бы видеть вместо "тупого плюсования" (вряд ли ты имеешь в виду те, что, конечно, пригодились бы для типов доставки)

И, таки, что тебе не нравится в вишенке?

Да, кстати, "спагетти-кодом" (ты, ведь, его под лапшой имеешь в виду?) обычно называют другое.

Reply

strelf1 March 29 2014, 07:01:31 UTC
Другое, да, там дело в запутанной структурированности. А это "быдлокод". Но тут одно без другого обычно не бывает, и я просто уже привык по работе всё в целом так называть, когда сталкиваюсь с хаотично сделанными сайтами (тем более что работодателям не суть важно, что именно там криво). Да, семантически-исторически неправильно. Могу поменять в заголовке и тексте заради пуризма ( ... )

Reply

roma7 March 29 2014, 09:46:34 UTC
Ok, с транслитом всё верно и понятно.

Про комментарии всё правильно. Но, ведь, как раз процитированный вполне понятен без комментариев. Он плох, да, видно, что его писал неквалифицированный программист. Однако, сама структура кода вполне логична. Чётко выписаны условия, при которых меняется цена. Наверняка эта структура соответствует структуре описания ценообразования в документе, по которому работал программист -- там наверняка была или таблица или именно такой список условий. Для полноты добавлены и условия, при которых цена не меняется. Такой код легко модифицировать, когда меняются цены. То, что не написали "+0", мне не кажется сколько-нибудь значимым. Делать += каждый раз, наверное, не стоило, но это просто ужас, а не ужас-ужас-ужас.

Код, который, ты, видимо, хочешь увидеть, содержит вложенные условия и длинный switch (см. ниже). Мне не кажется, что с этим кодом проще работать.

switch (deliveryType) {
case 0:
if (allSumm<1000) {
price = 250;
} else if (allSumm<3000 ( ... )

Reply

roma7 March 29 2014, 09:51:05 UTC
Или ты хотел бы увидеть что-то в стиле того, что ниже? Тогда я с тобой согласен :)

delivererFactory = function(){}

delivererFactory.prototype.getPrice = function(summ) {
this.setPrice(summ);
return this.price
}

delivererFactory.prototype.setPrice = function(summ) {throw 'We can not calculate the price';}

delivererFactory.make = function(type) {
if (delivererFactory[type] === undefined) {
throw 'Invalid delivery type';
} else {
delivererFactory[type].prototype = new delivererFactory();
}
return new delivererFactory[type];
}

delivererFactory[0] = function(){
this.setPrice = function(summ) {
if (summ<1000) {
this.price = 250;
} else if (summ<3000 ( ... )

Reply


Leave a comment

Up