Visual Basic. Программирование на Visual Basic

..........................................................................................................................

[ Главная ] [ Статьи ] [ Для новичков ] [ Примеры ] [ Программы ] [ Microsoft Agent 2.0 ] [ Пособие ] [ Уроки ] [ Разное ]
..........................................................................................................................


Урок № 9. Из чего состоит код?

Итак, мы научились проектировать интерфейс программы. Но для полноценной программы этого не достаточно. Нужно написать код программы, который будет манипулировать элементами управления и производить какие-то вычисления. Это самый сложный этап.

Во всех языках высокого уровня программный код состоит из:

  • Переменных
  • Выражений
  • Операторов
  • Управляющих структур
  • Функций
  • Классов и объектов

Опишем каждый тип подробнее:

Переменные.

В Visual Basic переменые хранят информацию (значения). При их использовании Visual Basic резервирует область в памяти компьютера для хранения данной информации. Каждая переменная имеет своё имя. Оно может достигать 255 символов в длину, начинается всегда с буквы латинского алфавита, за которой могут следовать другие буквы, цифры и знак подчёркивания. Регистр символов значения не имеет. Приведём несколько примеров имён переменных:

numOfLetters - подходит
2Bottle - неверно, т.к. начинается не с буквы
ThisIsVeryLongName - подходит, длина 18 символов
sng.Cos - не подходит, т.к. используется точка

Именование переменных и функций очень важная штука. Я рекомендую придерживаться венгерского соглашения:

Тип
Схема именования
Пример
Константа
Имя константы должно состоять только из заглавных букв.
HWND_BROADCAST
Переменная
Имя переменной должно начинаться с маленькой буквы, далее следующий слова с большой.
numOfFonts
Функция
Имя функции должно начинаться с заглавной буквы, далее следующие слова тоже с заглавной.
SetForegroundWindow

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

Каждая переменная имеет определённый тип. Всего в VB 14 типов переменных. Кроме того, программист может определить и свой тип. Перечислим основные типы переменных VB:

Byte - предназначен для хранения целых чисел от 0 до 255. Если переменной такого типа присвоить значение, выходящее за эти пределы, то Visual Basic сгенерирует ошибку.

Integer - предназначен для хранения целых чисел в диапазоне
-32768 до +32767, т.е. размер памяти, выделяемой под такую переменную состовляет 2 байта. (256*256=65536). Символ для обозначения - "%". Зачем он нужен, мы рассмотрим далее.

Long - предназначен для хранения целых чисел в диапазоне
-2147483648 до +2147483647, т.е. размер памяти, выделяемой под такую переменную состовляет 4 байта. (65536*65536=4294967296). Символ для обозначения - "&".

String - предназначен для хранения строковой (символьной) информации, т.е. попросту говоря - текста. Может хранить до 2 Гб. текста. Символ для обозначения - "$".

Single - предназначен для хранения дробных чисел, с точностью до 7 цифр. Диапазон отрицательных значений от -3.402823Е38 до -1.401298Е-45. Диапазон положительных значений от 1.401298Е-45 до 3.402823Е38. Длина числа может достигать 38 знаков. Занимает 4 байта памяти. Вычисления с данными переменными будут приблизительными и менее быстрыми, чем с переменными целого типа. Символ для обозначения - "!".

Double - предназначен для хранения дробных чисел, с точностью до 16 цифр. Диапазон отрицательных значений
от 1.79769313486232Е308 до -4.94065645841247Е-324.
Диапазон положительных значений
от 4.94065645841247Е-324 до 1.79769313486232Е308.
Длина числа может достигать 300 знаков. Занимает 8 байта памяти. Вычисления с данными переменными будут приблизительными и менее быстрыми, чем с переменными целого типа. Используется для научных рассчётов. Символ для обозначения - "#".

Currency - Данный тип создан для того, чтобы избежать ошибок при преобразовании чисел из десятичной формы в двоичную и наоборот (Невозможно представить 1/10 как сумму 1/2, 1/4 и т.д). Данный тип может иметь до 4 цифр после запятой, и до 14 перед ней. Внутри данного диапазона вычисления будут точными. Вычисления выполняются так же медленно, как и в случае переменных Single и Double. Данный тип очень подходит для финансовых расчётов. Символ для обозначения - "@".

Date - Этот тип данных позволяет хранить значения времени и даты в промежутке от полуночи 1 января 100 года до полуночи 31 декабря 9999 года. Если переменной присвается только значение даты, то время равняется 00:00.

Boolean - очень важный и распространённый тип данных. Позволяет хранить так называемые булевы значения, т.е. только два значения - True и False. (По русски Правда и Ложь). Используется тогда, когда вам нужно хранить только значение Да или Нет.

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

В Visual Basic переменные объявляются с помощью оператора Dim, после которого следует As и Имя_Типа переменной. Например:

Dim a As Long
Dim
b As Byte
Dim
c As Long
Dim
numOfLetters As Long
Dim
myString As String
Dim
isLoaded As Boolean

Если не указывать As Имя_Типа, то переменная будет объявлена как Variant.

После объявления переменной ей присваивается значение по умолчанию. Для стоки это - "" (пустая строка). Для чисел - 0. Для Boolean - False. Переменная может быть использована сразу после объявления.

Переменные можно объявлять и в одной строчке, разделяя объявления запятыми:

Dim a As Long, Dim b As Integer

Здесь очень важно заметить следующую особенность. Логично было бы объявить 3 переменные типа Long следующим образом:

Dim a, b, c As Long

Такая привычка могла перейти, например, из языка C. Там все переменные действительно имели бы тот тип, который указан после последней переменной. Но не в Visual Basic! В результате такого объявления VB объявит 3 переменные, первая и вторая будут иметь тип Variant, и только третья - Long! Запомните это! А вообще, лучше объявлять каждую переменную в отдельной строчке. И, если необходимо, то логически отделить эти объявления можно просто вставив пустую строку между теми объявлениями, которые вы хотите отделить логически. Например, так:

Dim a As Long
Dim
b As Long

Dim myString1 As String
Dim
myString2 As String

Такие логические пробелы между строчками необходимы для избавления кода от его монотонности.

Присвоить значение переменной можно при помощи знака равно "=". Например:

a = 1234567
b = 234
c = 133
myString = "Visual Basic рулит"
isLoaded = True

В данном примере переменным присваивались константы. Но часто бывает необходимо присвоить одной переменной значение другой. Это делается следующим образом:

a = b
' можно, т.к. переменная b "умещается"
' в тип Long (234<4294967296)

a = b + c
' теперь в a хранится сумма b + c.


b = c
' тоже возможно (133 < 255)

b = a
' нельзя, т.к. переменная a не укладывается
' в диапазон [0-255]. Произойдёт ошибка.


myString = a
' Visual Basic сам преобразует число 1234567
' в строку "1234567", а потом присвоит это значение
' переменной myString. Также возможно обратное действие.


isLoaded = True

' всё ОК

myString = myString & " однозначно!"
' здесь происходит слияние двух строк, в результате чего
' переменная myString содержит строку:
' "Visual Basic рулит однозначно!".

isLoaded = a
' возможно, т.к. Visual Basic сам преобразует тип Long
' в тип Boolean. isLoaded будет содержать True.
' Почему не False?
' Потому, что в VB False - это нуль, а любое,
' не нулевое значение - True

Выше, при описании типов переменных я указывал символ для обозначения. Этот символ можно (а иногда и нужно) использовать для объявления переменной, но без использования зарезервированных слов As Тип. Т.е. к примеру:

Dim myLongParam&
Dim myString$

Здесь объявлены 2 переменные, первая имеет тип Long, вторая - String. Также можно употребрять эти спец. символы для явного указания типа константам, например:

Call MyProc (myParam1, myParam2, 5&)

Здесь, при вызове процедуры MyProc, последний параметр имеет тип Long. Если бы мы не указали значок &, то он (параметр) имел бы тип Byte. Это необходимо при использовании API функций.

Выше я уже отмечал, что Visual Basic часто, незаметно для разработчика, занимается преобразованием типов переменных на лету. К примеру, мы рассматривали такой пример:

myString = a

Переменная a имеет тип Long, а myString - String. Visual Basic сам преобразует переменную a в тип String, а затем присвоит значение переменной MyString. Это необходимо знать. Также, Visual Basic предоставляет в ваше распоряжение несколько функций преобразования типов: CLng, CBool, CDate, CStr и т.д. Каждая функция преобразует выражение к соответствующему типу. Рассмотрим распространённую ошибку программиста на VB. Пусть у нас есть код типа:

Dim a As Byte
Dim b As Byte
Dim c As Long

a = 200
b = 200

c = a + b

Казалось бы, что если запустить такой код на выполнение, то в переменной c будет находиться значение 400 (200 + 200). Но не тут-то было :(. Visual Basic на строке c = a + b сгенерирует ошибку Overflow (Переполнение). Дело в том, что в выражении справа от знака равно складываются 2 переменные типа Byte, и Visual Basic решает, что после вычисления этого выражения, должен остаться тот же тип - Byte. Но если вспомнить то, что тип Byte может хранить значения в диапазоне 0-255, можно понять почему VB генерирует Overflow (Переполнение). 400 далеко выходит за диапазон Byte... Здесь может возникнуть вопрос: "А как же быть? Объявлять переменные a и b типом Long?". Можно поступить и так. А можно воспользоваться функций преобразования типа CLng. Тогда работоспособный код будет выглядеть следующим образом:

Dim a As Byte
Dim b As Byte
Dim c As Long

a = 200
b = 200

c = CLng(a) + CLng(b) 'Всё в порядке, 400 - входит в тип Long

Немного о константах:

В Visual Basic можно объявлять не только переменные, но и константы. Константа как и переменная, тоже хранит некоторое значение, но в отличие от переменной хранимое значение не может изменяться. Чтобы объявить константу необходимо использовать зарезервированное слово Const, за которым следует имя и значение (и возможно тип) константы:

Const PI = 3.1415

Здесь объявлена константа c именем pi и значением 3.1415. После объявления она может быть использована по назначению.

Можно отметить следующую особенность VB: для констант с плавающей точкой тип по умолчанию - Double, для целых чисел - Integer. (Это легко можно проверить встроенной функций VB - VarType). Для того, чтобы явно задать тип константы, необходимо после имени задать тип, к примеру

Const PI As Long = 3 ' PI = 3, PI имеет тип Long

В Visual Basic существует очень много встроенных констант, которые с легкостью могут быть использованы в ваших программах. Например, константа vbNewLine - содержит 2 символа, с ASCII кодами 13 и 10, т.е. переход на новую строку. Список констант можно посмотреть в Object Browser'е. Для его вызова необходимо нажать F2, находясь в среде Visual Basic.

"Видимость" переменных:

Объявлять переменные можно в самых разных местах:

  1. Внутри процедуры (или функции). В этом случае переменная будет "видна" только в коде этой процедуры (или функции). Если вы попытаетесь обратиться к такой переменной внутри кода другой процедуры, то Visual Basic сгенерирует ошибку.

  2. В самом верху кода формы, т.е. сразу после оператора Option Explicit. Это место называется разделом General Declarations (раздел Глобальных Объявлений). Такие переменные будет "видны" в любом месте кода формы. Т.е. в любой процедуре (или функции) формы. Переменные в данном месте могут быть объявлены с помощью зарезервированных слов Private и Public. Рассмотрим 3 определения:

    Dim myLocalVar1 As Byte
    Private
    myLocalVar2 As Integer
    Public
    myGlobalVar1 As Long


    Первые 2 определения абсолютно эквивалентны. Переменные объявленные таким образом будут видны в любом месте кода формы. Но только той формы, где они объявлены. В других формах обратиться к таким переменным будет нельзя.

    Третья переменная будет видна всему приложению в любом месте. Правда, чтобы добраться к такой переменной из кода другой формы, необходимо перед именем переменной указать ещё и имя формы, где эта переменная объявлена, например:

    Form1.myGlobalVar1 = 234

  3. В разделе General Declarations модуля. Здесь действуют те же правила, что и в разделе General Declarations формы. Private (или Dim) будут "видны" только в коде модуля. А Public - везде. Отличие наблюдается только в способе доступа к переменной. Здесь не обязательно указывать имя модуля перед такой переменной. Можно просто указать её имя и всё. Хотя я не рекомендую этого делать, т.к. теряется наглядность. И, к тому же, если у вас 2 модуля, в которых объявлены переменные с одинаковыми именами, то добраться к ним можно только указав имя соответствующего модуля перед именем переменной.

Период существования переменных:

Период существования переменной означает, как долго переменная является доступной.

Переменные, объявленные в процедуре (или функции) будут "живы" только пока выполняется эта процедура (или функция). При выходе из процедуры - переменная удаляется. При очередном вызове этой процедуры - переменная заново инициализируется. Кстати, к словам Private, Public и Dim, в процедурах и функциях можно использовать зарезервированное слово Static. Такая переменная при повторном вызове этой процедуры не будет заново инициализироваться. Она будет сохранять то значение, которое было в ней после предыдущего вызова. (такие переменные очень удобно использовать в обработке события Timer'а). Например:

Static myStat As String ' Private Static переменная

Переменные уровня формы будут "живы" только пока "жива" форма. Как только объектная переменная формы будет установлена в Nothing (или после выполнения оператора Unload), все переменные уровня этой формы удаляются.

Переменные уровня модуля "живы", пока "живёт" ваше приложение. Т.е. "живы" всегда.

Некоторые замечания:

Перед использованием переменной, её обязательно нужно объявить. Это избавит вас от лишних ошибок.

Переменным нужно давать осмысленные имена. Т.е. старайтесь не использовать имена типа a1,a2,a3,ab,ccc и т.п. Поверьте, рано или поздно вы запутаетесь в своей же программе! Лучше всего переменным давать английский эквивалент того, что хранит данная переменная. Например, для хранения некоторой суммы денег, переменная может быть названа как cashMoney. Если у вас английским не очень, то можете использовать транслит, т.е. переменную назвать, например как summaDeneg. Ну и т.п. Кириллицу в имени переменной использовать нельзя.

Переходим к следующему уроку.



..........................................................................................................................

[ Главная ] [ Диски ] [ Книги ] [ Архив рассылки ] [ Архив новостей ] [ Готовые кусочки программ ] [ Карта сайта ]
..........................................................................................................................

По страницам сайта Visaul Progs
или Изучение Visual Basic
Рассылка 'По страницам сайта Visaul Progs' >>> Подпишись на рассылку - будешь получать новые статьи , примеры и много полезной информации из первых рук!!! >>>Если у вас есть статья которой нет на сайте
пришлите ее мне-------->
Послать статью
>>>Если вы хотите задать вопрос
пишите-------->
Мне нужна помощь


Рейтинг сайтов YandeG Rambler's Top100
Реклама:

...:::Design by Mystf0rse 2005-2010 year:::...