# Синтаксис языка

## 1. Введение <a href="#vvedenie" id="vvedenie"></a>

При написании кода, важно не просто знать какой символ или конструкцию можно использовать, но в первую очередь необходимо понимать терминологию и составляющие исходного кода. В этой секции нам не важно понимание как что работает, мы лишь познакомимся с терминологией и синтаксисом языка.

## 2. Инструкция <a href="#instrukciya" id="instrukciya"></a>

**Инструкция (statement)** — это связанный набор слов и символов из синтаксиса языка, которые объединяются, чтобы выразить одну идею, одну инструкцию для машинa = b \* 2;

<pre class="language-javascript" data-line-numbers data-full-width="false"><code class="lang-javascript"><strong>a = b * 2;
</strong></code></pre>

Это пример инструкции. В JavaScript можно различить инструкцию по точке с запятой в конце. Точку с запятой в данном случае можно сравнить с точкой в конце предложения вашего родного языка, она символизирует о конце предложения.

{% hint style="success" %}
<mark style="background-color:green;">Завершение инструкции точкой с запятой не требуется, однако рекомендуется всегда ее ставить. Это простое правило сделает код более понятным и поможет избежать многих ошибок.</mark>
{% endhint %}

* `a` и `b` — переменные (как в алгебраическом уравнении), это хранилища данных, которые использует программа. Переменная состоит из идентификатора (имени) и связанного с ним значения.
* `2` — просто число. Это называется значением литерала (literal value), так как оно не хранится в переменной.
* `=` и `*` — операторы, производят действия над значениями и переменными.

Представим, что переменная `b` уже хранит число `10`. Тогда эта инструкция говорит машине:

* Пойди найди переменную с идентификатором `b` и спроси, какое у нее сейчас значение.
* Подставь значение переменной `b` в утверждение на место `b`
* Умножь `10` на `2`
* После чего, запиши результат вычисления выражения правой части в переменную `a`.

\
3\. Выражение <a href="#vyrazhenie" id="vyrazhenie"></a>
--------------------------------------------------------

Инструкции состоят из частей, как в любом языке предложения состоят из фраз и эти фразы называются выражениями.

**Выражение (expression)** — ссылка на переменную или значение, или на набор переменных и значений в сочетании с операторами.

```javascript
[ [a] = [ [b] * [2] ] ]
```

Инструкция из примера выше содержит 5 выражений, для визуализации выделены квадратными скобками (_это не синтаксис языка_):

* `[2]` — выражение значения литерала.
* `[b]`и`[a]` — выражения переменной, означают необходимость подставить значение переменной, но только в том случае, если переменная стоит в правой части выражения присваивания.
* `[b * 2]` — арифметическое выражение умножения.
* `[a = b * 2]` — выражение присваивания. В нашем случае указывает на необходимость вычисления правой части выражения и присваивания результата переменной `a` в левой части выражения.

Так же есть выражения вызова, выражения сравнения и т. д. Мы не будем сейчас рассматривать их все, нам важно понимать из каких частей состоит исходный код и как правильно его читать.

## 4. Интерфейс <a href="#interfeis" id="interfeis"></a>

Когда мы подходим к автомату с кофе или садимся за руль автомобиля, существует некоторый набор элементов управления, с которым можно взаимодействовать. В программировании это называется интерфейс.

**Интерфейс** — это набор свойств и методов сущности, доступных для использования.

Сейчас важен именно синтаксис и терминология, так как они идентичны для любых данных.

### 4.1. Свойство <a href="#svoistvo" id="svoistvo"></a>

У нас с вами есть свойства: рост, вес, цвет глаз, то есть какие-то описательные характеристики. Так же и у данных есть свойства, к примеру у строки есть свойство ее длины. Синтаксис обращения к свойству очень простой.

```javascript
сущность.имя_свойства
```

```javascript
'JavaScript is awesome'.length;
```

### 4.2. Метод <a href="#metod" id="metod"></a>

Метод - это вызов действия, например `присесть` или `плавать`, то есть какая-то активная операция. Так же и у данных есть свои методы, например можно добавить или удалить элементы из коллекции, перевести строку в разный регистр и т. д. Синтаксис вызова метода очень похож на обращение к свойству, но в конце добавляется пара скобок.

```
сущность.имя_метода()
```

```javascript
'JavaScript is awesome'.toUpperCase();
```

\
5\. Строгий режим <a href="#strogii-rezhim" id="strogii-rezhim"></a>
--------------------------------------------------------------------

**Строгий режим** — новая возможность в спецификации ECMAScript 5, которая позволяет переводить скрипт в режим полного соответствия современному стандарту. Это предотвращает определенные ошибки, такие как использование небезопасных конструкций.

Для того чтобы перевести скрипт в строгий режим, достаточно указать директиву в начале js-файла. Всегда пишите код в строгом режиме.

```javascript
'use strict';
// дальше идет весь код файла
```

[Strict mode на MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode)
