> For the complete documentation index, see [llms.txt](https://shpp.gitbook.io/zero/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://shpp.gitbook.io/zero/tutorials/commands.md).

# Команди

Відкрийте [Ш++ IDE](https://js.ide.shpp.me) і введіть команду:

```javascript
console.log("привіт")
```

Поекспериментуйте: спробуйте зробити так, щоб ця команда порахувала вам суму чисел, дробові числа і т.і.

Типова команда-функція виглядає як:

```javascript
назваКоманди(тут-пишуться-параметри-команди)

назваКоманди(якщо-параметрів-декілька, то-пишемо-їх, через-кому)
```

Після команди іноді ставлять крапку з комою — щоб підкреслити, що тут команда закінчується.

```javascript
console.log("привіт");
```

Якщо нам не треба передавати параметри до команди — дужки все одно потрібно писати. Наприклад:

```javascript
console.log();
```

## Коментарі

Після двох слешів `//` можна писати свої примітки та коментарі прямо в коді. Докладніше можна почитати [тут](/zero/tutorials/comments.md).

```javascript
console.log("цей текст виведеться на консоль"); // а цей текст комп'ютер не сприймає
```

## Змінні

**Змінні** — це "контейнери", в яких зберігаються значення. Вони потрібні, щоб програма пам'ятала різні дані та могла з ними працювати.

{% hint style="info" %}
**UA**: Змінна

**RU**: Переменная

**EN**: Variable
{% endhint %}

![](/files/GsZH7LNdbC1HVzpVJVEt)

### Оголошення змінної

Змінна оголошується (створюється) ключовим словом `let`. Після нього пишемо те ім'я, яким треба назвати змінну. Наприклад, створимо змінну з іменем `myVariable`:

```javascript
let myVariable
```

Не можна створювати кілька змінних з однаковими іменами. Якщо побачите помилку типу `"елемент вже оголошений"` — ви десь створили дві (або більше) змінних з однаковими іменами.

#### var

Іноді ви можете побачити змінні, створені через ключове слово `var` замість `let.` `var` — застаріла форма. У них є і технічна різниця, але ці деталі поки не важливі. Втім, якщо цікаво — пошукайте в [інтернеті](https://google.com?q=javascript+var). Поки ж запам'ятайте одне: до кінця курсу оголошуйте змінні лише через `let` , `var` не використовуйте.

### Запис даних до змінної

Після оголошення до змінної можна записати дані:

```javascript
let message;
message = "Hello"; // наприклад, можемо зберегти в змінну частину тексту (рядок)
```

Комп'ютер запам'ятає ці дані. Потім у нього можна буде їх дізнатися, звертаючись до змінної за ім'ям:

```javascript
let message;
message = "Hello";

console.log(message); // виведе вміст змінної в консоль
```

**Важливо: комп'ютер не зможе запам'ятати дані до змінної, якої ще не існує**. Перед тим, як записати дані до змінної, цю змінну треба створити (оголосити) через `let`.

Для компактності варто оголошувати змінну та записувати до неї дані в одному рядку:

```javascript
let message = "Hello";
```

### Трохи аналогій

Простіше за все зрозуміти змінну, як «коробку» для даних з унікальним ім'ям.

![message — коробка, в якій лежить "Hello!"](/files/-MV1C0P75szv4nIHr5rn)

До коробки можна покласти будь-яке значення, а пізніше — змінити його. І робити це можна скільки завгодно разів:

```javascript
let message; // створили message
message = "Hello!"; // поклали до неї "Hello!"
message = "World!"; // викинули "Hello!", замінили на значення "World!"
console.log(message);
```

![Нове значення видаляє попереднє](/files/-MV1Bw0C0P8Hdnm94XZc)

У змінні можна класти не лише "голі" значення, а взагалі будь-що. Наприклад, інші змінні.

Якщо покласти змінну А до змінної Б, то в Б скопіюється те, що знаходиться в А.

```javascript
let hello = "Hello world!";
let message = hello;
 

console.log(hello); // Hello world!
console.log(message); // Hello world!
```

### Ще трохи аналогій

Створюємо порожню коробку (змінну).&#x20;

```javascript
let box;
```

![](/files/n8oT4W5qEFD3wIpSmX4q)

... та кладемо до коробки кота

```javascript
box = "Сat";
```

![](/files/Gn9r2oHfF5uZgt5kerow)

Або від самого початку можемо створити коробку одразу з котом всередині:

```javascript
let box = "Cat";
```

Також у будь-який момент можна змінити вміст коробки. Наприклад, покласти туди кролика (коли кладемо кролика, то перед цим кота з коробки автоматично викине).

```javascript
box = "Rabbit";
```

![](/files/hRO3M1H199j8SdZFImGN)

### **Висновки**

* Створювати змінні потрібно, щоб **зарезервувати** для себе шматочок пам'яті комп'ютера *(як номер у готелі)*.
* Коли у вас є дані, ви кладете їх до змінної *(заселяєтесь до номеру)*.
* Коли змінюєте дані — ви видаляєте зі змінної старе значення та зберігаєте нове *(перш ніж заселити до номеру нових людей, потрібно виселити попередніх мешканців).*

## Основи типів даних

Все дуже просто.

* `5` — це число
* `"5"` — це текстовий рядок
* `5 + 3` буде `8`
* `"5" + "3"` буде `"53"`

Чому дорівнює `"5" + 3` і чому дорівнює `5 + "3"` розберіться самостійно за допомогою `console.log`.

⚠️**Не лінуйтеся практикувати, а не просто читати цей текст.** Інакше нічому не навчитесь.

### Як зробити число з рядка

Якщо у вас є рядок, а ви хочете число — використовуйте команду `parseInt(вашРядок)`. Наприклад:

```javascript
console.log(parseInt("1") + 1);
```

Або ще простіше: через унарний плюс.

```javascript
console.log(+"1" + 1);

let a = "100";
let b = 100;
console.log(a + b);
console.log(+a + b);
```

До речі, саме за цим принципом працює і`+prompt`, про який буде в наступних розділах.

### Не плутайте п**рисвоєння з математичним "дорівнює"**

```javascript
let a = b + 1
```

**Це читається як:**

* **`a`** ***присвоїти*****&#x20;`b`** плюс 1
* тобто "взяти значення, яке *зараз* лежить у `b`, додати до нього `1` та покласти в `a`"
* *вирахувати* вираз праворуч від знака **`=`** і покласти результат до ящика, назва якого — зліва

**І це НЕ читається як:**

* `a` дорівнює `b` плюс 1\
  (після виконання команди це рівність і справді буде дійсною, але як довго? Коли ми пізніше змінимо В, то А автоматично не зміниться)
* `a` відтепер завжди на одиницю більше `b`\
  (звісно, так стане після виконання команди, але коли ми пізніше змінимо В, то А автоматично не зміниться)<br>

## Трохи "на подумати"

Далі буде код. **Перш, ніж його запускати**, подумайте:

### Перше

* Що буде на екрані?
* Що сталося з `b` коли ми змінили `a`?
* Чому так сталося?

```javascript
let a = 100
let b
b = a + 1
console.log(b)
console.log("круто!")
a = 10
console.log(b)
```

### Друге

Яку команду написати замість `x + 1`, щоб вивело `6`? Важливо, щоб вона працювала не лише для 5, але і для будь-яких інших значень `x`.

```javascript
let x = 5
x + 1
console.log(x) // що буде?
```

### Підказки

* Щоб збільшити вміст `x`, змінну треба змінити. Бо якщо `x` не зміниться, то і не збільшиться :)
* Щоб потрібно змінити `x`, потрібно щось "покласти" до `x`.
* Якщо потрібно щось покласти до `x` — яка команда це вміє робити?
* Що саме потрібно покласти до `x`, щоб там у підсумку виявилося число на `1` більше за те, що в ньому лежало?

## Додаткові матеріали

[Змінні](https://uk.javascript.info/variables)

## Почитали теорію? Переходьте до задач

{% content-ref url="/pages/WZQeZ5k0MqYbZh3xgPNF" %}
[Hello world](/zero/tutorials/commands/hello-world.md)
{% endcontent-ref %}

{% content-ref url="/pages/z6VnGSAtxVgMliDBd3bK" %}
[Обміняти змінні місцями](/zero/tutorials/commands/swap.md)
{% endcontent-ref %}

*Виникли питання або труднощі?* [*Зверніться за допомогою до Ш++.*](/zero/arrangements/support.md)

### Чи можна йти до наступної теми?

**Так, якщо ви:**

* Погралися з командами та спробували все те, що ми просили вас спробувати.
* Почитали матеріали, подивились відео та спробували все це зрозуміти.
* Розв'язали всі задачі.
