Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 9 additions & 2 deletions content/uk/2-2-Types.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,12 @@

> Типи даних (Data Types)

код
```js
const values = [5, 'Kiev', true, { size: 10 }, (a) => ++a];

const types = values.map((x) => typeof x);
console.log({ types });
```

> Посилання (Reference)

Expand All @@ -22,7 +27,9 @@

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

код
```js
let flagName = false;
```

> Рядок (String)

Expand Down
14 changes: 12 additions & 2 deletions content/uk/2-3-Blocks.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,15 +10,25 @@

Вираз складається з ідентифікаторів, значень, операторів та виклику функцій. Приклад:

код
```js
(len - 1) * f(x, INTERVAL);
```

> Блок коду (Code block) – логічно пов'язана група інструкцій чи операторів.

Блоки створюють область видимості. Блоки можуть бути вкладені. Приклади різних мов: {}, (+ a b), begin end, в Python блоки виділяються відступами.

> Цикл (Loop) – багаторазове виконання блоку операторів.

код
```js
const MAX_VALUE = 10;

console.log('Begin');
for (let i = 0; i < MAX_VALUE; i++) {
console.dir({ i, date: new Date() });
}
console.log('The end');
```

> Умова (Conditional statements) - синтаксична конструкція, що дозволяє виконати різні дії або повертає різні значення (тернарний оператор) залежно від логічного виразу (що повертає true або false).

Expand Down
40 changes: 24 additions & 16 deletions content/uk/2-4-Context.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,33 @@

Область видимості - частина коду, з якої "видно" ідентифікатор. Розглянемо приклад:

код
```js
const level = 1;

const f = () => {
const level = 2;
{
const level = 3;
console.log(level); // 3
}
console.log(level); // 2
};
```

У сучасному стандарті JavaScript область видимості породжується функцією або будь-яким блоком операторів, що мають фігурні дужки {}. У Python scope породжується лише функціями. Порівняйте цей код із попереднім прикладом:

код
```py
level = 1

def f():
level = 2
if level == 2:
level = 3
print(level) // 3
print(level) // 3

f()
```

> Лексичний контекст (Lexical environment)

Expand All @@ -23,17 +45,3 @@
> Глобальний контекст (Global context)

Якщо ідентифікатор не знаходиться у жодному з вкладених лексичних контекстів, то буде виконано його пошук у глобальному об'єкті-довіднику, який є глобальним контекстом (JavaScript `global` або `window`).

> Побічні ефекти (Side effects)

> Функція вищого порядку (Higher-order Function)

1. Якщо функція передається в іншу функцію як аргумент, це колбек.
2. Якщо функція повертається як результат, це фабрика функцій на замиканнях.
3. Якщо функція, що повертається, має ту ж семантику, що й одержувана в аргументах, але з додатковою (розширеною) поведінкою, то це функція-обгортка.
4. Рідко буває, що функція, що повертається, не пов'язана з функцією з аргументів, або пов'язана не прямо, а також має іншу семантику і функцією-оберткою вона не є.
5. Якщо виході клас чи функція-конструктор, це фабрики класів і прототипів відповідно.

> Функція-обгортка (Wrapper)

Функція, яка обертає іншу функцію (іноді об'єкт, інтерфейс чи функціональний об'єкт), додаючи додаткову поведінку. Можна обернути цілий інтерфейс API і навіть асинхронну функцію разом з колбеками (якщо відомий контракт).
40 changes: 39 additions & 1 deletion content/uk/2-5-Procedure.md
Original file line number Diff line number Diff line change
Expand Up @@ -12,4 +12,42 @@

> Метод – функція або процедура, пов'язана з об'єктом чи класом.

код
```js
{
a: 10,
b: 10,
sum() {
return this.a + this.b;
}
}
```

```js
const colorer = (s, color) => `\x1b[3${color}m${s}\x1b[0m`;

const colorize = (name) => {
let res = '';
const letters = name.split('');
let color = 0;
for (const letter of letters) {
res += colorer(letter, color++);
if (color > COLORS.length) color = 0;
}
return res;
};

const greetings = (name) =>
name.includes('Augustus')
? `${SALUTATION}, ${colorize(name)}!`
: `Hello, ${name}!`;
```

> Usage

```js
const fullName = 'Marcus Aurelius Antoninus Augustus';
console.log(greetings(fullName));

const shortName = 'Marcus Aurelius';
console.log(greetings(shortName));
```