Исходники.Ру - Программирование
Исходники
Статьи
Книги и учебники
Скрипты
Новости RSS
Магазин программиста

Главная » Статьи по программированию » .NET - Visual Basic.NET »

Обсудить на форуме Обсудить на форуме

А ты готов к Visual Basic.NET? - III

 
Мы завершаем обсуждение темы: что нужно иметь в виду при переносе программ, написанных на Visual Basic 6.0, в среду Visual Basic.NET. Напомним, этот переход будет непростым: так, многие конструкции Visual Basic 6.0 не будут работать в новой версии системы. Более того, некоторые из них будут выполняться, но иначе, чем в текущей версии.

Дискуссия на эту тему завершается по той простой причине, что время споров истекло - финальная версия Visual Basic.NET появится до конца года, и если вы решили работать с ней (а куда деваться?), то нужно уже сейчас начинать писать приложения в этой среде. Кроме того, в июне вышла версия Visual Studio.NET Beta 2 (см. врезку "Что нового в Visual Studio.NET Beta 2"), и стало понятно, что ждать от Microsoft радикальных уступок в ответ на критику по поводу несовместимости Visual Basic 6.0 и Visual Basic.NET и проблем с переносом приложений не приходится.

Так или иначе, но в западной прессе дискуссионные публикации по поводу Visual Basic.NET сменились статьями на традиционную тему: как работать с новой версией системы (что и мы собираемся сделать в последующих номерах "BYTE/Россия").

Вместе с тем хотелось бы обратить внимание на статью Рассела Джонса "VB.NET против классического VB" (VB.NET Faces Off Against Classic VB, http://www.vb-zone.com/free/articles/), в которой он приводит 10 примеров, демонстрирующих преимущества новой версии. Хотел бы высказать свое несогласие с пафосом этой статьи - представляется совершенно очевидным, что каждая новая версия инструмента должна быть лучше предыдущей. Безусловно, в Visual Basic.NET реализованы многие очень интересные и полезные функции. Но суть-то проблемы заключается в том, что большинство новшеств можно было реализовать, обеспечивая совместимость версий. И примеры, приводимые американским автором, на самом деле как раз это демонстрируют.

В частности, одним из достоинств Visual Basic.NET Рассел Джонс называет то, что теперь порядок обхода элементов управления на форме (он задается свойством TabIndex) можно будет задавать с помощью встроенной команды Tab Order. Но ведь такая команда появилась уже давно - еще в составе Office 97/Visual Basic for Applications. Что мешало включить ее и в Visual Basic?

Конечно, очень здорово, что наконец-то будет реализована возможность динамического подключения элементов управления к форме в процессе выполнения приложения. Но ведь и в момент создания Visual Basic 1.0 в среде Windows 3.0 не было никаких технических проблем, которые могли бы помешать реализовать такую полезную функцию.

Безусловно, появление Visual Basic.NET - очень важный момент в истории этого популярного средства программирования. (Более того, весь пакет Visual Studio.NET знаменует собой качественно новый этап развития средств разработки на более высоком уровне интеграции.) В этой связи полезно напомнить, что в мае нынешнего года Visual Basic отметил десятилетний юбилей - его первая версия появилась в 1991 г. и впервые была продемонстрирована в СССР на выставке Softool'91 (см. в этом номере статью "Basic - этапы большого пути").

Изменения синтаксиса в Visual Basic.NET Beta 2

Прежде чем предложить читателю завершающую часть "Советов", нужно рассказать о некоторых изменениях синтаксиса Visual Basic.NET по сравнению с первой бета-версией.

Отметим, что с самого начала дискуссий о Visual Basic.NET никто не отрицал вероятность того, что Microsoft может пойти на некоторые уступки критикам. Однако, зная стиль работы корпорации, можно было уверенно утверждать, что уступки будут минимальными и, возможно, временными. По крайней мере, вся десятилетняя история Visual Basic наглядно демонстрирует, что за внешней внимательностью к запросам разработчиков скрывается довольно жесткая стратегическая линия Microsoft, которая ведет сообщество программистов в нужном корпорации направлении.

Выход бета-версии 2 показывает, что сколько-нибудь значительного числа "откатов" со стороны Microsoft ждать не приходится. Вот список некоторых новшеств (часть из них нужно учесть при изучении ранее опубликованных нами "Советов").

1. Описание массивов, например Dim a(10), будет работать так же, как и предыдущие 40 лет существования языка Basic. Иными словами, в данном примере 10 - это верхняя граница индекса массива, а не число его элементов, как это грозились сделать в Visual Basic.NET (об этом говорилось в совете 18-м).

2. Операции And, Or, Not и XOR, как и ранее, будут использоваться и для логических, и для поразрядных операций. В первой бета-версии Visual Basic.NET эти операции выполнялись только с логическими переменными, а для целочисленных вводились дополнительные функции вида BitXXX (BitAnd и т.д.), которые теперь исключены (см. совет 21-й).

3. В совете 22-м мы говорили о повышении "интеллектуальности" логических операций. В частности, в выражении

a = A1 And A2

операнд A2 не будет анализироваться, если A1 = False. (Операнд A2 может представлять собой функцию, которую в любом случае желательно вычислить.) Теперь же подобный режим оптимизации нужно задавать в явном виде, используя специальные операторы AndAlso и OrElse, например так:

 

If x > 0 AndAlso x < 10 Then ...
(второе условие не будет проверяться, если x <= 0)
If x > 0 OrElse x <-10 Then
(второе условие не будет проверяться, если x > 0)

 

Мне кажется, что такое разделение логических функций искусственно и не так уж и нужно, поскольку коллизия с выражениями легко разрешается последовательным их вычислением:

A1 = Function1() A2 = Function2() a = A1 And A2

4. Значение логической переменной True по-прежнему будет иметь целочисленное значение -1, а не 1, как планировалось (совет 20-й). Мне кажется, это не очень принципиально, поскольку общая рекомендация состоит в том, чтобы вообще не использовать неявное преобразование типов данных (в данном случае целочисленных и булевых). В этой связи отметим, что все же было бы полезно разделить логические операции с булевыми и беззнаковыми целыми числами.

5. Для сравнения двух объектных переменных (при проверке ссылок на один и тот же объект) по-прежнему будет использоваться ключевое слово Is (Visual Basic 6), а не простой знак равенства = (Visual Basic.NET Beta 1).

6. Теперь все классы наследуют метод ToString объекта System (родитель всех объектов в .NET), который преобразует числовое значение в текстовый вид. Однако тут следует иметь в виду, что разделитель целой и дробной части числа (точка или запятая) будет зависеть от национальных установок Windows.

Такой метод позволит порой существенно упростить код программы. Например, вот как выглядит функция получения уникального глобального кода в Visual Basic 6:

 

Private Declare Function CoCreateGuid Lib _
  "ole32.dll" (buffer As Byte) As Long
Private Declare Function StringFromGUID2 Lib _
  "ole32.dll" (buffer As Byte, ByVal lpsz As Long, _
   ByVal cbMax As Long) As Long

Private Function getGUID () As String
  Dim buffer(0 To 15) As Byte
  Dim s As String
  Dim ret As Long
  s = String$(128, 0)
  ' получает численный код
  ret = CoCreateGuid (buffer(0))
  ' преобразуем его в текст,
  ' используя недокументированную функцию StrPtr
  ret = StringFromGUID2 (buffer(0), StrPtr(s), 128)
  getGUID = Left$(s, ret - 1) ' отсекаем "хвост"
End Function

 

В Visual Basic.NET все это будет выглядеть гораздо компактнее:

 

Private Function getGUID () As String
  getGUID = "{" & System.Guid.NewGUID.ToString & "}"
End Function

 

7. Для совместимости с функциями Visual Basic 6.0 используется пространство имен Microsoft.VisualBasic.Compatibility.VB6. Чтобы не приходилось писать такие длинные названия, при работе со старыми функциями теперь можно применять специальный оператор Import.

8. Ранее для обозначения коллекций объектов Visual Basic использовалось множественное число имени объекта (Parameters, Properties и т.д.) Теперь коллекции будут называться длиннее, но более понятно: ParameterCollection, PropertyCollertion.

9. В бета-версии 1 библиотека ADO.NET имела два важных пространства имен: System.Data.ADO для общих провайдеров данных и System.Data.Sql для провайдера SQL Server. Теперь эти имена заменены соответственно на System.Data.OleDb и System.Data.SqlClient.

Это далеко не полный перечень всех изменений в синтаксисе Visual Basic.NET. И можно предположить, что он не окончательный - в финальной версии нас могут ждать новые сюрпризы.

Еще несколько советов по переходу в Visual Basic.NET

Совет 31. Внимание при объявлении переменных. Visual Basic 6 поддерживает такую забавную конструкцию с объявлением переменной внутри исполняемого кода:

 

Do
  Dim nTotal As Long
  nTotal = nTotal + 1
Loop Until nTotal > 100 MsgBox "Результат = " & nTotal

 

В результате его выполнения выдается сообщение "Результат = 101". А в Visual Basic.NET вы получите системное сообщение об ошибке - "переменная nTotal не объявлена". Причина этого в том, что в Visual Basic.NET подобная переменная работает только внутри операторных скобок, в которых она определена (в данном случае Do Loop). Так что конструкция, выглядевшая в Visual Basic 6 довольно несуразной, получает весьма четкую смысловую окраску.

Кстати, для увеличения переменной на некий шаг теперь можно применять такой синтаксис:

nTotal += 1

Совет 32. Откажитесь от использования Null. Честно говоря, я никогда не понимал глубокого смысла парадигмы Null, которая использовалась для обозначения особого, "нулевого" значения переменной типа Variant. Вполне естественно, что с исчезновением Variant из Visual Basic.NET удален и Null.

Совет 33. Готовьтесь к однозначности строковых функций. Как известно, в Visual Basic было два варианта функций обработки строки - с суффиксом $ и без него. Например, Left$ возвращала переменную типа строка, а Left - типа Variant. Теперь останется только Left - но возвращаться будет строка.

Совет 34. Используйте Visual Basic.NET Update Tool. По мнению Microsoft, этот инструмент, включенный в состав Visual Basic.NET, обеспечит автоматический перенос 95% приложений, написанных с помощью Visual Basic 6.0, в среду Visual Basic.NET. Он сможет выполнить следующие преобразования синтаксиса языка:

  • преобразование переменных типа Variant в тип Object (см. совет 13-й);
  • преобразование типов данных Integer и Long соответственно в Short и Integer (см. совет 12-й);
  • установку свойств объектов в явном виде (т.е. код TextBox = 1 будет заменен на TextBox.Text = 1);
  • замену массивов с ненулевой нижней границей на массивы типа Wrapper Class.


Может пригодится:


Автор: Андрей Колесов
Прочитано: 5665
Рейтинг:
Оценить: 1 2 3 4 5

Комментарии: (0)

Добавить комментарий
Ваше имя*:
Ваш email:
URL Вашего сайта:
Ваш комментарий*:
Код безопастности*:

Рассылка новостей
Рейтинги
© 2007, Программирование Исходники.Ру