Что делают Option Strict и Option Explicit? - PullRequest
44 голосов
/ 16 марта 2010

Я видел этот пост:

Опечатки ... Просто используйте опцию строго и явно, пожалуйста ... во время одного проекта по разработке программного обеспечения, в котором я работал консультантом, они везде получали смехотворное количество ошибок ... оказалось, что разработчик не мог писать и объявлял переменные неправильное написание ... ничего страшного, пока вы не используете правильное написание при назначении ему значения ... и у вас не было явной опции off. Ой им ... "

Что такое Option Strict и Option Explicit? Я погуглил это, но не могу понять (потому что в основном это Visual Basic, я делаю PHP).

Ответы [ 3 ]

61 голосов
/ 16 марта 2010

Option Explicit означает, что все переменные должны быть объявлены.Смотрите здесь .Без этого вы можете случайно объявить новую переменную, просто неправильно написав имя другой переменной.Это одна из тех вещей, которая вызывает много горя, когда вы пытаетесь отлаживать программы VB и выяснять, почему ваша программа не работает должным образом.На мой взгляд, это даже не должно быть вариантом - оно всегда должно быть включено.

Option Strict «ограничивает неявные преобразования типов данных только расширяющимися преобразованиями».Смотрите здесь .Если эта опция включена, вы не можете случайно преобразовать один тип данных в другой, который менее точен (например, из Integer в Byte).Опять же, опция, которая должна быть включена по умолчанию.

27 голосов
/ 01 мая 2015

TL; DR

Option Strict и Option Explicit помогут вам поймать потенциальных и фактических ошибок при времени разработки , а не при компиляции и сбое кода на выполнения . Вы должны переключить оба On

Option Strict и Option Explicit по умолчанию отключены. Чтобы включить их:

Вариант Строгий Tools -> Options -> Projects and Solutions -> VB defaults -> Option Strict. Установите On.

Параметр Явный Tools -> Options -> Editor -> Require Variable Declaration. отметьте это.

Параметр Явный

При Option Explicit Off вам не нужно объявлять (Dim) переменную перед ее использованием:

a = 123 'a is automatically declared as an Integer

Это становится опасным, когда вы объявляете переменную в одном месте и думаете, что используете ее позже, но неправильно вводите ее:

Dim counter As Integer = 0
'some lines later...
countr = 55 'This creates a new variable called countr 

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

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

Вариант строгий

При Option Strict Off вы можете неявно преобразовывать тип данных в тип сужения без ошибок

Dim d As Double = 999.99
Dim s As Single = d 'No error with Option Strict Off

В этих случаях Option Strict предупреждает разработчика о том, что значение double никогда не должно превышать Single.MaxValue

Вы также можете присвоить Enum неправильное значение без ошибок. Ниже приведен реальный пример этого:

enter image description here

Переменная должна была быть установлена ​​на EOpticalCalStates.FAILED (24), фактически она устанавливает для State значение 4, которое эквивалентно EOpticalCalStates.ALI_HOR

Что-то подобное не так легко определить.

Поэтому по умолчанию вы всегда должны иметь Option Strict. Этот параметр должен быть установлен по умолчанию, но Microsoft решила оставить его выключенным, чтобы увеличить обратную совместимость (что задним числом было ошибкой IMO)

6 голосов
/ 16 марта 2010

Подробности здесь: http://support.microsoft.com/kb/311329

Оператор Option Explicit

По по умолчанию Visual Basic .NET или Компилятор Visual Basic обеспечивает явное объявление переменной, которая требует, чтобы вы объявили каждый переменная, прежде чем использовать его. Изменить это поведение по умолчанию, см. Изменение раздел «Значения проекта по умолчанию».

Оператор Option Strict

К по умолчанию Visual Basic .NET или Компилятор Visual Basic не обеспечивает строгая типизация данных. Чтобы изменить это поведение по умолчанию, см. Изменение Раздел «Значения проекта по умолчанию».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...