Я так в свою программу PositionMeter встроил редактор формул, основанный на интерпритации JavaScript Isstrebitel, я собирался написать статью по созданию дерева выражений и вычислением его. Но могу вот что сказать:
Сперва надо распарсить на токены твое выражение (Константы, Идентификаторы, Управляющие символы, Операторы)
Дальше надо построить дерево выражения
Оптимизировать дерево выражений, вынести общие части в один узел (не обязательно)
И потом просто рекурсивно его посчитать
И в шарпах есть возможность рантайм компиляции инлайн кода, можешь погуглить этот вариант тоже
Отлично, мне так больше нравится)
Идея про появляющиеся при наведении стрелочки, тоже очень хорошая, потому что не грузит глаз, как это сделано с комментами у нас на сайте
koloff, чтобы цветопередача не страдала, поставь на модельке в свойствах материала "Неосвещаемый" или "Незатемняемый" точно не помню как называется) А так, между прочим во всех играх и рендерят UI :D Ну и я так делал в своем проекте)
На самом деле и вправу грамодко выходит. Оставь обраление в блоки, но добавь скобки, иначе реально не очевидно, что там должны быть скобки и размер шрифта для операторов тоже покрупнее чутка
Mihahail, в случае говнокода да :D Суть в том, что когда работает много людей в проекте, все должно работать с примерно одинаковой логикой, как я и описал выше. Конечно но же можно и засунуть туда кейс, что при null возвращает все сообщения, но это весьма не очевидно. Почему именно те два кейса такие, ну например мы юзаем там SqlDataProvider и некороший программист написал его так:
IList<MessageEntity> GetMessages(int[] messageIds) {
var collection = new EntityCollection<MessageEntity>();
using(var cmd = new MySqlCommand()) {
cmd.CommandText = string.Format(@"
SELECT *
FROM messages
WHERE MessageId IN ({0})
", messageIds.Join(","));
FillEntityCollection(cmd, collection);
}
return collection;
}
Если у нас параметр null -> NullPointerException словим
Ecли у нас пустой массив -> MySqlException из-за того, что будет выражение вида
WHERE MessageId IN ()
Уже не однократно матерился на работе из-за того, что другие не обрабатывают эти 2 кейса и программа сваливается при проверке. Хотя все ждут что метод вернет пустое множество.
Mihahail, обычно прописывают лишь пограничный значения для параметров. Например, метод
GetMessages(int[] messageIds)
Тут 2 пограничных значения:
1 - messageIds = null -> тут должен быть NullArgumentException
2 - messageIds = new int[] {} -> тут должен вернуть пустой список
Это и описывается в тест кейсах
Mihahail, суть юнит тестов, чтобы описать правильное поведение объекта для большинства случаев (пограничных значений). Если поведение меняется, то юнит тест падает. Хорошим тоном считается писать юнит тесты для класса еще до имплементации самих методов.
Ещё я плохо знаком с шаблонами, как по этой конструкции определить, где возникло исключение? А то протолкнем налл на самый верх, а где он появился?
Кст на счет этого, тут неожиданно вспомнил, чтобы не было нежданчиков, можно использовать юнит тесты и все будет ОК. Ну это если юнит тесты написаны хорошо конечно же
Может расскажешь конечную цель? И тогда я смогу помочь. Вообще обычно атрибуты достаются непосредственно у известного типа, а не проходятся по всей сборке
и главного героя, который постепенно учится видеть цвета, верней, предметы, которые имеют этот цвет, поэтому невидимы для остальных обитателей черно-белого цвета.
» Программирование / Считывание выражения
Isstrebitel, я собирался написать статью по созданию дерева выражений и вычислением его. Но могу вот что сказать:
» Программирование / Монада MayBe
» Unity - Triggers Editor / Новости с моего фронта
Идея про появляющиеся при наведении стрелочки, тоже очень хорошая, потому что не грузит глаз, как это сделано с комментами у нас на сайте
» Страж / Первая серия сериала "Страж"
» Unity - Triggers Editor / Новости с моего фронта
» WarCraft 3 / Редактор jass на ios ?
» Страж / Первая серия сериала "Страж"
» Программирование / Монада MayBe
Ecли у нас пустой массив -> MySqlException из-за того, что будет выражение вида
» WarCraft 3 / Редактор jass на ios ?
» Программирование / Монада MayBe
1 - messageIds = null -> тут должен быть NullArgumentException
2 - messageIds = new int[] {} -> тут должен вернуть пустой список
Это и описывается в тест кейсах
» Программирование / Монада MayBe
» Программирование / Монада MayBe
» Игровые обзоры / [Видео] Геймплей Assassin's Creed Unity
» Страж / Первая серия сериала "Страж"
» XGM Конкурсы / Акция "YouTube/VK-репостер"
» Программирование / [C#] Обращение к аттрибутам
» Программирование / [C#] Обращение к аттрибутам
» На дне с Ктулху / Размышления и Эксперимент
» Fa_losophy / Генератор
» Блог H / xgm-update
H, указывать надо в пунктах.
» Fa_losophy / Construct 2: Лекция первая
» Fa_losophy / Construct 2: Лекция первая
» Fa_losophy / Construct 2: Лекция первая
В целом круто-та)
» Fa_losophy / Construct 2: Лекция первая
» Блог H / xgm-update