Byval і byref

Byval і Byref

Сказати по честі, способи передачі параметрів процедурам або функцій, мабуть треба було висвітлити в темі про функції. Але мені хотілося, щоб ви спочатку зрозуміли що таке покажчики.

Способи передачі параметрів в функції або процедури:

  1. Byval - передається саме значення
  2. Byref - передається покажчик на це значення.

Коли ми пишемо наприклад так:

Насправді це скорочений тип запису:

При таких записах, точніше так передаючи параметр, в нашій функції просто створюється нова змінна і їй присвоюється значення. яке передається при виклику функції.

Два приклади (по суті однакові програми):

Скорочена запис без Byval:


Примітка: Для рядків використовується зворотне правило. Тобто за замовчуванням без вказівки способу передачі параметрів, рядки передаються по Byref.


Помітили, що результат відрізняється від результату прикладів з Byval. Все правильно: Byval працює з копією значення змінної, а Byref до цього значенням змінної.

Якщо не використовувати ключове слово Byref. то нам доведеться писати приблизно таке:


Погодьтеся, що для виконання цього завдання, зручніше використовувати ключове слово Byref.

І на додаток до статті про функції:

У процедури або функції параметри можна передавати за замовчуванням. Тут ви повинні згадати статті про структури. Принцип схожий.


Ви напевно помітили, що я до двох з трьох параметрів приписав значення 10 і 15. Це значення за замовчуванням і параметри a і з уже вказувати не обов'язково. Якщо вкажіть значення в параметрах при виклику, тоді процедура візьме значення, зазначені вами. А якщо не вкажете, то візьме значення за замовчуванням. Дивіться на виклик процедури. Перший раз викликаючи процедуру, ми передали їй всі параметри і в результаті змінна a в процедурі при додаванні 1 + 1 стала дорівнює 2. При другому виклик, ми вказали лише обов'язковий параметр b і значення змінної a стало дорівнює 10 + 1 = 11.
Зверніть увагу на синтаксис виклику з параметрами за замовчуванням. Якщо опускаються параметри за замовчуванням йдуть попереду. то замість них просто ставиться кома. Якщо ж позаду, то взагалі нічого писати не потрібно.
Повивчати цей приклад, викликаючи різними способами.
Мені хотілося б додати те, що я упустив в минулій статті про функції. В тій статті я заїкнувся про те, що можна повертати значення з функції трьома різними способами, але забув розповісти чим вони відрізняються.

  1. Return значення (повертає значення відразу виходячи їх функції)
  2. Function = значення (присвоює результат функції, але не виходить з функції до тих пір, поки не досягнуть її кінець або не зустрів оператор Return)
  3. Ім'я функції = значення (теж що і другий пункт)


Зверніть увагу. При декларації береться перший рядок процедури і попереду додається команда Declare. Так ми даємо компілятору знати. що існує така процедура і ми будемо її використовувати з нашого основного коду, або з інших модульних файлів. Тепер ми можемо вгорі писати код і викликати функції або процедури знаходяться внизу. Спробуйте це зробити без декларації.
У наступній статті ми нарешті навчимося використовувати функції та процедури, написані іншими людьми. Всього найкращого!

Byval і byref