Byval і byref
Byval і Byref
Сказати по честі, способи передачі параметрів процедурам або функцій, мабуть треба було висвітлити в темі про функції. Але мені хотілося, щоб ви спочатку зрозуміли що таке покажчики.
Способи передачі параметрів в функції або процедури:
- Byval - передається саме значення
- Byref - передається покажчик на це значення.
Коли ми пишемо наприклад так:
Насправді це скорочений тип запису:
При таких записах, точніше так передаючи параметр, в нашій функції просто створюється нова змінна і їй присвоюється значення. яке передається при виклику функції.
Два приклади (по суті однакові програми):
Скорочена запис без Byval:
Примітка: Для рядків використовується зворотне правило. Тобто за замовчуванням без вказівки способу передачі параметрів, рядки передаються по Byref.
Помітили, що результат відрізняється від результату прикладів з Byval. Все правильно: Byval працює з копією значення змінної, а Byref до цього значенням змінної.
Якщо не використовувати ключове слово Byref. то нам доведеться писати приблизно таке:
Погодьтеся, що для виконання цього завдання, зручніше використовувати ключове слово Byref.
І на додаток до статті про функції:
У процедури або функції параметри можна передавати за замовчуванням. Тут ви повинні згадати статті про структури. Принцип схожий.
Ви напевно помітили, що я до двох з трьох параметрів приписав значення 10 і 15. Це значення за замовчуванням і параметри a і з уже вказувати не обов'язково. Якщо вкажіть значення в параметрах при виклику, тоді процедура візьме значення, зазначені вами. А якщо не вкажете, то візьме значення за замовчуванням. Дивіться на виклик процедури. Перший раз викликаючи процедуру, ми передали їй всі параметри і в результаті змінна a в процедурі при додаванні 1 + 1 стала дорівнює 2. При другому виклик, ми вказали лише обов'язковий параметр b і значення змінної a стало дорівнює 10 + 1 = 11.
Зверніть увагу на синтаксис виклику з параметрами за замовчуванням. Якщо опускаються параметри за замовчуванням йдуть попереду. то замість них просто ставиться кома. Якщо ж позаду, то взагалі нічого писати не потрібно.
Повивчати цей приклад, викликаючи різними способами.
Мені хотілося б додати те, що я упустив в минулій статті про функції. В тій статті я заїкнувся про те, що можна повертати значення з функції трьома різними способами, але забув розповісти чим вони відрізняються.
- Return значення (повертає значення відразу виходячи їх функції)
- Function = значення (присвоює результат функції, але не виходить з функції до тих пір, поки не досягнуть її кінець або не зустрів оператор Return)
- Ім'я функції = значення (теж що і другий пункт)
Зверніть увагу. При декларації береться перший рядок процедури і попереду додається команда Declare. Так ми даємо компілятору знати. що існує така процедура і ми будемо її використовувати з нашого основного коду, або з інших модульних файлів. Тепер ми можемо вгорі писати код і викликати функції або процедури знаходяться внизу. Спробуйте це зробити без декларації.
У наступній статті ми нарешті навчимося використовувати функції та процедури, написані іншими людьми. Всього найкращого!
