LINUX.ORG.RU

Ответ на: комментарий от stevejobs

то есть, все программы на функциональных языках

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

true_admin ★★★★★
()
Ответ на: комментарий от schizoid

В C++ канонично заменять switch вообще полиморфизмом.

Вот вот, это верный признак быдлокода — строить воздушные замки вместо реальной работы.

baverman ★★★
()
Ответ на: комментарий от stevejobs

Бывает, но зависит от случая. Иногда вообще std::map удобнее.

schizoid ★★★
()
Ответ на: комментарий от AlexCones

> Правило рекурсивно? Если да, то в итоге получится пустой файл.

Любую программу можно превратить в пустой файл. Просто зайди на ЛОР и тебе объяснят, что такая программа не нужна.

Aceler ★★★★★
()
Ответ на: комментарий от drBatty

Может аффтор гений, а вы иди^Wпросто пьяны :)

И такое возможно. Но обычно даже на глаз видно. Вот, например, нормальный код, хотя я въезжал долго т.к. редко пишу на сях и адресная арифметика тяжело даётся.

Говнокод - это когда аффтор через 5 минут не понимает написанное. :)

а если понимает? Года четыре назад пытался сайт переписать, там названия переменных были типа a1, a2, ab1, ah1, итд итп. Я спросил автора что они значат, ответил :)

true_admin ★★★★★
()
Ответ на: комментарий от stevejobs

Паттерн стратегия? Это классика

Когда стратегируют тривиальные вещи — это клиника.

baverman ★★★
()
Ответ на: комментарий от aho

Намного полезнее будет прогнать clangовый анализатор

Deleted
()
Ответ на: комментарий от Deleted

Единственная программа, в которой нет ошибок :)

А все обычные неидеальные программы получаются внесением изменений в нее.

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

А все обычные неидеальные программы получаются внесением ошибок в нее.

Fixed во имя правды :)

Deleted
()
Ответ на: комментарий от schizoid

В C++ канонично заменять switch вообще полиморфизмом.

Это в сложных случаях. Если же ты будешь писать стратегию на каждый чих вместо 5строчного свитча, то это уже клиника :)

Deleted
()
Ответ на: комментарий от Sadler

> # Заточенность под конкретный компилятор, систему и т.п.

На common lisp не всегда можно легко написать портируемый код, да и не нужно это.

different_thing
()
Ответ на: комментарий от Deleted

А все обычные неидеальные программы получаются внесением ошибок в нее.

Но это же должно полностью оправдать программистов пред лицем Динасека! Фундаментальный закон, епта.

Nervous ★★★★★
()
Ответ на: комментарий от Nervous

пред лицем Динасека

А что DNA_Seq имеет против программистов? Я что-то важное пропустил?

Deleted
()
Ответ на: комментарий от Biga

> Есть великолепнейший рассказ «как мне не хватало байта». Антипруф.

Рассказ называется «История одного байта». И в конце, судя по всему, ему таки удалось путём неимоверных ментальных усилий уменьшить программу на 1 байт и впихнуть её в контроллер

Harald ★★★★★
()

А почему вдруг такая постановка вопроса? Вроде обычно плохокод детектировать не надо, он сам прет.

(По теме все уже Крон73 написал).

lodin ★★★★
()

Бить по морде в следующий раз

darkshvein ☆☆
()
Ответ на: комментарий от Deleted

Тролль или в самом деле не знаешь?

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

int main ()
{
    int var;
    ...
    void foo ()
    {
         ...
         var = 0;
         ...
     }
    ...
}

на вопрос - что это? был дан ответ - это чтобы не использовать глобальные переменные

ananas ★★★★★
()
Ответ на: комментарий от Deleted

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

+ например, #'file-position, функция, возвращающая текущую позицию в файле (либо вообще в потоке). В clisp и sbcl она возвразает просто число, которое можно просто сравнивать с помощью #'> и #'<. Но если почитать cltl, то можно узнать, что она может возвращать что угодно, однозначно определяющее позицию. Но не факт, что тебе легко удасться сравнить эти позиции, если это потребуется. Я конечно, не знаю таких реализаций (если они вообще есть), но я бы на них смело плюнул, появись они такие

different_thing
()
Ответ на: комментарий от KRoN73

Поехали дальше :)

— Функции, большие, чем десяток-полтора строк

Не согласен. А если 40 строк решают одну и ту же по смыслу задачу и используются только здесь и сейчас, нафига разносить их по разным функциям?

different_thing
()
Ответ на: комментарий от different_thing

в дополнение, main - тоже функция. а если она одна и более полутора десятка строк - это сходу говнокод?

ananas ★★★★★
()
Ответ на: комментарий от ananas

Автор сего кода не осилил синглтоны. И да, глобальные переменные, как и любой другой говнокод, не является абсолютным злом.

Deleted
()
Ответ на: комментарий от Deleted

откуда в си, не плюсах, синглтоны возьмутся? от сырости, чтоле?

ananas ★★★★★
()
Ответ на: комментарий от drBatty

> функциональных языках

на С/С++ да

в последнее время становиться сложн отличить дураков от толстых троллей.

x0r ★★★★★
()
Ответ на: комментарий от ananas

>в дополнение, main - тоже функция. а если она одна и более полутора десятка строк - это сходу говнокод?

Да.

KRoN73 ★★★★★
()
Ответ на: комментарий от schizoid

> Если код можно переписать с уменьшением размера, пожирания памяти и ресурсов и ускорением - это говнокод.

Любой код можно переписать с уменьшением размера, пожирания памяти и ресурсов. Главное - поддерживаемость кода и легкость его изменения в будущем

maxcom ★★★★★
()
Ответ на: комментарий от maxcom

http://tinyurl.com/cgpn2w2

Иногда случается, что почти невозможно :)

PS. Как любитель решать олимпиадные задачи, очень часто наталкиваюсь на проблему, когда очень нужно переписать код с уменьшением пожирания памяти и ресурсов - иногда добиться результата очень и очень сложно.

Поэтому с

Любой код можно переписать с уменьшением размера, пожирания памяти и ресурсов.

не соглашусь.

Deleted
()
Ответ на: комментарий от different_thing

>Не согласен. А если 40 строк решают одну и ту же по смыслу задачу и используются только здесь и сейчас, нафига разносить их по разным функциям?

Сегодня видел говнокод - функция на PHP, в которой 20 строчек как по канону. НО каждая строчка имела настолько громадную длину, что расползалась на треть моего монитора (а он у меня конечно не очень большой, но и не самый маленький - 1600х1280, маленькими буквочками).

drBatty ★★
()
Ответ на: комментарий от Deleted

>не соглашусь.

если это реальная задача - можно. Всегда. Другое дело, что это не всегда нужно - если критические куски и так уже полностью оптимизированы, то остальное не даст никакого практического профита.

drBatty ★★
()
Ответ на: комментарий от maxcom

>Главное - поддерживаемость кода и легкость его изменения в будущем

Чем сильнее оптимизирован код, тем сложнее его поддерживать и тем менее он переносим. Всегда ваш К.О.

drBatty ★★
()
Ответ на: комментарий от ananas

>на вопрос - что это? был дан ответ - это чтобы не использовать глобальные переменные

я вот уже много лет хочу найти ответ на вопрос: а нужны-ли на практике вложенные функции в С, и если нужны, то - зачем?

drBatty ★★
()
Ответ на: комментарий от Deleted

та самая Единственная программа, в которой нет ошибок :)

Полное правило таково: «Любую программу можно сократить на один байт. Любая программа содержит хоть одну ошибку.» Поэтому даже в программе длиной ноль байт есть ошибка ^__^

Xenesz ★★★★
()

Предлагаю написать код (не плохокод) который детектит г*внокод =) За каждую г*авночасть начисляются баллы.

Ну и запилить сайт с топом г*авнокода.

adzeitor
()
Ответ на: комментарий от Deleted

> PS. Как любитель решать олимпиадные задачи, очень часто наталкиваюсь на проблему, когда очень нужно переписать код с уменьшением пожирания памяти и ресурсов - иногда добиться результата очень и очень сложно.

Это редкие случаи, в «промышленном» программировании почти не встречающиеся.

maxcom ★★★★★
()
Ответ на: комментарий от Deleted

> Как раз main и должен быть коротким.

ага. особенно, когда ресурсы надо экономить. короткий main, хренова туча лишних call-ов, зато верификацию на неговнокод по крону прошел.

ananas ★★★★★
()
Ответ на: комментарий от schizoid

>В C++ канонично заменять switch вообще полиморфизмом

Я так прямо и представил, как простенький switch на 4 состояния в крохотном конечном автомате заменили иерархией с 4 классами и виртуальным вызовом.

Ну, конечно, каноничную реализацию State никто не отменял, но во всём надо знать меру.

yoghurt ★★★★★
()
Ответ на: комментарий от baverman

>это верный признак быдлокода — строить воздушные замки вместо реальной работы

От случая к случаю. Например, в

void paint (Shape *shape, Surface *surface)
{
    switch (shape->type) {
        case Rectangle:
        ....
        break;

        case Circle:
        ...
        break;

        ...
}

полиморфизм как бы сам напрашивается

yoghurt ★★★★★
()
Ответ на: комментарий от baverman

Тем не менее, я не раз такое встречал в Промышленном Коде ~_~

yoghurt ★★★★★
()
Ответ на: комментарий от Xenesz

Есть другое правило: количество ошибок в программе не превышает количество байт в ней (основано на предположении, что в одном символе не больше одной ошибки). Поэтому программа в ноль байт - вырожденный случай, т.к. в ней не больше 0 ошибок.

Deleted
()
Ответ на: комментарий от baverman

Если он написан программистом со стажем менее пяти лет, то с большой долей вероятности это будет говнокод

Как же ты не прав...

panter_dsd ★★★★
()
Ответ на: комментарий от different_thing

Ну так кто говорил, что этот критерий абсолютен? Из любого критерия бывают исключения.

Deleted
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.