NSString к уравнению

У меня никогда нет успешно TDDed код UI. Самое близкое мы приехали, должно было действительно разделить код UI как можно больше от прикладной логики. Это - одна причина, почему шаблон образцового контроллера представления полезен - модель и контроллер могут быть TDDed без большой проблемы и без того, чтобы быть слишком сложным.

, По моему опыту, представление всегда оставлялось для наших тестов приемлемости для пользователя (мы записали веб-приложения, и наш UATs использовал HttpUnit Java). Однако на этом уровне это - действительно интеграционный тест без свойства теста в изоляции, которого мы требуем с TDD. Из-за этой установки, мы должны были записать, что наш контроллер/модель тестирует/кодирует сначала, тогда UI и соответствующий UAT. Однако в коде GUI Swing я писал в последнее время, я писал, что GUI кодирует сначала с тупиками, чтобы исследовать мой дизайн фронтэнда, прежде, чем добавить к контроллеру/модели/API. YMMV здесь все же.

Так для повторения единственный совет, который я могу дать, - то, что Вы уже, кажется, подозреваете - разделяют Ваш код UI от Вашей логики как можно больше и TDD их.

8
задан Alex Rozanski 1 October 2009 в 05:30
поделиться

2 ответа

Вам нужен замечательный, удивительный и невероятный GCMathParser, доступный (БЕСПЛАТНО!) На apptree.net: http://apptree.net/parser.htm It делает именно то, что вы просите, и даже позволяет выполнять замену переменных (3x + 42, оценка с x = 7). Он даже поддерживает математические функции, такие как sin (), cos (), tan (), их обратные, dtor (), log (), ....

редактировать долгое время спустя ...

Хотя GCMathParser довольно хорош, у него есть недостаток, заключающийся в том, что он не расширяемый. Так что, если вам нужна функция, которую она изначально не поддерживает, тогда очень плохо. Поэтому я решил что-то с этим сделать и придумал полностью собственный математический анализатор и вычислитель: http://github.com/davedelong/DDMathParser

22
ответ дан 5 December 2019 в 04:36
поделиться

Вы можете использовать систему предикатов:

NSString *equation = @"1+5*6";

// dummy predicate that contains our expression
NSPredicate *pred = [NSPredicate predicateWithFormat:
                      [equation stringByAppendingString:@" == 42"]];
NSExpression *exp = [pred leftExpression];
NSNumber *result = [exp expressionValueWithObject:nil context:nil];
NSLog(@"%@", result); // logs "31"
19
ответ дан 5 December 2019 в 04:36
поделиться