Читайте также: |
|
Передача параметров по значению - еще один способ повысить надежность программирования. Рассмотрим пример.
Вот процедура Квадр, вычисляющая периметр и площадь квадрата по его стороне:
Dim A As Integer 'сторона
Dim P As Integer 'периметр
Dim S As Integer 'площадь
Private Sub Квадр(Сторона As Integer, Периметр As Integer, Площадь As Integer)
Периметр = 4 * Сторона
Площадь = Сторона ^ 2
End Sub
Private Sub Command1_Click()
A = 10
Квадр A, P, S
Debug.Print "Сторона="; A; "Периметр="; P; "Площадь="; S
End Sub
Результат:
Сторона= 10 Периметр= 40 Площадь= 100
Здесь щелчком по кнопке вы приказываете компьютеру вычислить периметр и площадь квадрата со стороной 10. Компьютер, выполняя тело процедуры Квадр и присваивая значения переменным Периметр и Площадь, тем самым присваивает значения переменным P и S, то есть изменяет содержимое ячеек памяти, отведенных под эти переменные. Говорят, что в этом случае между вызывающей и вызываемой процедурами осуществляется передача параметров по ссылке. Чтобы подчеркнуть, что вы используете именно этот способ передачи параметров, вы можете записать заголовок процедуры так:
Private Sub Квадр (Сторона As Integer, ByRef Периметр As Integer, ByRef Площадь As Integer)
хоть это и излишне.
При этом способе вызываемая процедура получает полный контроль над переменными A, P и S вызывающей процедуры и может присваивать им все, что хочет. Это удобно, но небезопасно. Ведь в этом случае переменные становятся беззащитными против ошибок в вызываемой процедуре. Так, программист может случайно, для каких-то других нужд, включить в процедуру какой-нибудь оператор, меняющий значение параметра Сторона, например, Сторона=1. Предположим, в этом случае процедура примет такой вид:
Private Sub Квадр(Сторона As Integer, Периметр As Integer, Площадь As Integer)
Периметр = 4 * Сторона
Площадь = Сторона ^ 2
Сторона = 1
End Sub
Тогда результаты будут напечатаны неверно:
Сторона= 1 Периметр= 40 Площадь= 100
Чтобы обезопасить себя от такой ситуации, вы можете явно приказать Бэйсику, чтобы он не смел трогать такую-то переменную, отдающую свое значение параметру. Для этого достаточно заголовок процедуры написать так:
Private Sub Квадр (ByVal Сторона As Integer, Периметр As Integer, Площадь As Integer)
Теперь, что бы ни произошло с параметром Сторона, значение переменной A меняться не будет. Убедитесь, что теперь снова все в порядке. Такой способ передачи параметров называется передачей параметров по значению.
Не переборщите с надежностью. Так, глупо было бы писать
Private Sub Квадр (ByVal Сторона As Integer, ByVal Периметр As Integer, ByVal Площадь As Integer)
так как результат в этом случае был бы такой:
Сторона= 10 Периметр= 0 Площадь= 0
Задание 130: На двух метеостанциях (A и B) в течение года измерялась температура. Соответственно созданы два массива чисел длиной 365. Затем оказалось, что на обеих станциях термометры были испорчены: на станции A термометр все время показывал температуру на 2 градуса выше настоящей, а на станции B - на 3 градуса ниже. Написать процедуру с двумя параметрами, которая исправляет один исходный массив и с ее помощью исправить оба массива. Один параметр - величина поправки, другой - массив температур.
Дата добавления: 2015-11-16; просмотров: 50 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Локальные переменные | | | Индукция. Рекурсия |