Змінні та константи ruby

Змінні та константи- це ідентифікатори, призначені для отримання доступу до об'єктів. Об'єкти, що мають ідентифікатор, можуть бути використані повторно. Вираз, що зв'язує об'єкти та ідентифікатори, називається виразом присвоєння. Об'єкт, який посилається ідентифікатор, вважається його значенням.

Змінні та константи також дозволяють логічно розділити використовувані дані. Вони полегшують розуміння коду, дозволяючи перейти від термінів мови програмування до термінів завдання (проблемної області). Адекватність змінної (константи) багато в чому визначається її назвою. Назву змінної можна розглядати як високорівневий псевдокод, що характеризує її вміст.

Константи від змінних відрізняються лише сферою застосування. Константи використовуються для доступу до єдиного постійного об'єкта. На відміну від констант змінні мають на увазі багаторазове використання. Змінна може використовуватися як зміни поточного об'єкта, так зміни значення змінної. Насправді, в Ruby, перевизначення констант не призведе до завершення процесу виконання програми. Натомість інтерпретатор просто виведе звичайне попередження.

Ідентифікатори також можуть бути оголошені без висловлювання. Зустрівши відповідну лексему інтерпретатор створить необхідну змінну чи константу. У цьому випадку визначення виконується автоматично (значення стає nil). Автоматична ініціалізація запобігає помилкам, що виникають при використанні змінних, що не мають значення. Вона також дозволяє акцентувати увагу на об'єктах, а не змінних.

Ідентифікатор вважається оголошеним у будь-якому випадку, якщо код містить її лексему, навіть якщо фрагмент кодуне виконувався (значенням стає nil). Це відбувається через попередню обробку коду для віртуальної машини. Зазвичай якщо змінна оголошена, але при цьому ніде не використовується, то інтерпретатор видасть попередження. Щоб цього уникнути як невикористовувану змінну оголошують '_'. У другій версії Ruby будь-яка змінна, що починається з підкреслення, буде вважатися не використовуваною і попереджень не буде.

Область видимості:

Фрагмент коду, в якому ідентифікатор існує і може бути використаний. На основі областей видимості також здійснюється класифікація змінних. До базових областей видимості належать глобальна та локальні області. Глобальна область видимості поширюється весь код. Глобальні змінні та константи існують у будь-якому місці коду (після їх ініціалізації). Локальна область видимості поширюється лише на явно обмежений фрагмент коду. Локальні змінні та константи існують лише в тій частині коду, в якій відбувалася їхня ініціалізація.

• Лексеми локальних змінних починаються з підкреслення або малої літери (прийнято використовувати тільки малі літери, розділяючи слова знаком підкреслення - зміїна_нотація). Використання неіснуючої локальної змінної вважається викликом методу;

• Лексеми констант починаються з великої літери (прийнято використовувати тільки великі літери, розділяючи слова знаком підкреслення - НОТАЦІЯ_ГРЕМУЧА_ЗМІЇ). Використання неіснуючої константи вважається винятком (пошук констант включає області видимості верхнього рівня). ООП вводить дві додаткові області видимості: область видимості класу і область видимості екземпляра класу. Так додається два види змінних.

• Лексема змінної класу починається з @@ (прийнятовикористовувати зміїну нотацію). Використання неіснуючої змінної класу вважається винятком.

Збір сміття:

У Ruby ресурси, використовувані програмою, керуються інтерпретатором. Це дозволяє уникати найпоширеніших проблем роботи з пам'яттю. У той самий час інтерпретатор розпізнає лише заздалегідь певні ситуації, що іноді призводить до досить неприємним результатам. Додаткова робота також збільшує час інтерпретації та виконання програм. Баланс між цими двома полюсами - важливе завдання для розробників інтерпретато- ра.

Для автоматичного керування пам'яттю реалізовано механізм, званий збиранням сміття. Під сміттям маються на увазі об'єкти, збережені в пам'яті, але при цьому не використовуються. Як тільки інтерпретатор розуміє, що об'єкт не пов'язаний з жодним ідентифікатором, він звільняє пам'ять, яку цей об'єкт займав (бо доступ до цього об'єкта більше неможливий). Це дозволяє видаляти одноразові об'єкти відразу після їх використання, а також зберігати синтаксичні структури на всьому протязі процесу виконання.