HTML Diff
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>