ПРОГРАММИРОВАНИЕ
При обсуждении развития современных интегрированных инструментов разработки ПО сегодня чаще всего акцент делается на макроэлементах этих средств - средах разработки, использовании компонентов, методах моделирования и пр. На этом фоне вопросы модернизации самого языка программирования кажутся второстепенными. Во многом это соответствуют действительности, но, тем не менее, все же комфортность написания кода - это тот "пустячок", который может быть не только приятным, но и весьма полезным.
Мы сейчас рассмотрим некоторые новшества программирования в Visual Basic 2005, который будет представлен в ноябре в составе Visual Studio 2005. Напомним, что с выпуском в начале 2002 г. версии для .NET этот самый популярный язык программирования Microsoft, который в 90-е годы прошлого столетия внес огромный вклад в продвижение платформы Windows в целом, пережил наиболее драматический момент в своей, на тот момент десятилетней, истории. Выполняя переход к архитектуре .NET Framework, Microsoft пошла на решительную ломку синтаксиса языка, в результате чего была нарушена совместимость между текущей на тот момент версией VB6 и новой VB.NET, имеющей формально порядковый номер версии 7.0. Еще на этапе бета-тестирования VB.NET в течение полутора лет шли горячие дискуссии в сообществе VB-программистов, но позиция Microsoft по коренному преобразования VB осталась неизменной.
Казалось бы, о данной истории уже можно было позабыть, но дело в том, что проблема миграции VB-приложений в среду .NET (да и самих VB-программистов) еще не потеряла актуальность. Что вполне понятно, учитывая наличие огромного числа унаследованных VB-программ и специалистов, которые занимаются их поддержкой и развитием (речь идет в первую очередь о рынке США). Все это нам пришлось вспомнить, чтобы подчеркнуть то, что многие новшества VB2005 связаны не только с развитием VB.NET, но и с решением задачи перехода в новую среду разработки VB6-программистов*1.
_____
*1 В программистских кругах используются два термина: VB - это что было до 6-й версии включительно, VB.NET - начиная с 7.0.
Синтаксис VB2005 пополнился рядом полезных ключевых слов. Например, оператор Continue позволяет прервать выполнение текущего цикла и перейти к следующему в конструкциях For/Next, While и Do/Loop. Это может выглядеть так:
For i As Integer = 0 To 10
If i = 4 Then Continue For
If i Mod 2 = 0 Then MsgBox(i)
Next
В VB.NET слово Using применялось в блоке общих описаний модуля для подключения пространств имен. Теперь же оно может использоваться и для динамического создания/освобождения различных ресурсов (например, COM-объектов) внутри процедур:
Public Sub Data_Access(ByVal str As String)
Using conn As New SqlConnection(str)
Dim ds As DataSet
‘- выполнение действий с данными
End Using
End Sub
В данном случае переменные conn и ds доступны только в пределах блока Using.
В VB2005 Microsoft впервые реализовала возможность применения беззнаковых целых чисел: появилось сразу три новых типа данных - UShort, UInteger и Ulong - длиной соответственно в 2, 4 и 8 байтов. Сказать за это "спасибо" корпорации не очень хочется, так как необходимость в таких данных была еще двадцать лет назад, во времена QuickBasic/ DOS, но Microsoft откровенно игнорировала эти потребности разработчиков. И все же лучше поздно...
Описание программных компонентов, находящихся в различных библиотеках классов, - это довольно нудное занятие. В VB2005 задача немного упростилась за счет появления нового логического пространства имен, которое включает наиболее часто используемые функции .NET Framework, реализованные в объектах Application, Computer, Forms, Resources, Settings, User и WebServices. Вот как теперь можно проиграть программно системный звук:
My.Computer.Audio.PlaySystemSound(_
SystemSounds.Exclamation)
В нынешнем VB.NET 2002 эта же операция реализуется следующим образом:
Dim audio As New_
Microsoft.VisualBasic.Devices.Audio()
audio.PlaySystemSound(_
SystemSounds.Exclamation)
Ранее весь исполняемый код класса (функции, методы) хранился в одном физическом файле. Теперь в VB2005, используя ключевое слово Partial, появилась возможность разнести их по разным файлам. Например, это может выглядеть следующим образом:
‘ запоминается в MyString1.vb
Public Class MyString
Private _text As String
Public Sub New (ByVal text As String)
_text = text
End Sub
End Class
‘ запоминается в MyString2.vb
Partial Public Class MyString
Property Text() As String
Get
Return _text
End Get
Set(ByVal value As String)
_text = value
End Set
End Property
End Class
Такой подход очень полезен, когда нужно разделить код, автоматически генерируемый конструктором, и бизнес-логику программы. В VB2005 такое распределение кода по разным модулям производится самим конструктором (рис. 1).
Рис. 1. Код, сформированный
конструктором для формы,
записывается в отдельный файл
Новшеством .NET 2.0 Framework, доступным всем языкам, работающим в этой среде (в том числе C# и VB2005), является описание классов без точной фиксации типа данных на этапе написания кода. Такой подход называется Generics, а его синтаксис реализуется с помощью ключевого слова Of. В качестве примера рассмотрим класс MyQueue (см. листинг), к которому можно обращаться с использованием данных любого типа:
Public Class MyQueue(Of itemType)
‘ целые числа:
Dim q1 As New MyQueue(Of Integer)(2)
q1.Enqueue(5)
q1.Enqueue(6)
MsgBox(q1.Dequeue) ‘ печатает 5
MsgBox(q1.Dequeue) ‘ печатает 6
‘ строковые данные:
Dim q2 As New MyQueue(Of String)(1)
q2.Enqueue("Microsoft")
MsgBox(q2.Dequeue) ‘ печатает "Microsoft"
End Class
Листинг. Класс MyQueue показывает
возможность использования конструкции Generics
Раньше для подобных конструкций нужно было использовать универсальный тип данных Object. Принципиальное новшество Generics заключается в том, что в каждом конкретном случае применения такого класса задается тип данных в явном виде, причем на этапе компиляции. Поэтому очевидно, что Generics работает быстрее при выполнении кода, а главное, предотвращает возможные конфликты данных.
Поможет программистам и новый метод вставки готовых, часто используемых фрагментов кода (code snippets), распределенных по различным категориям. Microsoft обещает включить в окончательный вариант VB2005 более 500 таких заготовок. Файлы с этими кодами записаны в формате XML и хранятся в каталоге C:Program FilesMicrosoft Visual Studio 8VbSnippets1033. Их можно легко пополнять, создавать и редактировать самостоятельно.
В языках C# и Java можно применять XML-структуры в комментариях программы. Теперь подобная возможность реализована и в VB - это поможет повысить качество документирования кода. Такой комментарий можно потом автоматически перенести в справочный файл с помощью инструментов третьих фирм, в частности NDoc (http://ndoc.sourceforge.net).
Целый ряд новшеств Visual Studio 2005 реализован на уровне редактора кода. Ранее в случае ошибки при обнаружении синтаксической ошибки строка текста просто подсвечивалась с указанием в отдельном окне возможной причины этой ситуации. Теперь VS2005 сразу предлагает выбрать правильное ключевое слово. Функция Autocorrect поможет и в таком случае.
Например, вы сделали ссылку в своем проекте на библиотеку System.Data.dll для доступа к ADO.NET, но забыли импортировать пространство имен System.Data. В этом случае VB не сможет объявить переменную SqlDataReader, но сейчас Autocorrect предлагает варианты исправления ошибки - в данном случае определить правильное имя для класса SqlDataReader.
Пригодится VB-программистам и новая функция Exception Assistant, помогающая исправлять ошибки, обнаруженные в процессе выполнения проекта. В частности, если вы забыли указать ключевое слово New при создании экземпляра объекта, Exception Assistant попробует исправить эту оплошность без перезапуска программы.
Более подробный обзор новшеств языка Visual Basic 2005 можно найти в документации на этот продукт, а также в дополнительных материалах, опубликованных на сайте http://msdn.microsoft.com.