AXForum  
Вернуться   AXForum > Microsoft Dynamics NAV > NAV: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 15.10.2010, 09:34   #1  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Постановка задачи:
Есть некий относительно объёмный кусок кода, который многократно повторяется и который в силу некоторых причин нельзя вынести в отдельную функцию. Есть какие-нибудь предложения по красивому решению данной проблемы?
В C++ в таком случае я мог воспользоваться inline функцией или может быть даже директивой define (не факт). Сдесь же (я совсем новичок в c/al) я не вижу решений, кроме как захламлять код повторяющимися блоками и это меня сильно напрягает.
Старый 15.10.2010, 10:06   #2  
prefreitor is offline
prefreitor
Участник
 
214 / 11 (1) +
Регистрация: 03.10.2006
Надо постараться его вынести в отдельную функцию, а если совсем нельзя, то расслабиться и получать удовольствие.
Старый 15.10.2010, 10:39   #3  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Думаю причина, по которой объемный кусок кода нельзя вынести в отдельную функцию не в "силе некоторых причин", а в том, что "я совсем новичок".
Старый 15.10.2010, 11:25   #4  
Predatore is offline
Predatore
Участник
 
163 / 17 (1) ++
Регистрация: 29.09.2010
Цитата:
Сообщение от romeo Посмотреть сообщение
Думаю причина, по которой объемный кусок кода нельзя вынести в отдельную функцию не в "силе некоторых причин", а в том, что "я совсем новичок".
Вполне возможно, давайте я уточню, почему я считаю что в отдельную функцию вынести нельзя.
И так, у меня крутится рекурсия, а в этом куске кода, проверяется множество условий дальнейшего погружения в рекурсию или выхода из неё. Если я вынесу этот код в отделдьную функцию, то я себе не представляю как из этой, созданной функции, мне управлять входами и выходами совершенно другой функции. Если Вы мне подскажете, как это делать, то это будет замечательно!
P.S. Судя по всему, ответ на главный вопрос: "Можно ли в c/al вызывать кусок кода не вызывая новой функции?" я получил и он отрицательный
Старый 15.10.2010, 12:24   #5  
romeo is offline
romeo
Участник
Аватар для romeo
 
564 / 10 (2) +
Регистрация: 31.03.2004
Выделяете код в функцию, которая возвращает булево значение. На входе необходимые параметры. В ходе выполнения функции-оболочки на вход будут подаваться параметры, а на выходе получаться решение - продолжать работу или выходить из рекурсии.

Да. Кусок кода в си ал вызвать нельзя. Операторов Гоу Ту здесь нет.
Старый 15.10.2010, 12:41   #6  
GGNAME is offline
GGNAME
Участник
 
67 / 10 (1) +
Регистрация: 21.02.2010
Цитата:
Если я вынесу этот код в отделдьную функцию, то я себе не представляю как из этой, созданной функции, мне управлять входами и выходами совершенно другой функции. Если Вы мне подскажете, как это делать, то это будет замечательно!
Если бы вы немного подробнее описали задачу, можно было бы ещё что то посоветовать.


Цитата:
P.S. Судя по всему, ответ на главный вопрос: "Можно ли в c/al вызывать кусок кода не вызывая новой функции?" я получил и он отрицательный
Абсолютно верно!
Старый 15.10.2010, 13:36   #7  
jopagames2 is offline
jopagames2
Участник
 
151 / 11 (1) +
Регистрация: 11.02.2010
Цитата:
Сообщение от Predatore Посмотреть сообщение
Постановка задачи:
Есть некий относительно объёмный кусок кода, который многократно повторяется и который в силу некоторых причин нельзя вынести в отдельную функцию...
А я знаю как лучше назвать топик - "Помогите соскочить с Це++"

К сожалению, из всего сишного наследия в Nav реализовано только X+=1;
Думаю, что именно из-за этого этот язык вместо Ultra\Goofy\Pascal носит гордое название C\AL

Я тоже временами страдаю от невозможности #define или отсутствия макросов.
Но! Вот чтобы ТАКАЯ проблема - это впервые. Даже любопытно, что же это такое может быть и где применяется?

Предлагаю:
Раз этот некий "объёмный кусок кода" УЖЕ ЕСТЬ и кем-то написан, то не проще ли выложить его в форум для оптимизации?
(ну, и вкратце обрисуй задачу. уж больно она, как сказать... нетривиальная, вот
И пусть каждый, кому интересно и кто умеет, этот кусок "оближет" по своему.

А мы потом все вместе посмотрим, что у кого получилось. Идёт?

Опять же, всем обоюдная выгода:
Ты доложишь своему руководству о "беспрецедентной оптимизации".
А интересующиеся люди попрактикуются в рекурсии. (лично мне это интересно)

ЗЫ: А если это твоё чудо можно потом ещё будет прикрутить и использовать как ноу-хау в стандартном функционале, то, думаю, и от Маззи "приз в студию" будет!
 


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 20:03.