Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Это плохо или нормуль ?
|
|||
|---|---|---|---|
|
#18+
Как-то раз у меня была нужда написать командный интерпретатор. При том, что я совершенно не представлял себе как это делать. Почесал репу и придумал такой вариант: Пишется класс с кучей методов на все нужные команды. Далее интерпретатор берет строку и пробует найти нужный метод с соотв. параметрами. В строке сначала команда - имя метода, далее параметры через пробел. Если валидация прошла, вызываем метод через рефлексию. Вышло с одной стороны просто и быстро, с другой стороны сомнительно. Как думаете, так норм или стоило поискать других вариантов ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 12:27 |
|
||
|
Это плохо или нормуль ?
|
|||
|---|---|---|---|
|
#18+
Я-бы сделал чуть иначе. Один объект класса 1, который представляет собой командную строку и её разбор (разделение на команду и параметры). Плюс поиск обработчика. В нем регистрируются объекты потомки абстрактного класса 2 - команды. В них есть идентификаторы команд и метод обработки параметров с возвращаемым результатом. Когда будет нужна новая команда, то создается потомок класса 2 и регистрируется в объекте класса 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 12:45 |
|
||
|
Это плохо или нормуль ?
|
|||
|---|---|---|---|
|
#18+
А я бы не парился и задействовал Bison. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 13:38 |
|
||
|
Это плохо или нормуль ?
|
|||
|---|---|---|---|
|
#18+
Dimitry SibiryakovА я бы не парился и задействовал Bison. сначала flex ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2017, 20:14 |
|
||
|
Это плохо или нормуль ?
|
|||
|---|---|---|---|
|
#18+
- читаем входную строку - разбиваем её на две (по первому пробелу): команда и аргументы - команду ищем в ассоциативном массиве (мапе) cmdName -> Command, где Command - интерфейс с одним методом Result run(String arguments) - вызываем реализацию нужной команды, реализация сама парсит свои аргументы, делает полезную работу и возвращает результат для вывода на экран. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2017, 09:09 |
|
||
|
Это плохо или нормуль ?
|
|||
|---|---|---|---|
|
#18+
grok Вышло с одной стороны просто и быстро, с другой стороны сомнительно. Как думаете, так норм или стоило поискать других вариантов ? так смотря сколько команд, насколько сложных и вариативных, будет ли это все развиваться и разрастаться со временем, на каком языке, нет ли на нем уже готовых решений? Я думаю что ==поиск вариантов== - не самоцель. кусок проги может быть не идеален, но если у него вполне понятный интерфейс, такой что его можно выдернуть и заменить - это нормально. По моему. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2017, 10:05 |
|
||
|
Это плохо или нормуль ?
|
|||
|---|---|---|---|
|
#18+
Сделал бы почти как wadman. Парсер командной строки, в котором регистрируются доступные команды по имени (для простого и быстрого поиска в какой-нить хэш массив загнал бы) Сами команды представляют из себя тоже объекты с методами parse (предопределённый, но каждая команда может его переписать под свои нужды и разбирать собственные параметры как ей вздумается) и run (а этот абстрактный, разумеется, что бы каждая команда его определила под себя). Тогда основной парсер читает только название команды и передаёт управление непосредственно нужному объекту, а тот устанавливает свои атрибуты самостоятельно и запускает run. Ещё в объект команды можно было бы запихнуть разные методы help и другую вспомогательную мелочь для удобства ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 02:52 |
|
||
|
Это плохо или нормуль ?
|
|||
|---|---|---|---|
|
#18+
scfреализация сама парсит свои аргументы мне казалось, реализации вообще лучше не знать что оно в каком-то интерпретаторе используется. single responsibility принцип. разве только сделать трехслойную схему. PS: а всякие лексические/синтаксические анализаторы, это имхо "микроскопом гвозди забивать" для задач такого уровня. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 10:14 |
|
||
|
Это плохо или нормуль ?
|
|||
|---|---|---|---|
|
#18+
grokscfреализация сама парсит свои аргументы мне казалось, реализации вообще лучше не знать что оно в каком-то интерпретаторе используется. single responsibility принцип. разве только сделать трехслойную схему. PS: а всякие лексические/синтаксические анализаторы, это имхо "микроскопом гвозди забивать" для задач такого уровня. А при таком подходе она и не знает. Тут следует уточнить, что команда по сути принимает 1 строковый параметр, но как его интерпретировать решает самостоятельно. Тут было бы менее правильно возлагать такую работу на глобальный объект, который понятия не имеет для чего будет использоваться та или иная команда и что ей может для работы понадобиться. Если возлагать эту работу на основной интерпретатор, то команды придётся заганять в узкие рамки протокола получения аргументов, а это минус к гибкости. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.09.2017, 14:04 |
|
||
|
Это плохо или нормуль ?
|
|||
|---|---|---|---|
|
#18+
grokКак-то раз у меня была нужда написать командный интерпретатор. При том, что я совершенно не представлял себе как это делать. Почесал репу и придумал такой вариант: Пишется класс с кучей методов на все нужные команды. Далее интерпретатор берет строку и пробует найти нужный метод с соотв. параметрами. В строке сначала команда - имя метода, далее параметры через пробел. Если валидация прошла, вызываем метод через рефлексию. Вышло с одной стороны просто и быстро, с другой стороны сомнительно. Как думаете, так норм или стоило поискать других вариантов ? Всё запихнуть в один класс - классический антипаттерн. В общем случае это очень распространенная задачка программирования. Любая серверная часть двухзвенки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.09.2017, 11:42 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=18&tid=1340280]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
58ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
53ms |
get tp. blocked users: |
2ms |
| others: | 286ms |
| total: | 443ms |

| 0 / 0 |
