Skip to content

Commit fdc905b

Browse files
authored
Merge pull request #813 from hexlet-basics/update-33-data-types-from-python
feat(33-data-types): полный перенос теории из Python и адаптация под JS
2 parents ea10576 + 76b16bc commit fdc905b

7 files changed

Lines changed: 221 additions & 66 deletions

File tree

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,13 @@
1-
console.log(-0.304);
1+
const currentYear = 2026;
2+
3+
// BEGIN
4+
const name = 'Anna';
5+
const birthYear = 1994;
6+
const age = currentYear - birthYear;
7+
const rating = 4.7;
8+
9+
console.log(`Name: ${name}`);
10+
console.log(`Birth year: ${birthYear}`);
11+
console.log(`Age: ${age}`);
12+
console.log(`Rating: ${rating}`);
13+
// END
Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,20 @@
1-
Выведите на экран число `-0.304`.
1+
В программе уже задан текущий год:
2+
3+
```javascript
4+
const currentYear = 2026;
5+
```
6+
7+
Напишите программу, которая выводит данные профиля в таком формате:
8+
9+
```text
10+
Name: Anna
11+
Birth year: 1994
12+
Age: 32
13+
Rating: 4.7
14+
```
15+
16+
Для этого:
17+
18+
- создайте переменную с годом рождения;
19+
- вычислите возраст на основе текущего года;
20+
- выведите данные на экран с подписями слева.
Lines changed: 62 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,75 @@
1-
Все значения в программировании имеют **тип**. Тип определяет, какие операции можно выполнять с данными.
1+
Программы работают с разной информацией: текстом, числами, датами, логическими значениями. У каждого значения в программе есть тип.
22

3-
## Примитивные типы в JavaScript
3+
Например:
44

5-
JavaScript имеет следующие примитивные типы:
5+
- `'Hello, World!'` является строкой (`string`);
6+
- `7`, `-198`, `0`, `3.14` являются числами (`number`);
7+
- `true` и `false` являются логическими значениями (`boolean`).
68

7-
| Тип | Примеры | Назначение |
8-
|-----|---------|------------|
9-
| `number` | `42`, `3.14`, `-7` | Числа (целые и дробные) |
10-
| `string` | `'hello'`, `"world"` | Текст |
11-
| `boolean` | `true`, `false` | Логические значения |
12-
| `null` | `null` | Намеренное отсутствие значения |
13-
| `undefined` | `undefined` | Неинициализированная переменная |
9+
## Что такое тип данных?
10+
11+
Тип данных определяет:
12+
13+
- какие значения к нему относятся;
14+
- какие операции с ним можно делать.
15+
16+
Например, числа можно складывать, делить и умножать. А строки складываются по-другому — при помощи конкатенации. Умножать строку на строку бессмысленно:
1417

1518
```javascript
16-
const age = 25; // number
17-
const name = 'Alice'; // string
18-
const isActive = true; // boolean
19-
const nothing = null; // null
20-
let unset; // undefined
19+
// Бессмыслица: 'мама' * 'блокнот'
2120
```
2221

23-
## Зачем нужны типы?
22+
## Числа и строки относятся к разным типам
2423

25-
Тип влияет на поведение операций. Например, `+` для чисел — это сложение, а для строк — конкатенация:
24+
Пример вывода числа:
2625

2726
```javascript
28-
console.log(1 + 2); // => 3
29-
console.log('1' + '2'); // => '12'
27+
console.log(5); // => 5
28+
console.log(-5); // => -5
3029
```
3130

31+
Пример вывода строки:
32+
33+
```javascript
34+
console.log('5'); // => 5
35+
console.log('-5'); // => -5
36+
```
37+
38+
На экране результат выглядит одинаково, но внутри программы это совершенно разные вещи:
39+
40+
| Значение | Тип данных |
41+
|----------|-----------------------|
42+
| `5` | `number` (число) |
43+
| `'5'` | `string` (строка) |
44+
45+
## Числа в JavaScript
46+
47+
Во многих языках целые и дробные числа — это разные типы (например, в Python это `int` и `float`). В JavaScript такого деления нет: и целые, и дробные числа относятся к одному типу — `number`.
48+
49+
```javascript
50+
console.log(10.234); // => 10.234
51+
console.log(-0.4); // => -0.4
52+
53+
console.log(3.5 + 1.2); // => 4.7
54+
console.log(5 / 2); // => 2.5
55+
console.log(2.75 - 0.5); // => 2.25
56+
```
57+
58+
## Примитивные типы
59+
60+
Типы вроде `string`, `number`, `boolean` называются примитивными — они встроены прямо в язык.
61+
62+
```text
63+
Примитивные типы JavaScript
64+
├── number : числа (целые и дробные) (7, -3, 3.14)
65+
├── string : строки ('hello')
66+
├── boolean : логический тип (true, false)
67+
├── null : намеренное отсутствие значения
68+
└── undefined : значение не задано
69+
```
70+
71+
Кроме строк и чисел, в JavaScript есть логический тип `boolean` со значениями `true` и `false`, а также специальные значения `null` и `undefined`. Подробнее мы столкнёмся с ними в будущем.
72+
3273
## Как узнать тип значения
3374

3475
Оператор `typeof` возвращает тип в виде строки:
@@ -40,3 +81,5 @@ console.log(typeof true); // => 'boolean'
4081
console.log(typeof undefined); // => 'undefined'
4182
console.log(typeof null); // => 'object' (историческая ошибка JS)
4283
```
84+
85+
Существуют и составные типы — массивы, объекты и другие. С ними мы познакомимся позже. Более того, в JavaScript можно создавать и свои собственные типы (например, классы), но для начала важно хорошо разобраться с примитивами.

modules/33-data-types/10-primitive-data-types/test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,5 @@ test('hello world', async () => {
88

99
const firstArg = consoleLogSpy.mock.calls.join('\n');
1010

11-
expect(firstArg).toBe('-0.304');
11+
expect(firstArg).toBe('Name: Anna\nBirth year: 1994\nAge: 32\nRating: 4.7');
1212
});
Lines changed: 44 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,35 +1,65 @@
1-
**Примитивные типы** в JavaScript неизменяемы (immutable). Это значит, что после создания строку нельзя изменить — ни поменять символ, ни добавить новый.
1+
Представим, что у нас есть строка, и мы хотим заменить в ней один символ, например первую букву имени:
22

33
```javascript
44
let greeting = 'Hello';
5-
6-
// Попытка изменить первый символ — ничего не произойдёт
75
greeting[0] = 'J';
86
console.log(greeting); // => Hello (не изменилось!)
97
```
108

11-
## Что можно сделать
9+
В отличие от некоторых языков, где такая попытка приводит к ошибке, в JavaScript присваивание по индексу просто **тихо игнорируется**: строка не меняется (а в строгом режиме это вызовет ошибку `TypeError`). Причина одна: строки в JavaScript нельзя изменять по частям. После создания они становятся неизменяемыми (или, как говорят программисты, иммутабельными).
10+
11+
## Почему строки неизменяемые?
12+
13+
Примитивные типы (строки, числа, логические значения) в JavaScript менять нельзя. Это даёт важные преимущества:
14+
15+
- Безопасность: значения не изменятся случайно.
16+
- Производительность: с неизменяемыми значениями проще работать внутри движка.
17+
- Предсказуемость: меньше неожиданных эффектов при передаче данных в функции.
18+
19+
## А как тогда «изменить» строку?
20+
21+
Если нужно «изменить» строку, создают новую на основе старой и сохраняют её в ту же переменную. Например, заменим первую букву:
22+
23+
```javascript
24+
const word = 'hello';
25+
const fixed = 'H' + word.slice(1);
26+
console.log(fixed); // => Hello
27+
```
28+
29+
```text
30+
word = 'hello'
31+
32+
word[0] = 'H' → ничего не происходит, строки неизменяемы
1233
13-
Переприсвоить переменную целиком — это работает:
34+
'H' + word.slice(1)
35+
└────────┬────────┘
36+
'Hello' ← создана новая строка
37+
```
38+
39+
Переприсвоить переменную целиком тоже можно — но это создаёт **новую** строку, а не меняет старую:
1440

1541
```javascript
1642
let greeting = 'Hello';
1743
greeting = 'Jello';
1844
console.log(greeting); // => Jello
1945
```
2046

21-
Но это создаёт **новую строку**, а не изменяет старую.
22-
23-
## Зачем это знать?
47+
## Новая переменная или та же?
2448

25-
Если вам нужно «изменить» строку, нужно создавать новую на основе старой. Например, заменить первый символ:
49+
Переиспользовать переменную стоит только тогда, когда речь идёт об одной и той же сущности. Если это уже другие данные, лучше завести отдельную переменную:
2650

2751
```javascript
28-
const word = 'hello';
29-
const fixed = 'H' + word.slice(1);
30-
console.log(fixed); // => Hello
52+
// Одна и та же строка, просто обновляем
53+
let name = 'Alexander';
54+
name = 'Blexander';
55+
56+
// Разные сущности — лучше разные переменные
57+
const firstName = 'Alexander';
58+
const correctedFirstName = 'Blexander';
3159
```
3260

33-
## Числа тоже неизменяемы
61+
Попытка «запихать» все строки в одну переменную запутывает код: переменная перестаёт говорить, что в ней хранится.
62+
63+
## Вывод
3464

35-
То же самое касается чисел и булевых значений — они не объекты с изменяемым состоянием, а просто значения.
65+
Примитивные типы данных в JavaScript (строки, числа, логические значения) являются неизменяемыми (immutable). Это означает, что после создания их значение изменить нельзя. Поменять один символ в строке невозможно — любые «изменения» происходят путём создания нового значения и переопределения переменной.

0 commit comments

Comments
 (0)