Когда использовать assert в клиентском и общем коде GWT - PullRequest
8 голосов
/ 17 мая 2011

В StackOverflow есть несколько вопросов, в которых обсуждается вопрос о том, когда следует использовать утверждение assert, а не выбрасывать какое-то исключение. (Примеры здесь , здесь , здесь , здесь и здесь .

Однако я подозреваю, что общепринятая мудрость утверждения против броска основана на предположении, что вы работаете в JVM. Во вселенной GWT, где ваша Java транслитерируется в JavaScript и выполняется в контексте браузера, набор компромиссов кажется другим: утверждения всегда компилируются при запуске в браузере, и все, что уменьшает размер вашего JavaScript это выигрыш, особенно если ваше веб-приложение должно работать на мобильном телефоне. Однако утверждения запускаются в DevMode, поэтому они имеют полезность во время разработки.

Итак, мои вопросы: кто-нибудь задумывался над набором передовых правил, определяющих, как использовать утверждение assert в GWT? У меня были члены моей команды, которые спрашивали меня «с тех пор, как утверждение составлено, имеет ли смысл их иметь?», И я хотел бы получить для них хороший ответ.

Кроме того, кто-нибудь имеет представление о философии, которую разработчики GWT в Google имеют по этому вопросу? Глядя на исходный код GWT, они, кажется, часто используют его.

Ответы [ 2 ]

14 голосов
/ 17 мая 2011

Google FAQ говорит

Использовать только утверждения для целей отладки, а не производственную логику, потому что утверждения будут работать только в режиме разработки GWT.По умолчанию они компилируются компилятором GWT, поэтому они не оказывают никакого влияния в производственном режиме, если вы не включите их явно.

Это ничем не отличается от ответов на вопросы, которые вы связалик.Независимо от того, компилируется ли Java-код обычным способом с помощью javac или компилируется в JavaScript с помощью GWT, «assert» означает «если это не так, у меня ошибка».Напротив, код вида

if (condition) throw new Exception(msg);

означает «если это правда, то у нас есть непредвиденная ситуация, с которой программе придется справиться».

Что касается членов командыкоторые не видят смысла утверждать, объясните, что они должны иметь кучу модульных тестов, которые выполняются с включенными утверждениями.Если тесты имеют хорошее покрытие кода и ни одно из них не приводит к сбою утверждения, то предполагается, что предположение, указанное в утверждении assert, выполняется.

4 голосов
/ 22 мая 2011

Компилятор GWT удаляет их по умолчанию, но вы можете оставить их, если хотите.Если вы считаете, что утверждения полезны в скомпилированном коде, добавьте аргумент командной строки -ea при вызове com.google.gwt.dev.Compiler.Затем компилятор превратит утверждения Java в JavaScript.

Google Web Toolkit 2.3.0
    Compiler [-logLevel level] [-workDir dir] [-gen dir] [-style style] [-ea] [-XdisableClassMetadata] [-XdisableCastChecking] [-validateOnly] [-draftCompile] [-optimize level] [-compileReport] [-strict] [-localWorkers count] [-war dir] [-deploy dir] [-extra dir] module[s] 

     ...
      -ea Debugging: causes the compiled output to check assert statements
...