Работа со строго ограниченным переводом
Я пишу на встроенном языке под названием JS.
Я хочу иметь возможность вызывать три функции в любом порядке. (ABC, ACB, BAC, BCA, CBA, CAB.)
Трюк? Язык не имеет пользовательских функций.
У него есть условная и циклическая конструкция.
Я думаю, у меня есть три варианта.
- Дублируйте целую кучу кода.
- Напишите препроцессор (который создаст весь дублированный код).
- Выполните цикл с тремя итерациями, используя массив для управления тем, какая функциональность вызывается на каждом проходе цикла.
Я ненавижу №1. Дублированный код неприятен. Как мне что-то изменить, не облажавшись?
Я думаю, что №2 в порядке. По крайней мере, у меня нет дублированного кода в исходном коде. Но мой выходной код - это то, что я буду отлаживать, и мне интересно, хочу ли я от него отклониться. С другой стороны, я мог бы добавить сахар к языку.
Я думаю, что моя лучшая ставка - #3.
Есть другие идеи? Там нет goto. Нет функций. Нет существующего препроцессора.
Забавная вещь о # 3 состоит в том, что это по сути печально известный кошмар для / переключения.
3 ответа
Возможно, какой-то конечный автомат-мутант, а именно:
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 кажется несколько неизбежным.
Вы могли бы использовать препроцессор Си вместо того, чтобы писать свой собственный. Это, по крайней мере, позволит вам попробовать, чтобы увидеть, является ли это работоспособным решением.
Технически лучшим решением (при условии, что у вас есть доступ к коду или разработчикам) является изменение языка JS, чтобы он делал то, что вам действительно нужно.
В противном случае лучшее решение зависит от аспектов проблемы, которые вы не объяснили:
- рекурсивны ли функции?
- есть параметры функции?
- нужны ли вам (вероятно, понадобятся) другие структуры управления, не предусмотренные в JS?
- зависит порядок вызовов функций от параметров времени выполнения?
- Вы достаточно опытны и уверены в том, что сможете разработать и внедрить язык препроцессора, соответствующий вашим текущим и прогнозируемым требованиям?
- Внедряет ли препроцессор время для экономии времени ваших коллег?
Если ответы на 5. и достаточно других ответов "да", то ваш вариант № 2 - правильный ответ. В противном случае... такое уродливое решение, как ваш #1 или #3, может оказаться лучшей идеей.
РЕДАКТИРОВАТЬ: Если у вас нет доступа к исходному коду и команда разработчиков не реагирует на ваши потребности, подумайте о поиске альтернативы с открытым исходным кодом.