From f06b435b8dd6e7260a8ac1f66aabad6c64bbb190 Mon Sep 17 00:00:00 2001 From: Timur Shemsedinov Date: Mon, 22 Aug 2022 23:19:09 +0300 Subject: [PATCH] Move code examples to `uk` --- content/uk/2-2-Types.md | 11 ++++++++-- content/uk/2-3-Blocks.md | 14 +++++++++++-- content/uk/2-4-Context.md | 40 ++++++++++++++++++++++--------------- content/uk/2-5-Procedure.md | 40 ++++++++++++++++++++++++++++++++++++- 4 files changed, 84 insertions(+), 21 deletions(-) diff --git a/content/uk/2-2-Types.md b/content/uk/2-2-Types.md index 659b743..1b0e2aa 100644 --- a/content/uk/2-2-Types.md +++ b/content/uk/2-2-Types.md @@ -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) @@ -22,7 +27,9 @@ Прапорець це значення (часто бульового або перелічуваного типу), що визначає стан чогось, іншої програмної абстракції, екземпляра, процесу, пристрою. Наприклад, ознака закриття з'єднання, ознака завершення пошуку структури даних і т.д. Наприклад: -код +```js +let flagName = false; +``` > Рядок (String) diff --git a/content/uk/2-3-Blocks.md b/content/uk/2-3-Blocks.md index acd2910..e119eb6 100644 --- a/content/uk/2-3-Blocks.md +++ b/content/uk/2-3-Blocks.md @@ -10,7 +10,9 @@ Вираз складається з ідентифікаторів, значень, операторів та виклику функцій. Приклад: -код +```js +(len - 1) * f(x, INTERVAL); +``` > Блок коду (Code block) – логічно пов'язана група інструкцій чи операторів. @@ -18,7 +20,15 @@ > Цикл (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). diff --git a/content/uk/2-4-Context.md b/content/uk/2-4-Context.md index def8ef1..56bcf55 100644 --- a/content/uk/2-4-Context.md +++ b/content/uk/2-4-Context.md @@ -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) @@ -23,17 +45,3 @@ > Глобальний контекст (Global context) Якщо ідентифікатор не знаходиться у жодному з вкладених лексичних контекстів, то буде виконано його пошук у глобальному об'єкті-довіднику, який є глобальним контекстом (JavaScript `global` або `window`). - -> Побічні ефекти (Side effects) - -> Функція вищого порядку (Higher-order Function) - -1. Якщо функція передається в іншу функцію як аргумент, це колбек. -2. Якщо функція повертається як результат, це фабрика функцій на замиканнях. -3. Якщо функція, що повертається, має ту ж семантику, що й одержувана в аргументах, але з додатковою (розширеною) поведінкою, то це функція-обгортка. -4. Рідко буває, що функція, що повертається, не пов'язана з функцією з аргументів, або пов'язана не прямо, а також має іншу семантику і функцією-оберткою вона не є. -5. Якщо виході клас чи функція-конструктор, це фабрики класів і прототипів відповідно. - -> Функція-обгортка (Wrapper) - -Функція, яка обертає іншу функцію (іноді об'єкт, інтерфейс чи функціональний об'єкт), додаючи додаткову поведінку. Можна обернути цілий інтерфейс API і навіть асинхронну функцію разом з колбеками (якщо відомий контракт). diff --git a/content/uk/2-5-Procedure.md b/content/uk/2-5-Procedure.md index 226e5a5..e9fed9c 100644 --- a/content/uk/2-5-Procedure.md +++ b/content/uk/2-5-Procedure.md @@ -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)); +```