# Команди

Відкрийте [Ш++ 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)

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

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

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


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://shpp.gitbook.io/zero/tutorials/commands.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
