Главная страница Visual 2000
· Общий список статей
Публикации в журнале BYTE/Россия
· Публикации на тему MS .NET
Андрей Колесов
© Андрей Колесов, 2001Мы завершаем обсуждение темы...
Мы завершаем обсуждение темы, что нужно иметь в виду для обеспечения переноса программ, написанных на VB 6.0, в среду VB.NET. Напомним — такой переход будет непростым, так довольно многие конструкции VB 6.0 не будут работать в новой версии системы. Более того, некоторые из них будут выполняться, но иначе, чем в текущей версии.
Дискуссия на эту тему завершается по той простой причине, что время споров истекло — финальная версия VB.NET появится до конца года и если вы решили работать с ней (а куда деваться?), то нужно уже начинать писать новые приложения в этой среде. Кроме того, в июне вышла версия Visual Studio.NET бета 2 (см. "Что нового в Visual Studio.NET Beta 2"), и стало понятно, что ждать каких-то радикальных уступок со стороны Microsoft в ответ на критику по поводу несовместимости VB 6.0 и VB.NET и соответствующих проблем с переносом приложений не приходится.
Так или иначе, но в западной прессе дискуссионные публикации по поводу VB.NET сменились статьями на традиционную тему, как работать с новой версией системы. Что и мы собираемся сделать в последующих номерах "Байта".
Вместе с тем хотелось бы обратить внимание на статью Рассела Джонса "VB.NET против классического VB" (VB.NET Faces Off Against Classic VB"), в которой он приводит 10 примеров, демонстрирующих преимущества новой версии (статью можно найти по адресу www.vb-zone.com/free/articles/).
Однако я бы хотел высказать свое несогласие с пафосом этой статьи — представляется совершенно очевидным, что каждая новая версия инструмента должна быть лучше предыдущей. Безусловно, в VB.NET реализованы многие очень интересные и полезные функции. Но суть-то проблемы заключается в том, что большинство новшеств можно было бы реализовать, обеспечивая совместимость версий. И примеры, приводимые американским автором, на самом деле как раз это демонстрируют.
В частности, в качестве достоинства VB.NET он говорит о том, что теперь порядок обхода элементов управления на форме (он задается свойством TabIndex) теперь можно будет задавать с помощью встроенной команды Tab Order. Но ведь такая команда уже давно появилась еще в составе Office 97/VBA. Что мешало включить ее и в VB?
Конечно, очень здорово, что наконец-то будет реализована возможность динамического подключения к форме элементов управления к форме в процессе выполнения приложения. Но ведь и в момент создания VB 1.0 в среде Windows 3.0 не было никаких технический проблем для реализации такой полезной функции.
Безусловно, появление VB.NET является очень важным моментом в истории этого популярного средства программирования. (Более того, весь пакет Visual Studio.NET знаменует качественно новый этап развития средств разработки на основе качественно более высокого уровня интеграции.) В этой связи полезно вспомнить, что в мае нынешнего года Visual Basic отметил свой десятилетний юбилей — его первая версия появилась в 1991 году и впервые была продемонстрирована в СССР на выставке Softool'91. По этому поводу имеет смысл вспомнить об основных этапах жизни "Васика".
Изменения синтаксиса в VB.NET бета 2
Прежде, чем предложить завершающую часть "Советов", нужно рассказать о некоторых модификациях синтаксиса VB.NET по сравнению с первой бетой.
Отметим, что с самого начала дискуссий о VB.NET никто не отрицал вероятность того, что Microsoft может пойти на некоторые уступки своим критикам. Однако, зная стиль работы корпорации, можно было уверенно утверждать, что уступки будут минимальными и, возможно, временными. По крайней мере, вся десятилетняя история VB хорошо показывает, что за внешней внимательностью к запросам разработчикам находится довольно жесткая линия стратегии Microsoft, которая ведет сообщество программистов в нужном корпорации направлении.
Выход версии бета 2 показывает, что сколь-нибудь значительного числа "откатов" со стороны Microsoft не следует ждать. Вот список некоторых из новшеств, ряд которых нужно учесть при изучении ранее опубликованных нами "Советов".
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
Такой метод позволить порой существенно упростить код программы. Например, вот как выглядит функция получения уникального глобального кода в VB 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 В VB.NET все это будет выглядеть гораздо компактнее: Private Function getGUID () As String getGUID = "{" & System.Guid.NewGUID.ToString & "}" End Function
Это не полный перечень всех изменений в синтаксисе VB.NET. И можно предположить, что он не окончательный — в финальной версии нас могут ждать новые сюрпризы.
Еще несколько советов по переходу в VB.NET
Совет 30. Внимание при объявлении переменных
VB 6 поддерживает такую забавную конструкцию с объявлением переменной внутри исполняемого кода:
Do Dim nTotal As Long nTotal = nTotal + 1 Loop Until nTotal > 100 MsgBox "Результат = " & nTotal
В результате его выполнения будет выдано сообщение "Результат = 101". А в VB.NET вы получите системное сообщение об ошибке — "переменная nTotal не объявлена". Причина этого заключается в том, что в VB.NET подобная переменная работает только внутри операторных скобок, в которых она определена (в данном случае Do Loop). Так что, конструкция, выглядевшая в VB 6 довольно несуразной, получает весьма четкую смысловую окраску.
Кстати, для увеличения переменной на некий шаг теперь можно применять такой синтаксис:
nTotal += 1
Совет 32. Откажитесь от использования Null
Честно говоря, я никогда не понимал глубокого смысла парадигмы Null, которая использовалась для обозначения особого, "нулевого" значения переменной типа Variant. Вполне естественно, что с исчезновением Variant из VB.NET удален и Null.
Совет 33. Готовьтесь к однозначности строковых функции
Как известно, в VB было два варианта функций обработки строки — с суффиксом $ и без него. Например, Left$ возвращала переменную типа строка, а Left — типа Variant. Теперь останется только Left, но возвращаться будет только строка.
Совет 34. Используйте VB.NEt Update Tool
По мнению Microsoft это инструмент, включенный в состав VB.NET, обеспечит автоматический перенос 95 процентов приложений, написанных с помощью VB 6.0, в среду VB.NET. Он сможет выполнить следующие преобразования синтаксиса языка:
- преобразование переменных типа Variant в тип Object (см. Совет 13);
- преобразование типов данных Integer и Long соответственно в Short и Integer (см. Совет 12);
- установка свойств объектов в явном виде (т.е. код TextBox = 1 будет заменен на TextBox.Text = 1);
- замена массивов с ненулевой нижней границей на массивы типа Wrapper Class.
Что нового в Visual Studio.NET Beta 2
Помимо некоторых изменений в составе отдельных средств (о новшествах языка VB говорится в статье "А ты готов к VB.NET"?) Microsoft включила еще несколько дополнительных возможностей для разработчиков.
Во-первых, на стартовой странице VB.NET появилась новая вкладка Web Hosting, с помощью которой можно получить список поставщиков услуг ASP .NET Web, которые предоставляют бесплатное Web-пространство для распространения законченных компонентов и приложений. Во-вторых, на вкладке "Что нового?" стартовой страницы имеется ссылка на огромный список утилит и компонентов независимых разработчиков в дополнение к VS.NET.
Следует также обратить внимание на то, что пока VB, VC++ и C# существуют только в объединенном варианте. Microsoft объясняет это тем, что оба средства имеют очень большое число общих компонентов. Корпорация ничего не говорит о том, как будет выглядеть окончательный вариант поставки, но вариант того, что отдельных программ VB и VC++ больше не будет, представляется весьма вероятным.
Не очень определенно выглядит также ситуация с поддержкой работы VS.NET в среде Windows 9x и Windows ME. В сопроводительной документации на версию бета 2 подчеркивается, что она тестировалась в среде Windows NT 4.0, Windows 2000 и Windows XP. Что же касается Windows 98 и ME, то здесь лишь обещается, что в них будет поддерживаться "выполнение кода" (code execution). При этом непонятно, о чем идет речь — работе среды VS.NET или поддержке только создаваемых в ней приложений.
В мае Microsoft выпустила бета версию нового набора для разработчиков мобильных Web-приложений на базе технологии ASP.NET — Microsoft .NET Mobile Web SDK Beta 1. Конструктор Mobile Web Forms Designer для создания мобильных Web-форм также включен в состав VS.NET Beta 2.
Изменения ожидают также разработчиков приложений масштаба предприятий: издание VS.NET Enterprise Edition будет поставляться в двух вариантах — Developer и Architect, для разработчиков и архитекторов систем соответственно. Пока соотношение этих двух версий не очень ясно (получается, что для полного цикла разработки нужно будет покупать два недешевых продукта) и о версии Architect говорится лишь то, что она будет нацелена на решение трех задач — моделирование приложений, моделирование баз данных и управление средой разработки.
В варианте Enterprise будет также использован механизм Open Tools Platform, которые позволяет предоставляет весь набор инструментов, интегрировать в среду программирования VS.NET решения сторонних разработчиков. Для привлечения третьих фирм — поставщиков инструментальных средств — Microsoft объявила программу Visual Studio.NET Integration Program (VSIP). Одним из первых ее участников стала компания Rational Software, уже объявившая о поддержке данной платформы и интеграции своего средства Rational Suite с Microsoft VS.NET.
Сроки выхода окончательной версии Visual Studio.NET не обнародованы, но обещается, что это произойдет во второй половине 2001 года.