15.10.2010, 09:34 | #1 |
Участник
|
Постановка задачи:
Есть некий относительно объёмный кусок кода, который многократно повторяется и который в силу некоторых причин нельзя вынести в отдельную функцию. Есть какие-нибудь предложения по красивому решению данной проблемы? В C++ в таком случае я мог воспользоваться inline функцией или может быть даже директивой define (не факт). Сдесь же (я совсем новичок в c/al) я не вижу решений, кроме как захламлять код повторяющимися блоками и это меня сильно напрягает. |
|
15.10.2010, 10:06 | #2 |
Участник
|
Надо постараться его вынести в отдельную функцию, а если совсем нельзя, то расслабиться и получать удовольствие.
|
|
15.10.2010, 10:39 | #3 |
Участник
|
Думаю причина, по которой объемный кусок кода нельзя вынести в отдельную функцию не в "силе некоторых причин", а в том, что "я совсем новичок".
|
|
15.10.2010, 11:25 | #4 |
Участник
|
Цитата:
И так, у меня крутится рекурсия, а в этом куске кода, проверяется множество условий дальнейшего погружения в рекурсию или выхода из неё. Если я вынесу этот код в отделдьную функцию, то я себе не представляю как из этой, созданной функции, мне управлять входами и выходами совершенно другой функции. Если Вы мне подскажете, как это делать, то это будет замечательно! P.S. Судя по всему, ответ на главный вопрос: "Можно ли в c/al вызывать кусок кода не вызывая новой функции?" я получил и он отрицательный |
|
15.10.2010, 12:24 | #5 |
Участник
|
Выделяете код в функцию, которая возвращает булево значение. На входе необходимые параметры. В ходе выполнения функции-оболочки на вход будут подаваться параметры, а на выходе получаться решение - продолжать работу или выходить из рекурсии.
Да. Кусок кода в си ал вызвать нельзя. Операторов Гоу Ту здесь нет. |
|
15.10.2010, 12:41 | #6 |
Участник
|
Цитата:
Если я вынесу этот код в отделдьную функцию, то я себе не представляю как из этой, созданной функции, мне управлять входами и выходами совершенно другой функции. Если Вы мне подскажете, как это делать, то это будет замечательно!
Цитата:
P.S. Судя по всему, ответ на главный вопрос: "Можно ли в c/al вызывать кусок кода не вызывая новой функции?" я получил и он отрицательный
|
|
15.10.2010, 13:36 | #7 |
Участник
|
Цитата:
К сожалению, из всего сишного наследия в Nav реализовано только X+=1; Думаю, что именно из-за этого этот язык вместо Ultra\Goofy\Pascal носит гордое название C\AL Я тоже временами страдаю от невозможности #define или отсутствия макросов. Но! Вот чтобы ТАКАЯ проблема - это впервые. Даже любопытно, что же это такое может быть и где применяется? Предлагаю: Раз этот некий "объёмный кусок кода" УЖЕ ЕСТЬ и кем-то написан, то не проще ли выложить его в форум для оптимизации? (ну, и вкратце обрисуй задачу. уж больно она, как сказать... нетривиальная, вот И пусть каждый, кому интересно и кто умеет, этот кусок "оближет" по своему. А мы потом все вместе посмотрим, что у кого получилось. Идёт? Опять же, всем обоюдная выгода: Ты доложишь своему руководству о "беспрецедентной оптимизации". А интересующиеся люди попрактикуются в рекурсии. (лично мне это интересно) ЗЫ: А если это твоё чудо можно потом ещё будет прикрутить и использовать как ноу-хау в стандартном функционале, то, думаю, и от Маззи "приз в студию" будет! |
|