Оператор присваивания меняет значения переменных величин
Пока я не рассматривал программы, в которых переменныеменяют свою величину. Теперь настало время такую программу рассмотреть:
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim k As Integer
k = 10
Debug.WriteLine(k)
k = 25
Debug.WriteLine(k)
k = 4
Debug.WriteLine(k)
End Sub
В процессе работы программы содержимое ячейки k меняется. Так, при выполнении оператора k=25 там вместо значения 10 появляется 25. А куда же девается десятка? Она стирается, то есть компьютер забывает ее безвозвратно. Здесь действует общий принцип работы всех компьютеров:
Если в какую-нибудь ячейку или вообще в какое-нибудь место памяти или диска записывается новая информация, то старая информация, записанная там раньше, автоматически стирается, даже если она кому-то и нужна.
Раз теперь вместо 10 в ячейке k находится 25, то оператор Debug.WriteLine(k) печатает уже 25. (Слово «печатает» устарело, оно осталось от тех времен, когда мониторов еще не было, а вместо них были принтеры. Когда я по старинке говорю, что информация печатается, я подразумеваю, что она появляется на мониторе в том или ином окне.) Следующий оператор k=4 запишет на место 25 четверку, а Debug.WriteLine(k) ее напечатает. Проверьте.
Запишем схематически процесс изменения информации в ячейке k:
ПОРЯДОК ИСПОЛНЕНИЯ ОПЕРАТОРОВ | ЧТО НАХОДИТСЯ В ЯЧЕЙКЕ ПАМЯТИ k | ЧТО ВИДИМ В ОКНЕ Output |
k=10 | ||
Debug.WriteLine(k) | ||
k=25 | ||
Debug.WriteLine(k) | ||
k=4 | ||
Debug.WriteLine(k) |
А что напечатает следующая программа?
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim f As Integer
f = 30
Debug.WriteLine(f)
f = f + 4
Debug.WriteLine(f)
End Sub
Оператор f=30 запишет в ячейку f число 30. Затем оператор Debug.WriteLine(f) напечатает 34. А что сделает странный оператор f=f+4 ? Не думайте, что это уравнение или что-нибудь в этом роде. Это оператор присваивания, а значит и выполнится он согласно определению оператора присваивания. Сначала VB вычислит правую часть f+4 , подставив туда вместо f его значение, взятое из ячейки, и получит 34. Затем число 34 будет записано в ячейку, отведенную под переменную, обозначенную в левой части, то есть опять же в ячейку f. При этом старое значение 30 будет стерто. Оператор Debug.WriteLine(f) напечатает 34.
Таким образом, оператор f=f+4 просто увеличивает число в ячейке f на четверку или, другими словами, увеличивает f на 4.
Зачем это нужно? Узнаете позже. Очень даже нужно. Операторы такого типа встречаются настолько часто, что для них даже придумали сокращенную запись. Потренируемся:
Оператор | Сокращенная запись | Действие |
a = a + 1 | a += 1 | Переменная увеличивается на 1 |
s = s - 25 | s -= 25 | Переменная уменьшается на 25 |
b = b * 2 | b *= 2 | Переменная увеличивается в 2 раза |
t = t / 3 | t / = 3 | Переменная уменьшается в 3 раза |
Задание 8.
Определите без компьютера, что будет напечатано при выполнении следующих фрагментов программ:
· a=100 : a=10*a+1 : Debug.WriteLine(a)
· a=100 : a= -a : Debug.WriteLine(a)
· a=10 : b=25 : a=b-a : b=a-b : Debug.WriteLine(a) : Debug.WriteLine(b)
Имена переменных. Ключевые слова VB
Как правильно давать имена элементам VB, мы уже говорили. Повторю:
Имяможет состоять из букв, цифр и знаков подчеркивания, причем не должно начинаться с цифры. И не должно состоять из одних подчеркиваний.
Правда, в VB имя определяется несколько более широко, но то правило, которое я дал, можно считать хорошим советом.
В школе переменные величины мы привыкли обозначать буквами (a, s, d ... ). Большинство языков программирования, в том числе и VB, позволяет обозначать переменные именами из многих букв. Вот два равносильных фрагмента программы:
a=3; | Summa=3; |
b=4+a; | ШУРА=4+Summa; |
Debug.WriteLine(a, b) | Debug.WriteLine(Summa, ШУРА) |
В том и другом случае будут напечатаны числа 3 и 7. Очевидно, компьютеру все равно, какими именами мы обозначаем переменные величины или другие элементы, в смысл имен он не вдумывается и не удивляется, что переменная Summa никакой суммой не является, а просто числом 3.
Примеры правильной записи имен:
a
S25
Oshibka
Polnaja_Summmma
_1
__________tri_plus_dva__a1b88qqQQQQQQQQQQQQ
_Это_не_имя_Уж_поверьте
Примеры неправильной записи имен:
polnaja summa | содержится символ (пробел), не являющийся буквой, цифрой или знаком подчеркивания |
начинается с цифры | |
8as | начинается с цифры |
Domby&Son | содержится символ & , не являющийся буквой, цифрой или знаком подчеркивания |
Это верное имя Да да да | содержится символ (пробел), не являющийся буквой, цифрой или знаком подчеркивания |
VB игнорирует в именах разницу между строчными и прописными буквами. Так, для него Summa и sUmmA – одно и то же имя. Но он присматривает за тем, чтобы в окне кода данное конкретное имя было написано всегда одинаково, а именно так, как объявлено (правда, я не уверен, что он так присматривает за всеми русскими буквами, во всяком случае Visual Basic 6.0 не всегда присматривал).
Ключевые слова. Ключевые слова (Keywords) – это служебные слова VB, которые он широко использует в тексте программы. Мы уже знакомы с некоторыми из них: Dim, Integer, Double, Sub и др. В нижеприведенной таблице перечислены все ключевые слова VB.
AddHandler | AddressOf | Alias | And |
AndAlso | Ansi | As | Assembly |
Auto | Boolean | ByRef | Byte |
ByVal | Call | Case | Catch |
CBool | CByte | CChar | CDate |
CDec | CDbl | Char | CInt |
Class | CLng | CObj | Const |
CShort | CSng | CStr | CType |
Date | Decimal | Declare | Default |
Delegate | Dim | DirectCast | Do |
Double | Each | Else | ElseIf |
End | Enum | Erase | Error |
Event | Exit | #ExternalSource | False |
Finally | For | Friend | Function |
Get | GetType | GoTo | Handles |
If | Implements | Imports | In |
Inherits | Integer | Interface | Is |
Let | Lib | Like | Long |
Loop | Me | Mod | Module |
MustInherit | MustOverride | MyBase | MyClass |
Namespace | New | Next | Not |
Nothing | NotInheritable | NotOverridable | Object |
On | Option | Optional | Or |
OrElse | Overloads | Overridable | Overrides |
ParamArray | Preserve | Private | Property |
Protected | Public | RaiseEvent | ReadOnly |
ReDim | #Region | REM | RemoveHandler |
Resume | Return | Select | Set |
Shadows | Shared | Short | Single |
Static | Step | Stop | String |
Structure | Sub | SyncLock | Then |
Throw | To | True | Try |
TypeOf | Unicode | Until | Variant |
When | While | With | WithEvents |
WriteOnly | Xor | #Const | #ExternalSource |
#If...Then...#Else | #Region | - | & |
&= | * | *= | / |
/= | \ | \= | ^ |
^= | + | += | = |
-= |
Очевидно, придуманные вами имена не должны совпадать с ключевыми словами VB, иначе возникнет путаница. VB старается присматривать за этим и может указать вам на ошибку, если вы случайно используете ключевое слово в качестве имени. Если вам все-таки необходимо это сделать, возьмите имя в квадратные скобки, например, так:
Dim [Sub] As Integer
[Sub] = 99
Я также не рекомендую использовать на первых порах в качестве имен для создаваемых вами переменных имена популярных объектов, их свойств, методов и др. Например, если вы назовете переменную именем Button1, BackColor или WriteLine, то VB, может, и не спутается, но спутаетесь вы.
Называем по-русски. Взгляните в текст любой программы. Он состоит в основном из ключевых слов на английском (на латинице) и имен. Причем и тех и других так много, что глаза разбегаются и непонятно, где ключевое слово, а где имя. А если это имя – то создано ли оно программистом или взято из библиотеки классов .NET Framework – сразу не поймешь. Нам, русскоязычным, здесь удобнее: мы можем имена давать на русском (на кириллице). Разница между английскими и русскими буквами сразу бросается в глаза и разбирать текст программы становится не в пример легче: все, что мы создали сами, названо по-русски, а все, что досталось от VB – по-английски. Я так и делаю.