Выражения, операторы и передача управления

В этой главе представлен базовый «арсенал» VB .NET. Большая часть материала сводится к краткому обзору концепций, присущих всем языкам программирования (например, переменных и команд цикла), и описанию базовых типов данных, в основном различных чисел и строк. Читатели, хорошо знакомые с VB6, могут бегло пролистать эту главу.

Лишь в нескольких примерах этой главы встречается реальный код, который может использоваться в серьезных программах VB .NET. Дело в том, что ни одна серьезная программа VB .NET не обходится без объектов, построенных по шаблонам, называемых классами, а эта тема будет рассматриваться в главе 4. Мы начнем с базовых конструкций языка, потому что в противном случае нам пришлось бы ограничиться примитивными классами, не обладающими никакой практической ценностью. В этой главе не рассматриваются классы, определяемые пользователем, и продемонстрированы лишь простейшие примеры использования встроенных классов .NET Framework, обладающих исключительно широкими возможностями.

Что же из этого следует? Как ни странно — то, что написанные в этой главе программы весьма близки по стилю к традиционному программированию ранней эпохи BASIC и даже предшествовавшей ей эпохи Fortran и COBOL (если не считать некоторых странных, но необходимых синтаксических конструкций). В частности, в отличие от программ из дальнейших глав, у них всегда есть четко определенные начало и конец, и управление передается от начала к концу (хотя управление может передаваться специальными командами).

Как говорилось во введении, мы постараемся приводить программы, написанные в нормальном стиле .NET, по возможности избегая искусственной совместимости с VB6.

 

Консольные приложения

Каждое приложение VB .NET должно иметь точку вто§а. В точке входа содержится код, автоматически выполняемый при запуске, после чего управление передается остальному коду программы. В относительно простых графических приложениях точка входа может ассоциироваться с начальной формой, как в VB6. Но как было показано в главе 1, код форм Windows достаточно сложен и поиск точки входа может вызвать определенные затруднения. В этой главе рассматриваются только консольные приложения, работающие в консольном окне (наподобие окна сеанса DOS). Да, VB .NET позволяет легко создавать традиционные консольные приложения, часто применяемые при программировании серверных сценариев:

Точкой входа консольного приложения является процедура Sub Mai n модуля (аналог процедуры Sub Mai n в VB6). Если выбрать в диалоговом окне New Project значок консольного приложения (Console Application), VB .NET автоматически генерирует «скелет» приложения с точкой входа — процедурой Sub Main:

Module Module1

Sub Main()

End Sub

End Module

В отличие от VB6, в первой строке задается имя модуля (команда выделена жирным шрифтом). В данном примере используется имя Modul el, принятое по умолчанию. По правилам имя модуля должно совпадать с именем файла. Допустим, вы изменили имя модуля в первой строке: Module Testl При попытке запустить консольное приложения выводится сообщение об ошибке:

Startup code 'Sub Main' was specified in 'Test.Modulel'.

but 'Test.Modulel' was not found

Переименование модуля после его создания выполняется следующим образом:

  1. Измените имя модуля в окне программы.
  2. Измените имя файла модуля в окне решения.
  3. Щелкните правой кнопкой мыши в строке ConsoleApplication окна решения и выберите в контекстном меню команду Properties.
  4. Убедитесь в том, что в списке Startup object появившегося диалогового окна (рис. 3.1) выбрано имя модуля.

По аналогии с VB6 программа VB .NET (решение) может состоять из нескольких модулей, но наличие процедуры Sub Main допускается только в одном модуле. Приложение завершается по достижении команды End Sub процедуры Sub Mai n. Например, легендарная программа «Hello world» выглядит следующим образом:

Module Modul el

Sub Main()

Console.WriteLine("Hello world")

End Sub End Module

Если запустить эту программу в IDE, на экране очень быстро мелькнет (и тут же исчезнет) окно DOS со словами «Hello world». Окно закрывается по завершении обработки команды End Sub.

Рис. 3.1. Диалоговое окно свойств консольного приложения

Если включить в программу строку, выделенную ниже жирным шрифтом, консольное окно остается на экране до нажатия клавиши Enter (чрезвычайно полезный метод ReadLine() описан ниже).

Module Modulel

Sub Main()

Console.WriteLine("Hello world")

Console. ReadLine()

End Sub

End Module

Несмотря на простоту, эти две программы демонстрируют одну из ключевых особенностей программирования VB .NET (и вообще программирования на любом объектно-ориентированном языке): вы обращаетесь к объектам с запросом на выполнение операций. По аналогии с VB6 точка («.») используется для обращения к членам объектов и классов. Хотя обычно при вызове указывается объект (конкретный экземпляр, созданный на базе класса), в некоторых случаях вместо него указывается имя класса. В качестве примера возьмем следующую строку:

Console.WriteLine("Hellо world")

В ней вызывается метод Wri teLi ne класса Console, предназначенный для вывода текста с последующим переводом строки (в объектно-ориентированном программировании, как и в VB6, функции классов обычно называются методами). Метод WriteLine принадлежит к числу общих (shared) методов, также называемых методами класса. Общие методы подробно описаны в главе4. При вызове WriteLine выводимый текст заключаете в кавычки и помещается в круглые скобки. Во вторую версию программы «Hello world» добавлен вызов метода ReadLi ne, ожидающего нажатия клавиши Enter (метод ReadLi ne обычно используется в правой части команды присваивания, чтобы введенный с консоли текст был сохранен в заданной переменной — см. следующее примечание).

В приведенных программах следует обратить внимание на пару неочевидных обстоятельств. Как было сказано выше, при вызове метода обычно указывается конкретный экземпляр класса. Исключение из этого правила составляют особые методы класса, называемые общими методами. Общие методы существуют на уровне класса, а не его отдельных экземпляров. Другая тонкость заключается в том, что Console входит в пространство имен System, поэтому полный вызов метода выглядит так: System.Console.Writeline("Hello world"). В данном примере это не нужно; причины изложены в главе 4 при более подробном описании пространств имен.

Пользователям предыдущих версий VB следует учесть, что круглые скобки при вызове методов обязательны — обычно IDE добавляет их автоматически, но лучше не забывать об этом. Ключевое слово Call разрешено, но теперь в нем нет необходимости.

 

Команды VB .NET

При вводе программ VB .NET во внешнем редакторе вы не сможете воспользоваться средствами IntelliSense. Мы рекомендуем использовать IDE, поскольку технология IntelliSense значительно упрощает программирование в такой сложной среде, как .NET (конечно, для этого вам придется перейти от бесплатно распространяемого .NET SDK к Visual Studio). Редактор IDE даже исправляет некоторые распространенные ошибки — например, пропуск круглых скобок при вызове некоторых методов.

В VB .NET, как и во всех предыдущих версиях BASIC, не учитывается регистр символов (кроме текста, заключенного в кавычки). Пробелы в строках, не заключенных в кавычки, также игнорируются.

Тем не менее VS .NET IDE пытается оформлять программы VB .NET по своим правилам. Первые символы ключевых слов преобразуются к верхнему регистру, а строки дополняются пробелами для удобства чтения (End SUB преобразуется в End Sub и т. д.). Регистр символов в именах методов VB .NET определяется по схеме Pascal (слова начинаются с прописных букв, остальные буквы строчные). Альтернативная схема выбора регистра (writeLine) для методов VB .NET обычно не используется.

Номера строк в командах VB .NET практически не используются, хотя строки программы могут нумероваться, причем каждая команда обычно расположена в отдельной строке. Чтобы продолжить команду в следующей строке, завершите ее символом подчеркивания (_), отделенным одним или несколькими пробелами. Таким образом, если строка не завершается символом подчеркивания, нажатие клавиши Enter является признаком конца команды (в Visual Basic команды не разманд можно разместить в одной строке, разделив их символом «:», но обычно так не поступают. Если введенная строка не помещается в окне, IDE прокручивает строку вправо по мере необходимости.

 

Комментарии

Комментарии в VB .NET, как и в любом языке программирования, необязательны. Они не обрабатываются компилятором и соответственно не занимают места в откомпилированном коде. В VB .NET существует два варианта оформления комментариев. В первом, более распространенном варианте комментарий начинается с апострофа:

Sub Main()

Console.WriteLine("Hello world")

' Игнорировать значение, возвращаемое методом ReadLine

Console. ReadLine()

End Sub

Во втором варианте используется старое ключевое слово Rem, которое появилось в BASIC в начале 1960-х годов!

При включении комментариев в конец строки проще воспользоваться апострофом, поскольку ключевое слово Rem придется отделять двоеточием. В VB .NET не предусмотрено языковых средств для комментирования нескольких строк, хотя на панели инструментов присутствует кнопка, упрощающая создание таких комментариев.

В отличие от языка С#, обладающего встроенными средствами построения комментариев XML, в VB .NET документация XML будет создаваться отдельной надстройкой (add-in).