ПРОГРАММИРОВАНИЕ

При обсуждении развития современных интегрированных инструментов разработки ПО сегодня чаще всего акцент делается на макроэлементах этих средств - средах разработки, использовании компонентов, методах моделирования и пр. На этом фоне вопросы модернизации самого языка программирования кажутся второстепенными. Во многом это соответствуют действительности, но, тем не менее, все же комфортность написания кода - это тот "пустячок", который может быть не только приятным, но и весьма полезным.

Мы сейчас рассмотрим некоторые новшества программирования в 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.