Работа с сильно ограниченным переводом - PullRequest
2 голосов
/ 19 июля 2009

Я пишу на встроенном языке JS.

Я хочу иметь возможность вызывать три функции в любом порядке. (ABC, ACB, BAC, BCA, CBA, CAB.)

Хитрость? Язык не имеет пользовательских функций.

У него есть условная и циклическая конструкция.

Я думаю, у меня есть три варианта.

  1. Дублируйте целую связку кода.
  2. Напишите препроцессор (который будет создавать весь дублированный код).
  3. Выполните цикл с тремя итерациями, используя массив для управления тем, какая функциональность вызывается при каждом проходе цикла.

Я ненавижу №1. Дублированный код неприятен. Как мне что-то изменить, не облажавшись?

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

Я думаю, что моя лучшая ставка - # 3.

Есть еще идеи? Там нет goto. Нет функций. Нет существующего препроцессора.

Забавная вещь о # 3 в том, что это по сути печально известный кошмар для / switch.

Ответы [ 3 ]

3 голосов
/ 19 июля 2009

Вы можете использовать препроцессор C вместо того, чтобы писать свой собственный. Это, по крайней мере, позволит вам попробовать, чтобы убедиться, что это работоспособное решение.

3 голосов
/ 19 июля 2009

Возможно, это какой-то конечный автомат-мутант:

int CODEWORD=0x123;

while (CODEWORD)
{
    switch(CODEWORD&15)
    {
    case 1:
       /// case 1
       break;
    case 2:
       /// case 2
       break;
    case 3:
       //// case 3
       break;
    }
    CODEWORD=CODEWORD>>4;
}

СУХОЙ, без препроцессора, без массива. for / switch кажется несколько неизбежным.

1 голос
/ 19 июля 2009

Технически лучшим решением (при условии, что у вас есть доступ к коду или разработчикам) является изменение языка JS, чтобы он делал то, что вам действительно нужно.

В противном случае лучшее решение зависит от аспектов проблемы, которые вы не объяснили:

  1. рекурсивны ли функции?
  2. есть ли параметры функции?
  3. нужны ли вам (вероятно, понадобятся) другие структуры управления, не предусмотренные в JS?
  4. зависит ли порядок вызова функции от параметров времени выполнения?
  5. Вы достаточно опытны и уверены в том, что можете разрабатывать и внедрять язык препроцессора, соответствующий вашим текущим и прогнозируемым требованиям?
  6. реализует ли препроцессор, чтобы сэкономить время вам / коллегам в долгосрочной перспективе?

Если ответы на 5. и достаточно для остальных - «да», то ваш вариант № 2 - правильный ответ. В противном случае ... уродливое решение, такое как ваш # 1 или # 3, может быть лучшей идеей.

РЕДАКТИРОВАТЬ: Если у вас нет доступа к исходному коду и команда разработчиков не реагирует на ваши потребности, подумайте о поиске альтернативы с открытым исходным кодом.

...