0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<h2>Транскрипт урока</h2>
1
<h2>Транскрипт урока</h2>
2
<p>Взгляните на эту простую строчку кода:</p>
2
<p>Взгляните на эту простую строчку кода:</p>
3
<p>Вы точно знаете, что в ней происходит, верно? Создадим новую константу x, зададим ей значение 5. Ничего особенного тут нет.</p>
3
<p>Вы точно знаете, что в ней происходит, верно? Создадим новую константу x, зададим ей значение 5. Ничего особенного тут нет.</p>
4
<p>Вот другая строчка кода:</p>
4
<p>Вот другая строчка кода:</p>
5
<p>Создадим новую константу y, зададим ей то значение, которое возвращает функция getAnswer. Теперь представьте, что getAnswer - это на самом деле невероятно сложная функция с миллионом строчек кода и потребуется 12 лет для её вычисления.</p>
5
<p>Создадим новую константу y, зададим ей то значение, которое возвращает функция getAnswer. Теперь представьте, что getAnswer - это на самом деле невероятно сложная функция с миллионом строчек кода и потребуется 12 лет для её вычисления.</p>
6
<p>Насколько отличаются эти строчки? Оказывается, в информатике более важный и полезный вопрос: "насколько они схожи?".</p>
6
<p>Насколько отличаются эти строчки? Оказывается, в информатике более важный и полезный вопрос: "насколько они схожи?".</p>
7
<p>И ответ, конечно - "всё относительно".</p>
7
<p>И ответ, конечно - "всё относительно".</p>
8
<p>Если вы рассуждаете о том, что действительно, буквально, происходит - они вообще не похожи друг на друга. Одна устанавливает числовое значение, другая вызывает какую-то функцию. А мы уже хорошо понимаем, что это разные вещи. Мы знакомы с функциями, аргументами и всем, что связано с функциями.</p>
8
<p>Если вы рассуждаете о том, что действительно, буквально, происходит - они вообще не похожи друг на друга. Одна устанавливает числовое значение, другая вызывает какую-то функцию. А мы уже хорошо понимаем, что это разные вещи. Мы знакомы с функциями, аргументами и всем, что связано с функциями.</p>
9
<p>Но иногда полезно оперировать другими понятиями, на другом уровне. Конечно, бегать и управлять самолётом - это очень разные виды активности, но на определённом уровне они подобны - и та и другая подразумевают передвижение из одной точки в другую.</p>
9
<p>Но иногда полезно оперировать другими понятиями, на другом уровне. Конечно, бегать и управлять самолётом - это очень разные виды активности, но на определённом уровне они подобны - и та и другая подразумевают передвижение из одной точки в другую.</p>
10
<p>Эти две строчки подобны, потому что справа от знака равно в обоих случаях находится выражение. Выражение - это фрагмент кода, который превращается в значение. Другими словами - становится значением. Да, знаю, 5 - это уже значение, но для интерпретатора JavaScript это выражение, которое превращается в значение 5. Другое выражение, которое превращается в значение 5 - это, например, 2 + 3.</p>
10
<p>Эти две строчки подобны, потому что справа от знака равно в обоих случаях находится выражение. Выражение - это фрагмент кода, который превращается в значение. Другими словами - становится значением. Да, знаю, 5 - это уже значение, но для интерпретатора JavaScript это выражение, которое превращается в значение 5. Другое выражение, которое превращается в значение 5 - это, например, 2 + 3.</p>
11
<p>Вызов функции getAnswer() - это тоже выражение, потому что функция что-то возвращает. Этот вызов будет заменён на значение, которое она возвращает. Другими словами, вызов функции превратится в значение, а поэтому он является выражением.</p>
11
<p>Вызов функции getAnswer() - это тоже выражение, потому что функция что-то возвращает. Этот вызов будет заменён на значение, которое она возвращает. Другими словами, вызов функции превратится в значение, а поэтому он является выражением.</p>
12
<p>Не всё в коде становится значением. Так что не всё в коде - это выражение, хотя большая часть его - именно выражения.</p>
12
<p>Не всё в коде становится значением. Так что не всё в коде - это выражение, хотя большая часть его - именно выражения.</p>
13
<p>JavaScript различает выражения и инструкции. Инструкция - это команда, действие. Помните условие с if, циклы с while и for - всё это - инструкции, потому что они только производят и контролируют действия, но не становятся значениями.</p>
13
<p>JavaScript различает выражения и инструкции. Инструкция - это команда, действие. Помните условие с if, циклы с while и for - всё это - инструкции, потому что они только производят и контролируют действия, но не становятся значениями.</p>
14
<p>Это что, какие-то мутные технические термины из учебников? Может так показаться, но в реальности очень важно понимать и видеть разницу между выражениями и инструкциями.</p>
14
<p>Это что, какие-то мутные технические термины из учебников? Может так показаться, но в реальности очень важно понимать и видеть разницу между выражениями и инструкциями.</p>
15
<p>Это помогает правильно понимать процесс вычисления и выполнения программы. Посмотрите на пример:</p>
15
<p>Это помогает правильно понимать процесс вычисления и выполнения программы. Посмотрите на пример:</p>
16
<p>Это выражение состоит из нескольких подвыражений.</p>
16
<p>Это выражение состоит из нескольких подвыражений.</p>
17
<p>Первое - 12 - выражается в 12. Следующее состоит из множества подвыражений:</p>
17
<p>Первое - 12 - выражается в 12. Следующее состоит из множества подвыражений:</p>
18
<ul><li>7 выражается в 7</li>
18
<ul><li>7 выражается в 7</li>
19
<li>5 выражается в 5</li>
19
<li>5 выражается в 5</li>
20
<li>7 + 5 выражается в 12</li>
20
<li>7 + 5 выражается в 12</li>
21
<li>square(12) выражается в 144</li>
21
<li>square(12) выражается в 144</li>
22
</ul><p>К этому моменту в процессе JavaScript видит такую картинку:</p>
22
</ul><p>К этому моменту в процессе JavaScript видит такую картинку:</p>
23
<p>Это еще не конец, остались необработанные выражения. Это будет продолжаться пока всё выражение не превратится в единое значение.</p>
23
<p>Это еще не конец, остались необработанные выражения. Это будет продолжаться пока всё выражение не превратится в единое значение.</p>
24
<p>square(square(2)) решается таким способом:</p>
24
<p>square(square(2)) решается таким способом:</p>
25
<ul><li>2 выражается в 2</li>
25
<ul><li>2 выражается в 2</li>
26
<li>square(2) выражается в 4</li>
26
<li>square(2) выражается в 4</li>
27
<li>square(4) выражается в 16</li>
27
<li>square(4) выражается в 16</li>
28
</ul><p>Давайте заглянем в мозг интерпретатора снова:</p>
28
</ul><p>Давайте заглянем в мозг интерпретатора снова:</p>
29
<p>Все внутренние выражения решены, так что теперь сложение происходит в два шага:</p>
29
<p>Все внутренние выражения решены, так что теперь сложение происходит в два шага:</p>
30
<p>Теперь решено всё выражение.</p>
30
<p>Теперь решено всё выражение.</p>
31
<p>Кстати, оператор сложения имеет левую ассоциативность. Это значит, что в случае с составными сложениями процесс пойдёт слева направо, вот почему мы вначале видим 12 + 144, а потом 156 + 16.</p>
31
<p>Кстати, оператор сложения имеет левую ассоциативность. Это значит, что в случае с составными сложениями процесс пойдёт слева направо, вот почему мы вначале видим 12 + 144, а потом 156 + 16.</p>
32
<p>Вы не можете ставить инструкции там, где должны быть выражения. Например, передача инструкции const как аргумента функции приведёт к ошибке. Как и попытка присвоить инструкцию if переменной. Подобное просто не имеет смысла в этом языке, потому что в таких случаях предполагаются только выражения:</p>
32
<p>Вы не можете ставить инструкции там, где должны быть выражения. Например, передача инструкции const как аргумента функции приведёт к ошибке. Как и попытка присвоить инструкцию if переменной. Подобное просто не имеет смысла в этом языке, потому что в таких случаях предполагаются только выражения:</p>
33
<p>Зная такие вещи, вы скоро обретёте две важные суперспособности:</p>
33
<p>Зная такие вещи, вы скоро обретёте две важные суперспособности:</p>
34
<ol><li>Вы будете способны замечать, что большая часть кода, даже та функция из миллиона строк на двенадцать лет, это просто горсть безделушек, которые становятся значениями.</li>
34
<ol><li>Вы будете способны замечать, что большая часть кода, даже та функция из миллиона строк на двенадцать лет, это просто горсть безделушек, которые становятся значениями.</li>
35
<li>Вы будете способны замечать, что иногда код просто не будет работать, потому что он не имеет смысла в контексте выражений и инструкций.</li>
35
<li>Вы будете способны замечать, что иногда код просто не будет работать, потому что он не имеет смысла в контексте выражений и инструкций.</li>
36
</ol><h2>Выводы</h2>
36
</ol><h2>Выводы</h2>
37
<p>Выражением (expression) является любой корректный блок кода, который возвращает значение.</p>
37
<p>Выражением (expression) является любой корректный блок кода, который возвращает значение.</p>
38
<p>Ниже 5 это expression, оно выражается в значение 5:</p>
38
<p>Ниже 5 это expression, оно выражается в значение 5:</p>
39
<p>Ниже getAnswer() - это вызов функции - другое выражение. Этот вызов возвращает значение, то есть этот вызов функции выразится в значение:</p>
39
<p>Ниже getAnswer() - это вызов функции - другое выражение. Этот вызов возвращает значение, то есть этот вызов функции выразится в значение:</p>
40
<p>Ниже пример выражения, которое состоит из нескольких<em>подвыражений</em>, и пошаговый процесс превращения каждого выражения по порядку, пока целое выражение не превратится в одно значение:</p>
40
<p>Ниже пример выражения, которое состоит из нескольких<em>подвыражений</em>, и пошаговый процесс превращения каждого выражения по порядку, пока целое выражение не превратится в одно значение:</p>
41
<p>JavaScript различает<strong>выражения</strong><strong>(expressions)</strong>и<strong>инструкции</strong><strong>(statements)</strong>. Инструкция - это (грубо говоря) команда, действие.</p>
41
<p>JavaScript различает<strong>выражения</strong><strong>(expressions)</strong>и<strong>инструкции</strong><strong>(statements)</strong>. Инструкция - это (грубо говоря) команда, действие.</p>
42
<p>if, while, for, const - примеры инструкций. Они производят или контролируют действия, но не превращаются в значения.</p>
42
<p>if, while, for, const - примеры инструкций. Они производят или контролируют действия, но не превращаются в значения.</p>