Snippets

Обучение JavaScript 025. Operators, statements, expressions

Created by last modified
1
2
3
4
5
6
7
*.mp3
*.json
*.tgz
*.sh
*.mkv
*.lst

/*
 * Этот скринкаст, в отличие от предыдущих,
 * озаглавлен английскими словами - "Expressions, operators, statements". 
 * Дело в том, что в русскоязычных техничесих переводах
 * слова expression и statement иногда переводятся одним 
 * и тем же словом - "выражение", да и с понятием "оператор"
 * случается путаница. Поэтому нужно, прежде всего, 
 * определиться со значениями этих вжных терминов.
 * Этот скринкаст, с одной стороны, относится к базовой тематике
 * языка JavaScript, с другой - довольно труден для понимания, т.к.
 * содержит больше теории, чем наглядных примеров кода.
 */ 

'Hello, World!' // expression

  c++
// ^^ - operator

let somthing // statement

/*
 * Выражения (expressions) - фрагменты программы, в результате 
 * работы которых в памяти компьютера появляются новые данные.
 * Понять что такое expression проще всего на примерах.
 * Ниже приведены простейшие арифметические выражения.
 * Эти строки с технической точки зрения могут быть 
 * полноценными фрагментами программы и не вызовут ошибок, 
 * хотя и бесполезны на практике.
 */

10
0xFF
3.1415


1
2
3
4
5
6
7
/*
 * Примеры простых строковых выражений (expressions):
 */ 

'Hello, ';
"World!";

1
2
3
4
5
6
7
/*
 * Логические выражения (expressions):
 */ 

true;
false;

/*
 * Приведенные примеры - простейшие выражения (primary expressions) 
 * Они просто порождают в памяти компьютера некие данные.
 * Если не сохранить их в переменные,они сразу же 
 * после объявления будут уничтожены т.н. "сборщиком мусора".
 */

'Hello, World!'
123
true
sum          // Значение ранее объявленной переменной.
this         // Некий текущий объект.
[1, 2, 3]    // Массив.
{a: 1, b: 2} // Простой объект.
x=> x * x    // Функция.

/*
 * Выражения (expressions) могут получаться с использованием операторов:
 * арифметических, логических, строковых и т.п. Оператор - элементарное 
 * действие, меняющее данные. Они могут быть произведены как над 
 * одним фрагментом данных (операндом), так и над несколькими.
 * Операторы с одним операндом называются унарными, с двумя - бинарными
 * и т.д. В зависимости от участвующих и получаемых типов данных,
 * операторы могут быть арифметическими, строковыми, логическими и т.п.
 * Все перечисленные ниже примеры использования операторов 
 * являются выражениями (expressions), т.к. в результате 
 * в памяти компьютера порождаются новые данные.
 */ 

++111      // унарный оператор пре-инкремента (арифметический);
222--      // унарный оператор пост-декремента (арифметический);
111 + 222  // бинарный оператор сложения (арифметический);
!false     // унарный оператор отрицания (логический);
8 > 5      // бинарный оператор сравнения (логический);
x && y     // бинарный оператор "и" ("логическое умножение");
'Hello, ' + 'World!' // бинарный оператор сложения строк;
x = a < b ? y : z    // тернарный оператор.

/*
 * Среди выражений (expressions) выделяют левосторонние 
 * (их называют lvalues или left-hand-side). Они находятся
 * в выражениях слева от знака равенства и указывают на 
 * переменную, свойство объекта или ячейку массива, где следует
 * сохранить результат вычислений. Выражения с одиночным
 * знаком равенства называются выражением присваивания (assignment).
 * Следует помнить, что ключевые слова var, let, const 
 * не входят в состав выражений присваивания!
 */

   x = y + z                        
// ^ -------------------------------
   octopus.legsCount = 8          //
// ^^^^^^^^^^^^^^^^^ ---------------
   words[0] = 'Hello'             // левосторонние выражения
// ^^^^^^^^ ------------------------
let test = "What's up?"           //
//  ^^^^ ---------------------------

/*
 * Понятие statement можно перевести на русский язык 
 * как инструкция, хотя дословно этот термин означает 
 * "установление". "Statement" меняет "state",
 * т.е. состояние, структуру программы, в отличие от 
 * выражения (expression), которое влияет только на
 * уже имеющиеся данные, не создавая новых переменных, 
 * переходов, условий, циклов и т.п.
 * Одна из наиболее часто используемых - инструкция добавления 
 * переменных (декларирование, declaration statement):
 */ 

    let x, y, z   // инструкция декларирования;
    let total = 0
//      ^^^^^^^^^ - выражение присваивания (expression);
//  ^^^^^^^^^     - инструкция декларирования (statement).    

   const greet = message => console.log(message) 
// ^^^^^^^^^^^ - декларирование функции

   function greet(message){console.log(message)}
// ^^^^^^^^^^^^^^ - декларирование функции

/*
 * Как видно из предыдущего фрагмента, инструкции и выражения
 * могут быть совмещены. Такие комбинации так и называются - 
 * выражения-инструкции (expression statements).
 */

let a = 1     // так можно, т.к. инструкция декларирования
              // принимает данные от выражения присваивания;

let a = b     // так можно, если b определена где-то выше;

let a = let b // ошибка: декларирование не может получать
              // результат декларирования;

console.log(let b) // ошибка: функция может принимать в качестве
                   // аргументов выражения, но не инструкции.

/*
 * Условные переходы являются инструкциями
 * (conditional statements). К ним же принадлежат 
 * и фрагменты кода, выполняемые в зависимости 
 * от вычисляемого после if выражения. 
 * Примерно то же можно сказать о циклах (loop statements)
 * while, do/while, for, for/in/of.
 */

if (expression) statement 1
else statement 2

switch(expression){
    case expression:
        statement 1
    default:
        statement 2
}

while(expression) statement

for(statement; expression; expression) statement
/*
 * Отдельного рассмотрения с точки зрения принадлежности 
 * к выражениям (expressions) или инструкциям (statements)
 * заслуживают функции. С одной стороны, анонимные функции
 * могут использоваться "по месту" и являются выражениями.
 * С другой - при декларировании функций им могут быть 
 * присвоены имена. В этом случае их можно считать инструкциями.
 */

   (n => console.log(`The ${n}!`))(10) // Это выражение, т.н.
                                       // "самовызывающаяся функция",
                                       // Immediately Invoked Function 
                                       // Expression (IIFE). 
 
   const test = n => console.log(`The ${n}!`) 
// ^^^^^^^^^^    - Инструкция декларация (statement).

   function test(n){console.log(`The ${n}!`)} 
// ^^^^^^^^^^^^^ - Инструкция декларация (statement).

test(100) // Выражение (expression).

Expressions, operators и statements являются терминами затрудненными для понимания в русскоязычной среде, т.к. при их переводе часто возникает путаница. Например, предложенный здесь перевод statement как "инструкция" тоже неточен, т.к. под ним может подразумеваться широкий круг понятим мира IT. Можно предложить такую классификацию: expressios (выражения) - то, что порождает данные; operators (операторы) - элементарные действия над данными, такие, как сложение; statements (инструкции) - активные действия, влияющие на структуру и состояние программы (объявление переменных, условные переходы, циклы).

Comments (0)

HTTPS SSH

You can clone a snippet to your computer for local editing. Learn more.