На цій сторінці
Statement, expression, operator — що є що
September 2, 2021 — 🍪🍪🍪🍪 2 хвилини чтиваДекілька тижнів тому, під час перекладу різних статей з MDN, я зіткнувся з певною плутаниною, яка існує навколо цих понять. І справді, навіть в англомовному світі не так просто знайти чітке розмежування між ними. Що вже говорити про людей-практиків, як я, котрих в першу чергу цікавить розв'язання проблеми зараз, а не нюанси термінології.
Statement vs expression
Отже, statement
інколи перекладають як вираз. Це може працювати, і скоріш за усе, у розмові вас зрозуміють. Проблема полягає в тому, що expression
— це також вираз. І expression
значно краще підходить до виразу, ніж statement
.
У вільній формі термін statement
пояснюється як певна операція, яка складає стрічку коду, або її частину. Тобто це щось трішки більше за ключове слово чи літерал, але менше за функцію. Але ж те ж саме можна сказати й про expression
?
Річ у тім, що expression
зазвичай асоціюється з певним результатом обчислень. Певен, хто мав справу з лекціями з математики (з того чи іншого боку викладацького стола) — може пригадати такі фрази, як от "вираз в дужках", або "результат виразу". Це все звідти, і це все expression
.
А ось statement
означає якусь дію, те, що інколи іще називають побічним ефектом. І найближчий аналог цього терміну з української — це інструкція. Так, цей термін трохи перетинається з іншими галузями, зокрема з інструкціями процесора — CPU instructions. Але навіть з попри це воно відчувається достатньо природно.
Що це все означає на практиці? Погляньмо на такі приклади (JS):
// Вираз
2+3
// Інструкція
with
// Умовна інструкція if, а в дужках — вираз
if (expression) {}
// Виклик функції — це також інструкція. Аргументи функції — вираз
console.log(...)
// Вираз, що скаладається з інструкції виклику функції, до якої передається вираз 10
Math.log(10)
Operator
А де ж тут оператор? Його інколи плутають зі схожим терміном ключове слово. І, хоча якась частина ключових слів справді вважається операторами, ці поняття не тотожні.
Оператор — це складова частина expression
, частинка виразу, яка щось робить з операндами, з метою обрахувати якийсь результат. Тобто:
// Унарний оператор інкременту
++
// Бінарний оператор додавання (чи конкатенації)
+
// Оператор, який також є ключовим словом
typeof
// Вираз, який складається з оператора і операнда
typeof undefined
// Інструкція, яка повертає значення виразу
return typeof undefined
Висновки
По-перше, expression
— це вираз. По-друге, statement
— це, в більшості випадків, інструкція. А з оператором і так все ясно.
Ось, в принципі, і все. Питання термінології дуже часто лишається трохи осторонь. Якщо якогось слова достатньо для того, щоб порозумітися зі співрозмовником — годі шукати більшого.
Але акценти істотно змінюються, коли ми приходимо до питання документації. Особливо якщо ця документація створена в першу чергу для новачків, яким іще потрібно поставити термінологію.
Та й, зрештою, інколи це просто цікаво!
Посилання
- Дискусія під запитанням на stackOverflow
- Розмаїття перекладів у словниках
- Вирази й оператори: стаття на MDN