Какие утверждения вы не пишете в vb.net, потому что их сложно отсканировать по смыслу?А что ты пишешь вместо этого? - PullRequest
2 голосов
/ 31 марта 2011

Это должен быть вопрос вики сообщества.

В последнее время мне приходилось много работать с vb.net, и недавно я создал следующее выражение.

If If(report.IsPublicReport, False) Then Return True

Теперь, это простое объединение внутри оператора if, нечего бояться. Однако, когда я сканировал метод в поисках ошибки, которую я сделал, эта строка постоянно останавливала меня в моих следах. Я просто не мог отсканировать это. Каждый раз мне приходилось останавливаться и разбивать его вручную в голове. Во многом потому, что мне пришлось остановиться и выяснить, что на самом деле делал каждый If в выражении.

С тех пор я переписал строку как

If report.IsPublicReport.GetValueOrDefault() Then Return True

Будучи более многословным, я обнаружил, что это меньше нарушает мой ход мыслей, когда я сканирую код.

Это заставило меня задуматься,

  1. Это что-то более опытное VB.net разработчики сталкиваются?
  2. Существуют ли другие типы выражения, которые в значительной степени избегать или, по крайней мере, не одобрять?
  3. Я просто ною ни о чем?

Ответы [ 4 ]

2 голосов
/ 31 марта 2011

То, что вы описываете, - это то, что Скотт Хансельман (и, возможно, другие) называет «Запах кода».

Это в основном идея, что когда вы смотрите на кусок кода и что-то не кажется «правильным» в этом. Это не та возможность, которую разработчики просто «имеют». Это то, что вы разрабатываете со временем, когда читаете и пишете все больше и больше кода.

Это не только VB, вы увидите множество идиоматических конструкций на каждом языке, которые заставят (или должны) сделать паузу и задать вопрос, на что вы смотрите.

Тот Двойной ЕСЛИ определенно сделает это для меня

2 голосов
/ 31 марта 2011

До тех пор, пока вам не нравится синтаксис VB.NET, я настоятельно рекомендую вам использовать Option Strict On, чтобы вы быстрее ловили подобные ошибки.Лучший способ - изменить его глобально, чтобы он всегда был включен по умолчанию.Сервис + Опции, Проекты и решения, VB по умолчанию, измените Option Strict на «On».

1 голос
/ 31 марта 2011

Вы можете написать

Private Sub Form1_Load() Handles MyBase.Load
End Sub

вместо

Private Sub Form1_Load(ByVal sender As System.Object, _
                       ByVal e As System.EventArgs) Handles MyBase.Load
End Sub

, что хорошо, если вам не нужен отправитель или e (я полагаю, это просто какая-то магия компилятора, которая добавляетсаму подпись), но я отказываюсь использовать более короткий путь, потому что вы не узнаете его как обработчик событий с первого взгляда.

1 голос
/ 31 марта 2011

В Vb.NET вы можете написать:

row!FirstName = "Test"

вместо

row("FirstName") = "Test"

Некоторое время назад я писал row!FirstName (вы можете сделать это с каждым элементом в коллекции, к которому можно получить доступ через строковый параметр), потому что я подумал, что это хорошая идея, потому что он выглядит более статически типизированным (как person.FirstName как собственность) и короче.

Однако я понял, что это не очень хорошая идея, потому что после изменения «FirstName» на «Name» я часто искал строку в текущем файле, которая подсвечивается в Visual Studio (синтаксис объекта! Param отсутствует). Что делает их труднее найти.

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