c = 5 + 5 * 2
Здесь выражение это 5 + 5 * 2. Значение этого выражения не трудно посчитать, оно равно 15. Можно было бы написать и так:
c = MyFunc() - 219
Здесь значение выражение такое же, как и в предыдущем случае, но вот сами выражения разные. Это важно понимать.
Также необходимо отметить значение скобок в выражениях. В Visual Basic скобки выполняют ту же функцию, что и в школе, а именно - задают приоритет операции. К примеру, модифицируем выражение 5 + 5 * 2 на:
c = (5 + 5) * 2
Теперь значение этого выражения не 15, а 20!
Урок № 12. Операторы
В Visual Basic операторы бывают следующих типов:
Урок № 13. Управляющие структуры
Примечание: Здесь бы хотелось заметить, что управляющие структуры мы тоже будем называть операторами. Операторы, рассмотренные на предыдущем уроке, используются в выражениях. А операторы, рассматриваемые на этом уроке, предназначаются для управления вычислением этих выражений. Важно понимать различие между этими операторами.
1.Условный оператор If...End If
Этот оператор необходим для принятия решений, нужно ли выполнять то или иное действие или нет. Другими словами если Логическое_выражение истинно, то Оператор выполнится. Если ложно, то выполнение не произойдёт.
If Логическое_выражение Then Оператор
или сложнее
If Логическое_выражение Then
Группа_операторов
End If
В первом случае оператор может быть только один. Во втором сколько угодно (в том числе и один).
Пример:
If (a = b) And (c <> d) Then
b = d
a = 20
End If
Скобки здесь не обязательны, но они повышают читабельность кода.
2. Условный оператор Select Case...End Select
Конструкция Select Case "принимает решение" на основе анализа значения одного выражения. При этом это выражение указывается в строке Select Case:
Select Case Анализируемое_выражение
Case Значение№1
Группа операторов
Case Значение№2
Группа операторов
...
Case Значение№N
Группа операторов
Case Else
Группа операторов
End Select
Конечно, анализируемое выражение должно возвращать значение типа, совместимого с типом значений в строке Case.
3. Оператор цикла For...Next
Этот цикл используют в том случае, когда заранее известно стартовое и конечное значение счётчика. Синтаксис выглядит следующим образом:
For Счётчик_цикла = Старт To Стоп Step Шаг
Группа операторов
Next [Счётчик_цикла]
Роль счётчика цикла может играть только ранее объявленная переменная целочисленного типа. Шаг задаёт приращение счётчика цикла при каждом проходе. Умолчательно значение шага равно 1. После слова Next счётчик можно опустить.
Пример:
В этом примере всем элементам массива iArray присваивается значение 5.
Dim c As Integer
Dim iArray(10) As Integer
For c = 0 To 10
iArray(c) = 5
Next c
3. Оператор цикла For Each...Next
Эта специфическая форма цикла For предназначена для выполнения некоторой операции с каждым объектом, входящим в состав некоторой коллекции объектов (такой операцией, например, может быть вызов метода или присваивание значения свойству). Синтаксис оператора:
For Each ИмяОбъекта In ИмяКоллекции
Операции над объектами
Next ИмяОбъекта
Пример:
В этом примере показано, как изменить свойство BackColor у всех этикеток (Label), лежащих на форме
Dim x As Object
For Each x In Me.Controls
If TypeName(x) = "Label" Then
x.BackColor = 0
End If
Next x
Me здесь - текущая форма. Т.е. не обязательно использовать полное имя формы для доступа к её свойствам. Например, для закрытия текущей формы, можно написать Me.Hide. (или Unload Me).
4. Оператор цикла Do While...Loop / Do...Loop While
Эти две разновидности цикла тесно взаимосвязаны, и их часто рассматривают как один из базовых видов цикла. Как уже отмечалось, циклы For применяют в тех случаях, когда количество проходов и диапазон изменения счётчика цикла заранее известны. Циклы While предназначены для ситуаций, когда количество проходов цикла заранее не известно, но зато известно условие выхода из цикла. Синтаксис цикла While:
Do While Условие_выхода
Группа операторов
Loop
Do
Группа операторов
Loop While Условие_выхода
5. Оператор цикла Do Until...Loop / Do...Loop Until
По своей логике цикл Until подобен циклу While с той лишь разницей, что проходы цикла выполняются до тех пор, пока условие выхода не выполняется.
Пример:
Dim n As Integer
n = 100
Do
n = n - 1
Debug.Print n
Loop Until n < 11
6. Выход из цикла Exit For / Exit Do
С помощью операторов Exit... можно осуществить досрочный выход из цикла вне зависимости от значения, которое имеет в данный момент условие выхода.
Пример:
Dim n As Integer
n = 10
Do While n > 1
n = n - 1
Debug.Print n
If n = 5 Then Exit Do ' Если счётчик = 5, то
'выходим из цикла
Loop
Итак, управляющие структуры - очень важное и далеко не слабое звено в программировании на Visual Basic (да и не только на Visual Basic). Без использования таких структур не получится написать даже самую маленькую программу. Даже если и получится, то программа не будет представлять никакого практического интереса.
Урок № 14. Процедуры и функции
Выражения и операторы - это сырьё для блоков, из которых строится программы, где в роли блоков выступают процедуры и функции.
Процедуры и функции
В Visual Basic, как и во многих других языках программирования, большинство программ создается из блоков - процедур и функций. Весь программный код находится как бы внутри этих процедур. Если возникает необходимость в решении какой-либо задачи в любом месте программы, то вызывается процедура. В Visual Basic нельзя ввести код между процедурами. Код всегда должен находиться внутри процедуры.
Давайте разберёмся с понятиями, и определим, что будет называться процедурой, а что функцией.
Процедуры:
Процедура - это некий блок кода, который будет выполняться всякий раз при вызове этой процедуры. Каждая процедура начинается зарезервированным словом Sub и заканчивается End. Вот общий синтаксис процедуры:
[Private | Public | Friend] [Static] Sub name [(arglist)]
[здесь некий код]
[Exit Sub]
[здесь тоже может быть некий код]
End Sub
arglist имеет следующий вид:
[Optional] [ByVal | ByRef] [ParamArray] varname[( )]
[As type] [= defaultvalue]
Функции:
Функция - это некий блок кода, который будет возвращать значение. Этим, и только этим функции отличаются от процедур. Общий синтаксис функции:
[Public | Private | Friend] [Static] Function имяфункции _
[(arglist)] [As type]
[здесь некий код]
[имяфункции = выражение]
[Exit Function]
[здесь тоже может быть некий код]
[имяфункции = выражение]
End Function
Что значит "будет возвращать значение"? Рассмотрим функцию из урока 8:
Public Function MyFunc() As Byte
MyFunc = 234
End Function
c = MyFunc()
Когда мы говорили о выражениях, мы говорили, что MyFunc - это выражение, со значением 234. Т.е. здесь, функция MyFunc возвращает значение 234 (байт). Чтобы задать это значение, необходимо присвоить имени функции выражение. В нашем случае в качестве выражения выступает число 234.
Давайте рассмотрим более практичный пример. Напишем функцию для вычисления квадрата числа. У функции будет 1 параметр типа Integer - число для возведения в квадрат. Функция будет возвращать значение квадрата параметра. Тип возвращаемого значения - Long:
Public Function Square(number As Long) As Long
Square = number * number
End Function
Вызвать функцию можно так:
b = Square (5)
А можно так, используя нашу процедуру для вывода сообщения на экран:
ShowMessage Square (5)
А можно и так:
Square 5
Урок № 15. Сводим всё вместе
В этом уроке мы попробуем написать нашу первую программу на Visual Basic - программу для решения квадратных уравнений. Может быть, эта программа и не очень полезна в хозяйстве, но она хорошо вас ознакомит с принципами программирования на VB.
Всмомним из урока 5 основные этапы разработки приложение на Visual Basic:
Программу будем писать согласно этим пунктам:
1. Продумывание программы.
Что должна делать наша программа? - решать квадратные уравнения. Вспомним, как решаются квадратные уравнения.
a*x*x + b*x + c = 0
Чтобы решить такое уравнение, нужно найти его дискриминант и затем корни. Дискрименант:
D = b*b - 4*a*c
Корни:
если дискриминант > 0, то X1 = (-b + (корень из D)) / 2*a, X2 = (-b - (корень из D)) / 2*a
если дискриминант = 0, то X1 = X2 = -b / 2*a
если дискриминант < 0, то корней не существует.
Итак, что вышло:
Входные данные в программу - коэффициенты a,b,c. Данные будем вводить в текстовые поля для ввода (TextBox).
Выходные данные - корни (если они есть) и дискриминант. Данные будем выводить в элемент метку (Label). Запускать решение будем нажатием на кнопку (Command Button).
2. Проектирование интерфейса.
Запустите Visual Basic. Выберите тип Standart EXE. Поместите на форму элементы управления, как показано на рисунке: