LINUX.ORG.RU

Правильный код


0

4

Алгоритм задачи написан так что следующий блок может выполняться только после успешного завершения предыдущего. Таких блоков от 20 до 100.
Можно написать в структуре со вложенными if else, а можно после каждого блока писать return при неудачном завершении. Вариант с GOTO просто не рассматривается. И тот и другой вариант мне не нравится. Вложенность ифоф реально доставляет, большое количество ретурнов нарушает концепцию один вход - один выход.

Кто что посоветует?

★★★★★

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

медленно же

если кидать миллионы исключений в секунду - то да

и что хуже, не time-deterministic

может ты и malloc не используешь?

wota ★★
()

Зависит от языка. Если С/С++ - то return. В случае С можно и гото сделать. исключения - зависит от вероятности оказаться в нем. Т.е. только в случае ошибки.

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

Подзадачи размером от 5 до 10 строк, а их набежит несколько тысяч

ЧТООАААА?

Подпрограммы такого размера ПРОСТО НЕ ДОЛЖНЫ СУЩЕСТВОВАТЬ. Это вопиющая ошибка. Это будет боль в отладке и поддержке.

Подзадачи перевести в отдельные функции, вызывать из декларативно описанной стейт-машины как тут посоветовали.

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

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

красотища

вменяемый концепт - зачетно

run_job еще натравить на try..catch ... ну это уже детали и так ясно. По сути ерланг-программа сильно напоминает откровенный FSM.

swwwfactory ★★
()

в цикле.

int status=1;

switc(status)

case 0 : return -1;
case 1 : if(делалось ли действие ранее? если да то пропустить)делаем что-то если успешно то status=1; break;
case 1 : ...........

blogdron
()

Каждый блок - в отдельную функцию (процедуру, объект, пофиг).
Все эти функции в список.
Выполнять - перебором цикле любого удобного вида.

Никакой каши из if'ов, return'ов и богомерзких goto при этом нет.

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

Подзадачи оформляются отдельными функциями.

Вот это совсем не катит. Подзадачи размером от 5 до 10 строк, а их набежит несколько тысяч. В этом ворохе просто не разобраться будет :(

Почему же? Имхо, как раз наоборот. Но если мешают имена функций, в используемом тобой языке наверняка есть возможность объявлять анонимные функции.

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

Согласен. Иногда решения на нём выглядят действительно проще. И своё, предложенное здесь, я описал именно в его стиле.

blexey ★★★★★
()

Правильный код
Таких блоков от 20 до 100.

Ты сделал мой вечер.

anonymous
()

большое количество ретурнов нарушает концепцию один вход - один выход.

нафига такая концепция?

quest ★★★★
()
class Solver
{
public:
    bool solve(SolverContext &c);
private:
    bool solveA(SolverContext &c);
    bool solveB(SolverContext &c);
    //...
    bool solveZ(SolverContext &c);
}

bool Solver::solve(SolverContext &c)
{
    return solveA(c) && solveB(c) /* ... */ && solveZ(c);
}

/thread

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

Да, правильно. твоё решение +raii = вообще идеально для спп кмк.

Фп на самом деле мышление в этом плане меняет. Хочу ещё лисп какой-нибудь освоить, только времени не хватает.

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

Ох^WОчень замечательная штука этот эрланг.

Угу. Но мне больше elixir нравится.

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

В эрланге нету maybe, а в хаскелях/лиспах я не шарю к сожалению.

Была попытка сделать синтаксические расширения для Erlang, в том числе и do-нотацию с монадами: https://github.com/rabbitmq/erlando#do. Не знаю, работает ли оно сейчас или нет.

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

Сделал несколько вариантов.
Манада MayBy понравилась больше всего, но руководители забраковали. Не понимают как это работает. А это еще и сопровождать надо. :( Ну да ладно. Старость надо уважать :)
Да! Язык C#

vada ★★★★★
() автор топика

Список указателей на блоки и цикл.

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

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

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

Нужно просто понимать, что это ЛОР - повезет, будет дельный совет, нет, будет много бурлящих говн :)

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