Aa Іменування змінних
Правила іменування — частина мови, а не конвенція. Компілятор перевіряє на етапі парсингу.
Прості змінні — /intbyte, /int2, /int4 та їх знакові варіанти.
| Правило | Валідно | Невалідно |
|---|---|---|
Тільки латинські літери та _ |
val_name | val1, ім'я, val#x |
| Починається з літери | counter, my_val | 1name, _name* |
| Закінчується літерою | my_val, result | val_, val1 |
_ тільки всередині |
my_val_x | _val†, val_† |
| Цифри — заборонені | counter, result | val1, x2, counter3 |
| Максимум 24 символи | my_very_long_name_ok | abcdefghijklmnopqrstuvwxy (25) |
* Підкреслення на початку — синтаксис імпорту, не загальна назва. † Підкреслення в кінці — синтаксис імпорту.
app (/intbyte, /var) counter = 0 app (/intbyte, /var) my_val = 42 app (/intbyte, /var) result_x = 0 app (/intbyte, /const) max_val = 255
app (/intbyte, /var) val1 = 0 ! E207: цифри заборонені app (/intbyte, /var) _val_ = 0 ! E207: _ з обох боків app (/intbyte, /var) my val = 0 ! E207: пробіл недопустимий
app (/intbyte, /var) abcdefghijklmnopqrstuvwxy = 0 ! ↑ 25 символів — E208
Terra — case-insensitive. Лексер нормалізує всі ідентифікатори до нижнього регістру при читанні. Це не конвенція — це гарантія компілятора.
app (/intbyte, /var) Alisa = 42 ::start:: /display(Alisa) ! ✓ → 42 /display(alisa) ! ✓ → 42 (та сама змінна) /display(ALISA) ! ✓ → 42 (та сама змінна) /display(aLiSa) ! ✓ → 42 (та сама змінна)
alisa. Регістр — виключно для читабельності коду програміста.
app (/intbyte, /var) Alisa = 42 app (/intbyte, /var) ALISA = 10 ! E201: змінна 'alisa' вже оголошена
Для складних типів — цифри в імені дозволені. Решта правил — ті самі.
app (/shelf, /intbyte, /var) shelf1 = (1, 2, 3) app (/shelf, /intbyte, /var) my_shelf2 = (4, 5, 6) app (/shelf, /intbyte, /var) data3 = (7, 8, 9)
app (/intbyte, /var) counter1 = 0 ! E207: цифри в іменах дозволені тільки для shelf, agent, raster та інших складних типів
Підкреслення на початку або в кінці — це адреса в ієрархії пакетів. Кількість підкреслень = кількість рівнів.
app (/intbyte, /var) _Alisa_ = 0 ! E207: напрямок імпорту може бути тільки один — вгору або вниз
app (/intbyte, /var) _____deep = 1 ! компілюється, але...
__ (подвійне підкреслення на початку) зарезервовано для системних ідентифікаторів: __exim__, __start__, __enter, __out, __type.
| Код | Умова | Приклад |
|---|---|---|
| E207 | Цифра в імені простої змінної | val1, counter2 |
| E207 | _ одночасно на початку і в кінці | _val_, __x__ |
| E207 | Недопустимий символ | val#x, my-val |
| E207 | Починається не з літери | 1name |
| E208 | Більше 24 символів | abcdefghijklmnopqrstuvwxy |
| W150 | 5+ підкреслень на початку або в кінці | _____val, val_____ |
W150 — не зупиняє компіляцію. Якщо ти пишеш Alisa______ — шість рівнів вниз — архітектура сама говорить що щось пішло не так.