From fe7b56124c123b4aa4c8d3dcc894c04b39323511 Mon Sep 17 00:00:00 2001 From: Yuriy Ostapyuk Date: Thu, 16 May 2019 23:58:09 +0300 Subject: [PATCH 01/10] translation in progress --- 1-js/02-first-steps/07-operators/article.md | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/1-js/02-first-steps/07-operators/article.md b/1-js/02-first-steps/07-operators/article.md index 74b27e871..c7e4d4506 100644 --- a/1-js/02-first-steps/07-operators/article.md +++ b/1-js/02-first-steps/07-operators/article.md @@ -1,15 +1,15 @@ -# Operators +# Оператори -We know many operators from school. They are things like addition `+`, multiplication `*`, subtraction `-`, and so on. +Ми знаємо багато операторів зі школи. Це такі речі, як додавання `+`, множення `*`, віднімання `-`, тощо. -In this chapter, we'll concentrate on aspects of operators that are not covered by school arithmetic. +У цьому розділі ми зупинимося на аспектах операторів, які не охоплені шкільною арифметикою. -## Terms: "unary", "binary", "operand" +## Тарміни: "унарний", "бінарний", "операнд" -Before we move on, let's grasp some common terminology. +Перш ніж ми почнемо, давайте розберемо певну загальну термінологію. -- *An operand* -- is what operators are applied to. For instance, in the multiplication of `5 * 2` there are two operands: the left operand is `5` and the right operand is `2`. Sometimes, people call these "arguments" instead of "operands". -- An operator is *unary* if it has a single operand. For example, the unary negation `-` reverses the sign of a number: +- *Операнд* -- це те, до чого затосовуються оператори. Наприклад, у множенні `5 * 2` є два операнди: лівий операнд `5` і правий операнд `2`. Іноді, люди називають їх "аргументами", а не "операндами". +- Опреатор є *унарним*, якщо він має один операнд. Наприклад, унарне заперечення `-` змінює знак числа: ```js run let x = 1; @@ -17,16 +17,16 @@ Before we move on, let's grasp some common terminology. *!* x = -x; */!* - alert( x ); // -1, unary negation was applied + alert( x ); // -1, було застосоване унарне заперечення ``` -- An operator is *binary* if it has two operands. The same minus exists in binary form as well: +- Оператор є *бінарним*, якщо він має два операнди. Цей мінус існує також в бінарній формі: ```js run no-beautify let x = 1, y = 3; - alert( y - x ); // 2, binary minus subtracts values + alert( y - x ); // 2, бінарний мінус віднімає значення ``` - Formally, we're talking about two different operators here: the unary negation (single operand: reverses the sign) and the binary subtraction (two operands: subtracts). + Формально, ми говоримо про двох різних операторів: унарне заперечення (єдиний операнд: змінює знак) та бінарне віднімання (два опернди: віднімає). ## String concatenation, binary + From b3f1fea7162179b33a9ba5a446d9ec7ca439c618 Mon Sep 17 00:00:00 2001 From: Yuriy Ostapyuk Date: Sun, 19 May 2019 20:19:47 +0300 Subject: [PATCH 02/10] saving translation progress --- 1-js/02-first-steps/07-operators/article.md | 60 ++++++++++----------- 1 file changed, 30 insertions(+), 30 deletions(-) diff --git a/1-js/02-first-steps/07-operators/article.md b/1-js/02-first-steps/07-operators/article.md index c7e4d4506..934e78ac3 100644 --- a/1-js/02-first-steps/07-operators/article.md +++ b/1-js/02-first-steps/07-operators/article.md @@ -28,56 +28,56 @@ Формально, ми говоримо про двох різних операторів: унарне заперечення (єдиний операнд: змінює знак) та бінарне віднімання (два опернди: віднімає). -## String concatenation, binary + +## Об'єднаяння рядків, бінарний + -Now, let's see special features of JavaScript operators that are beyond school arithmetics. +Тепер розглянемо особливості JavaScript операторів, які виходять за межі шкільної арифметики. -Usually, the plus operator `+` sums numbers. +Зазвичай оператор плюс `+` підсумовує числа. -But, if the binary `+` is applied to strings, it merges (concatenates) them: +Але, якщо бінарний `+` застосовується до рядків, він об'єднує їх: ```js -let s = "my" + "string"; -alert(s); // mystring +let s = "мій" + "рядок"; +alert(s); // мійрядок ``` -Note that if one of the operands is a string, the other one is converted to a string too. +Зверніть увагу, якщо один з операндів є рядком, то інший також перетворюється на рядок. -For example: +Наприклад: ```js run alert( '1' + 2 ); // "12" alert( 2 + '1' ); // "21" ``` -See, it doesn't matter whether the first operand is a string or the second one. The rule is simple: if either operand is a string, the other one is converted into a string as well. +Бачите, на має значення, чи перший операнд є рядком або другий. Правило просте: якщо будь-який операнд є радком, інший також перетворюється на рядок. -However, note that operations run from left to right. If there are two numbers followed by a string, the numbers will be added before being converted to a string: +Однак зверніть увагу, що операції виконуються зліва направо. Якщо є два числа, за якими йде рядок, числа будуть додані перед перетворенням на рядок: ```js run -alert(2 + 2 + '1' ); // "41" and not "221" +alert(2 + 2 + '1' ); // "41" а не "221" ``` -String concatenation and conversion is a special feature of the binary plus `+`. Other arithmetic operators work only with numbers and always convert their operands to numbers. +Об'єднання рядків і перетворення є особливою ознакою бінарного плюса `+`. Інші арифметичні оператори працюють тільки з числами і завжди перетворюють свої операнди в числа. -For instance, subtraction and division: +Наприклад, віднімання і ділення: ```js run alert( 2 - '1' ); // 1 alert( '6' / '2' ); // 3 ``` -## Numeric conversion, unary + +## Числове перетворення, унарний + -The plus `+` exists in two forms: the binary form that we used above and the unary form. +Плюс `+` існує у двох формах: бінарна форма, яку ми використовували вище та унарна форма. -The unary plus or, in other words, the plus operator `+` applied to a single value, doesn't do anything to numbers. But if the operand is not a number, the unary plus converts it into a number. +Унарний плюс або, іншими словами, оператор плюс `+`, застосований до єдиного операнда, нічого не зробить, якщо операнд є числом. Але якщо операнд не є числом, унарний плюс перетворить його в число. -For example: +Наприклад: ```js run -// No effect on numbers +// Нема ніякого впилу на числа let x = 1; alert( +x ); // 1 @@ -85,47 +85,47 @@ let y = -2; alert( +y ); // -2 *!* -// Converts non-numbers +// Перетворює не числові значення alert( +true ); // 1 alert( +"" ); // 0 */!* ``` -It actually does the same thing as `Number(...)`, but is shorter. +Він насправді працює як і `Number(...)`, але виглядає коротше. -The need to convert strings to numbers arises very often. For example, if we are getting values from HTML form fields, they are usually strings. +Необхідність перетворення рядків на числа виникає дуже часто. Наприклад, якщо ми отримуємо значення з полів HTML форми, вони зазвичай є рядками. -What if we want to sum them? +Що робити, якщо ми хочемо їх підсумувати? -The binary plus would add them as strings: +Бінарний плюс додав би їх як рядки: ```js run let apples = "2"; let oranges = "3"; -alert( apples + oranges ); // "23", the binary plus concatenates strings +alert( apples + oranges ); // "23", бінарний плюс об'єднує рядки ``` -If we want to treat them as numbers, we need to convert and then sum them: +Якщо ми хочемо розглядати їх як числа, нам потрібно конвертувати, а потім підсумувати їх: ```js run let apples = "2"; let oranges = "3"; *!* -// both values converted to numbers before the binary plus +// обидва значення перетворюються на числа перед застосування бінарного плюса alert( +apples + +oranges ); // 5 */!* -// the longer variant +// довший варіант // alert( Number(apples) + Number(oranges) ); // 5 ``` -From a mathematician's standpoint, the abundance of pluses may seem strange. But from a programmer's standpoint, there's nothing special: unary pluses are applied first, they convert strings to numbers, and then the binary plus sums them up. +З точки зору математика, надмір плюсів може здатися дивним. Але з точки зору програміста, немає нічого особливого: спочатку застосовується унарні плюси, вони перетворюють рядки на числа, а потім бінарний плюс підсумовує їх. -Why are unary pluses applied to values before the binary ones? As we're going to see, that's because of their *higher precedence*. +Чому унарні плюси застосовуються до значень перед бінарними плюсами? Як ми побичмо далі, це пов'язано з їх *більш високим пріоритетом*. -## Operator precedence +## Пріоритет оператора If an expression has more than one operator, the execution order is defined by their *precedence*, or, in other words, the implicit priority order of operators. From 398d9116cc0e1241293be9c89f8ebe8e0cd36e0e Mon Sep 17 00:00:00 2001 From: Yuriy Ostapyuk Date: Tue, 21 May 2019 22:35:28 +0300 Subject: [PATCH 03/10] saving translation progress --- 1-js/02-first-steps/07-operators/article.md | 30 ++++++++++----------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/1-js/02-first-steps/07-operators/article.md b/1-js/02-first-steps/07-operators/article.md index 934e78ac3..e01fa6ab0 100644 --- a/1-js/02-first-steps/07-operators/article.md +++ b/1-js/02-first-steps/07-operators/article.md @@ -127,32 +127,32 @@ alert( +apples + +oranges ); // 5 ## Пріоритет оператора -If an expression has more than one operator, the execution order is defined by their *precedence*, or, in other words, the implicit priority order of operators. +Ящо вираз має більше одного оператора, порядок виконання визначається їх *пріоритетом*, або, іншими словами, неявним порядком пріоритетів операторів. -From school, we all know that the multiplication in the expression `1 + 2 * 2` should be calculated before the addition. That's exactly the precedence thing. The multiplication is said to have *a higher precedence* than the addition. +Зі школи ми всі знаємо, що множення у виразі `1 + 2 * 2` повинно бути вираховано перед додаванням. Саме це і є пріоритетом. Кажуть, що множення має *більш високий пріоритет*, ніж додавання. -Parentheses override any precedence, so if we're not satisfied with the implicit order, we can use them to change it. For example: `(1 + 2) * 2`. +Дужки перевизначають будь-який пріоритет, тому, якщо ми не задоволенні неявним приорітетом, ми можемо використовувати дужки, щоб змінити його. Наприклад: `(1 + 2) * 2`. -There are many operators in JavaScript. Every operator has a corresponding precedence number. The one with the larger number executes first. If the precedence is the same, the execution order is from left to right. +У JavaScript є багато операторів. Кожен оператор має відповідний номер пріоритету. Першим виконується той оператор, який має найбільший номер. Якщо пріоритет є одниковим, порядок виконання — зліва направо. -Here's an extract from the [precedence table](https://developer.mozilla.org/en/JavaScript/Reference/operators/operator_precedence) (you don't need to remember this, but note that unary operators are higher than corresponding binary ones): +Ось витяг із [таблиці пріоритетів](https://developer.mozilla.org/en/JavaScript/Reference/operators/operator_precedence) (вам не потрібно запам'ятовувати це, але зверніть увагу, що унарні оператори вище за відповідні бінарні): -| Precedence | Name | Sign | +| Приорітет | Ім'я | Знак | |------------|------|------| | ... | ... | ... | -| 16 | unary plus | `+` | -| 16 | unary negation | `-` | -| 14 | multiplication | `*` | -| 14 | division | `/` | -| 13 | addition | `+` | -| 13 | subtraction | `-` | +| 16 | унарний плюс | `+` | +| 16 | унарне заперечення | `-` | +| 14 | множення | `*` | +| 14 | ділення | `/` | +| 13 | додавання | `+` | +| 13 | віднімання | `-` | | ... | ... | ... | -| 3 | assignment | `=` | +| 3 | призначення | `=` | | ... | ... | ... | -As we can see, the "unary plus" has a priority of `16` which is higher than the `13` of "addition" (binary plus). That's why, in the expression `"+apples + +oranges"`, unary pluses work before the addition. +Як ми бачемо, "унарний плюс" має пріоритет `16`, який вище за `13` — пріоритет "додавання" (бінарний плюс). Саме тому, у виразі `"+apples + +oranges"`, унарні плюси виконуються до додавання (бінарного плюса). -## Assignment +## Призначення Let's note that an assignment `=` is also an operator. It is listed in the precedence table with the very low priority of `3`. From ff2e0cf86f5b745b9974e3c48a549792b67b05c7 Mon Sep 17 00:00:00 2001 From: Yuriy Ostapyuk Date: Thu, 23 May 2019 23:32:49 +0300 Subject: [PATCH 04/10] saving progress --- 1-js/02-first-steps/07-operators/article.md | 26 ++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/1-js/02-first-steps/07-operators/article.md b/1-js/02-first-steps/07-operators/article.md index e01fa6ab0..451c3f625 100644 --- a/1-js/02-first-steps/07-operators/article.md +++ b/1-js/02-first-steps/07-operators/article.md @@ -152,11 +152,11 @@ alert( +apples + +oranges ); // 5 Як ми бачемо, "унарний плюс" має пріоритет `16`, який вище за `13` — пріоритет "додавання" (бінарний плюс). Саме тому, у виразі `"+apples + +oranges"`, унарні плюси виконуються до додавання (бінарного плюса). -## Призначення +## Присвоювання -Let's note that an assignment `=` is also an operator. It is listed in the precedence table with the very low priority of `3`. +Зазначемо, що присвоювання `=` також є оператором. Воно є в таблиці з пріоритетами і має дуже низький пріоритет `3`. -That's why, when we assign a variable, like `x = 2 * 2 + 1`, the calculations are done first and then the `=` is evaluated, storing the result in `x`. +Тому, коли ми присвоюємо значення змінній, наприклад, `x = 2 * 2 + 1`, спочатку виконуються обчислення, а потім виконується присвоювання `=`, зберігаючи результат у `x`. ```js let x = 2 * 2 + 1; @@ -164,7 +164,7 @@ let x = 2 * 2 + 1; alert( x ); // 5 ``` -It is possible to chain assignments: +Можливе лангюгове присвоювання: ```js run let a, b, c; @@ -178,14 +178,14 @@ alert( b ); // 4 alert( c ); // 4 ``` -Chained assignments evaluate from right to left. First, the rightmost expression `2 + 2` is evaluated and then assigned to the variables on the left: `c`, `b` and `a`. At the end, all the variables share a single value. +Лангюгове присвоювання виконується справа наліво. Спочатку обчислюється самий правий вираз `2 + 2`, а потім присвоюється зінним ліворуч : `c`, `b` and `a`. Наприкінці всі змінні мають спільне значення. -````smart header="The assignment operator `\"=\"` returns a value" -An operator always returns a value. That's obvious for most of them like addition `+` or multiplication `*`. But the assignment operator follows this rule too. +````smart header="Оператор присвоювання `\"=\"` повертає значення" +Оператор завжди повертає значення. Це очевидно для більшості з них, як додавання `+` або множення `*`. Але оператор присвоювання також додтримується цього правила. -The call `x = value` writes the `value` into `x` *and then returns it*. +Виклик `x = значення` записує `значення` у `x`, *а потім повертає його*. -Here's a demo that uses an assignment as part of a more complex expression: +Ось демонстрація, яка використовує присвоювання як частину більш складного виразу: ```js run let a = 1; @@ -199,14 +199,14 @@ alert( a ); // 3 alert( c ); // 0 ``` -In the example above, the result of `(a = b + 1)` is the value which is assigned to `a` (that is `3`). It is then used to subtract from `3`. +У наведенному вище прикладі результат `(a = b + 1)` є значенням, яке присвоюється змінній `a` (тобто `3`). Потім вона використовується для віднімання від `3`. -Funny code, isn't it? We should understand how it works, because sometimes we see it in 3rd-party libraries, but shouldn't write anything like that ourselves. Such tricks definitely don't make code clearer or readable. +Смішний код, чи не так? Ми повинні зрозуміти, як це працює, бо іноді ми бачимо подібне у бібліотеках третьої сторони, але самі не повинні писати нічого подібного. Такі трюки, безумовно, не роблять код більш ясним або читабельним. ```` -## Remainder % +## Залишок % -The remainder operator `%`, despite its appearance, is not related to percents. +Оператор залишку `%`, despite its appearance, is not related to percents. The result of `a % b` is the remainder of the integer division of `a` by `b`. From d5b90bb6480a26122d947aa26a796e919a729ad3 Mon Sep 17 00:00:00 2001 From: Yuriy Ostapyuk Date: Fri, 24 May 2019 23:18:13 +0300 Subject: [PATCH 05/10] finished translation --- .../1-increment-order/solution.md | 10 +- .../07-operators/1-increment-order/task.md | 4 +- .../2-assignment-result/solution.md | 6 +- .../07-operators/2-assignment-result/task.md | 4 +- 1-js/02-first-steps/07-operators/article.md | 148 +++++++++--------- 5 files changed, 86 insertions(+), 86 deletions(-) diff --git a/1-js/02-first-steps/07-operators/1-increment-order/solution.md b/1-js/02-first-steps/07-operators/1-increment-order/solution.md index 8a44d798e..eb170ba86 100644 --- a/1-js/02-first-steps/07-operators/1-increment-order/solution.md +++ b/1-js/02-first-steps/07-operators/1-increment-order/solution.md @@ -1,5 +1,5 @@ -The answer is: +Відповідь: - `a = 2` - `b = 2` @@ -9,10 +9,10 @@ The answer is: ```js run no-beautify let a = 1, b = 1; -alert( ++a ); // 2, prefix form returns the new value -alert( b++ ); // 1, postfix form returns the old value +alert( ++a ); // 2, префиксна форма повертає нове значення +alert( b++ ); // 1, постфіксна форма повертає старе значення -alert( a ); // 2, incremented once -alert( b ); // 2, incremented once +alert( a ); // 2, збільшується один раз +alert( b ); // 2, збільшується один раз ``` diff --git a/1-js/02-first-steps/07-operators/1-increment-order/task.md b/1-js/02-first-steps/07-operators/1-increment-order/task.md index 7db092389..19baf11e6 100644 --- a/1-js/02-first-steps/07-operators/1-increment-order/task.md +++ b/1-js/02-first-steps/07-operators/1-increment-order/task.md @@ -2,9 +2,9 @@ importance: 5 --- -# The postfix and prefix forms +# Постфіксна та префіксна форми -What are the final values of all variables `a`, `b`, `c` and `d` after the code below? +Які кінцеви значення всіх змінних `a`, `b`, `c` та `d` після виконання коду нижче? ```js let a = 1, b = 1; diff --git a/1-js/02-first-steps/07-operators/2-assignment-result/solution.md b/1-js/02-first-steps/07-operators/2-assignment-result/solution.md index e3113b4cd..39cffb56e 100644 --- a/1-js/02-first-steps/07-operators/2-assignment-result/solution.md +++ b/1-js/02-first-steps/07-operators/2-assignment-result/solution.md @@ -1,5 +1,5 @@ -The answer is: +Відповідь: -- `a = 4` (multiplied by 2) -- `x = 5` (calculated as 1 + 4) +- `a = 4` (помножиться на 2) +- `x = 5` (обчислюється як 1 + 4) diff --git a/1-js/02-first-steps/07-operators/2-assignment-result/task.md b/1-js/02-first-steps/07-operators/2-assignment-result/task.md index 5345c9485..bcae7416d 100644 --- a/1-js/02-first-steps/07-operators/2-assignment-result/task.md +++ b/1-js/02-first-steps/07-operators/2-assignment-result/task.md @@ -2,9 +2,9 @@ importance: 3 --- -# Assignment result +# Рузльтат присвоювання -What are the values of `a` and `x` after the code below? +Які значення мають `a` та `x` після виконання коду нижче? ```js let a = 2; diff --git a/1-js/02-first-steps/07-operators/article.md b/1-js/02-first-steps/07-operators/article.md index 451c3f625..0aba32ecc 100644 --- a/1-js/02-first-steps/07-operators/article.md +++ b/1-js/02-first-steps/07-operators/article.md @@ -206,25 +206,25 @@ alert( c ); // 0 ## Залишок % -Оператор залишку `%`, despite its appearance, is not related to percents. +Оператор залишку `%`, незважаючи на свій зовнішній вигляд, не пов'язаний з відсотками. -The result of `a % b` is the remainder of the integer division of `a` by `b`. +Результатом `a % b` є залишок цілочисельного ділення `a` на `b`. -For instance: +Наприклад: ```js run -alert( 5 % 2 ); // 1 is a remainder of 5 divided by 2 -alert( 8 % 3 ); // 2 is a remainder of 8 divided by 3 -alert( 6 % 3 ); // 0 is a remainder of 6 divided by 3 +alert( 5 % 2 ); // 1 — залишок від 5 розділеного на 2 +alert( 8 % 3 ); // 2 — залишок від 8 розділеного на 3 +alert( 6 % 3 ); // 0 — залишок від 6 розділеного на 3 ``` -## Exponentiation ** +## Піднесення до степеня ** -The exponentiation operator `**` is a recent addition to the language. +Оператор піднесення до степеня `**` був доданий у мову нещодавно. -For a natural number `b`, the result of `a ** b` is `a` multiplied by itself `b` times. +Для натурального числа `b`, результатом `a ** b` є `a` помножене на себе `b` разів. -For instance: +Наприклад: ```js run alert( 2 ** 2 ); // 4 (2 * 2) @@ -232,54 +232,54 @@ alert( 2 ** 3 ); // 8 (2 * 2 * 2) alert( 2 ** 4 ); // 16 (2 * 2 * 2 * 2) ``` -The operator works for non-integer numbers as well. +Оператор працює і для нецілих чисел. -For instance: +Наприклад: ```js run -alert( 4 ** (1/2) ); // 2 (power of 1/2 is the same as a square root, that's maths) -alert( 8 ** (1/3) ); // 2 (power of 1/3 is the same as a cubic root) +alert( 4 ** (1/2) ); // 2 (степінь 1/2 — це теж саме, що і квадратний корінь, це математика) +alert( 8 ** (1/3) ); // 2 (степінь 1/3 — це теж саме, що і кубічний корінь) ``` -## Increment/decrement +## Інкремент/декремент -Increasing or decreasing a number by one is among the most common numerical operations. +Збільшення або зменшення числа на одиницю є однією з найпоширеніших операцій. -So, there are special operators for it: +Тому для цього існують спеціальні оператори: -- **Increment** `++` increases a variable by 1: +- **Інкремент** `++` збільшує змінну на 1: ```js run no-beautify let counter = 2; - counter++; // works the same as counter = counter + 1, but is shorter + counter++; // працює так само, як counter = counter + 1, але коротше alert( counter ); // 3 ``` -- **Decrement** `--` decreases a variable by 1: +- **Декремент** `--` зменьшує змінну на 1: ```js run no-beautify let counter = 2; - counter--; // works the same as counter = counter - 1, but is shorter + counter--; // працює так само, як counter = counter - 1, але коротше alert( counter ); // 1 ``` ```warn -Increment/decrement can only be applied to variables. Trying to use it on a value like `5++` will give an error. +Інкремент/декремент можуть застосовуватись лише до змінних. Спроба використовувати їх на значенні як `5++` дасть помилку. ``` -The operators `++` and `--` can be placed either before or after a variable. +Оператори `++` та `--` можуть розташовуватись до або після змінної. -- When the operator goes after the variable, it is in "postfix form": `counter++`. -- The "prefix form" is when the operator goes before the variable: `++counter`. +- Коли оператор йде за змінною, він знаходиться у "постфіксній формі": `counter++`. +- "Префіксна форма" – це коли оператор йде попереду змінної: `++counter`. -Both of these statements do the same thing: increase `counter` by `1`. +Обидві конструкції роблять те ж саме: збільшують `counter` на `1`. -Is there any difference? Yes, but we can only see it if we use the returned value of `++/--`. +Чи є різниця? Так, але ми можемо побачити її якщо будемо використовувати повернене значення `++/--`. -Let's clarify. As we know, all operators return a value. Increment/decrement is no exception. The prefix form returns the new value while the postfix form returns the old value (prior to increment/decrement). +Давайте розберемось. Як відомо, усі оператори повертають значення. Інкремент/декремент не є винятком. Префіксна форма повертає нове значення, тоді як постфіксна форма повертає повертає старе значення (до збільшення/зменшення). -To see the difference, here's an example: +Щоб побачитит різницю, наведемо приклад: ```js run let counter = 1; @@ -288,64 +288,64 @@ let a = ++counter; // (*) alert(a); // *!*2*/!* ``` -In the line `(*)`, the *prefix* form `++counter` increments `counter` and returns the new value, `2`. So, the `alert` shows `2`. +У рядку `(*)`, *префіксна* форма `++counter` збільшує `counter` та повертає нове значення, `2`. Отже, `alert` показує `2`. -Now, let's use the postfix form: +Тепер скористаємося постфіксною формою: ```js run let counter = 1; -let a = counter++; // (*) changed ++counter to counter++ +let a = counter++; // (*) змінили ++counter на counter++ alert(a); // *!*1*/!* ``` -In the line `(*)`, the *postfix* form `counter++` also increments `counter` but returns the *old* value (prior to increment). So, the `alert` shows `1`. +У рядку `(*)`, *постфіксна* форма `counter++` також збільшує `counter`, але повертає *старе* значення (до інкременту). Отже, `alert` показує `1`. -To summarize: +Підсумки: -- If the result of increment/decrement is not used, there is no difference in which form to use: +- Якщо результат збільшення/зменшення не використовується, немає ніякої різниці яку форму використовувати: ```js run let counter = 0; counter++; ++counter; - alert( counter ); // 2, the lines above did the same + alert( counter ); // 2, у рядках вище робиться одне і те ж саме ``` -- If we'd like to increase a value *and* immediately use the result of the operator, we need the prefix form: +- Якщо ми хочемо збільшити значення *та* негайно використати результат оператора, нам потрібна префіксна форма: ```js run let counter = 0; alert( ++counter ); // 1 ``` -- If we'd like to increment a value but use its previous value, we need the postfix form: +- Якщо ми хочемо збільшити значення, але використати його попереднє значення, нам потрібна постфіксна форма: ```js run let counter = 0; alert( counter++ ); // 0 ``` -````smart header="Increment/decrement among other operators" -The operators `++/--` can be used inside expressions as well. Their precedence is higher than most other arithmetical operations. +````smart header="Інкремент/декремент серед інших операторів" +Оператори `++/--` також можуть використовуватись всередені виразів. Їх пріоритет віще за більшість інщих арифметичних операцій. -For instance: +Наприклад: ```js run let counter = 1; alert( 2 * ++counter ); // 4 ``` -Compare with: +Порівняйте із: ```js run let counter = 1; -alert( 2 * counter++ ); // 2, because counter++ returns the "old" value +alert( 2 * counter++ ); // 2, тому що counter++ повертається "старе" значення ``` -Though technically okay, such notation usually makes code less readable. One line does multiple things -- not good. +Не дивлячісь на те, що з технічної точки зору це допустимо, таке використання робить код меньш читабельним. Один рядок робить кілька речей -- не є добре. -While reading code, a fast "vertical" eye-scan can easily miss something like `counter++` and it won't be obvious that the variable increased. +При читанні коду швидке "вертикальне" сканування оком може легко пропустити щось подібне до `counter++` і не буде очевидним, що змінна була збільшена. -We advise a style of "one line -- one action": +Ми рекомендуємо стиль "одна лінія -- одна дія": ```js run let counter = 1; @@ -354,13 +354,13 @@ counter++; ``` ```` -## Bitwise operators +## Побітові оператори -Bitwise operators treat arguments as 32-bit integer numbers and work on the level of their binary representation. +Побітові оператори розглядають аргументи як 32-бітні цілі числа та працюють на рівні їх двійкового представлення. -These operators are not JavaScript-specific. They are supported in most programming languages. +Ці оператори не є специфічними для JavaScript. Вони підтримуються у більшості мов програмування. -The list of operators: +Список операторів: - AND ( `&` ) - OR ( `|` ) @@ -370,13 +370,13 @@ The list of operators: - RIGHT SHIFT ( `>>` ) - ZERO-FILL RIGHT SHIFT ( `>>>` ) -These operators are used very rarely. To understand them, we need to delve into low-level number representation and it would not be optimal to do that right now, especially since we won't need them any time soon. If you're curious, you can read the [Bitwise Operators](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) article on MDN. It would be more practical to do that when a real need arises. +Ці оператори використовуються дуже рідко. Цоб їх зрозуміти, нам потрібно заглибитись у представлення числа на низькому рівні і зараз не самий оптимальний час для цього, тим більше, що нам вони не будуть потрібні найближчим часом. Якщо вам цікаво, ви можете прочитати статтю [Bitwise Operators](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) на MDN. Це було би більш практично зробити, коли виникне реальна потреба. -## Modify-in-place +## Змінити-на-місці -We often need to apply an operator to a variable and store the new result in that same variable. +Часто нам потрібно застосувати оператор до змінної та зберегти новий результат у ту ж саму змінну. -For example: +Наприклад: ```js let n = 2; @@ -384,63 +384,63 @@ n = n + 5; n = n * 2; ``` -This notation can be shortened using the operators `+=` and `*=`: +Це запис скоротити за допомогою операторів `+=` та `*=`: ```js run let n = 2; -n += 5; // now n = 7 (same as n = n + 5) -n *= 2; // now n = 14 (same as n = n * 2) +n += 5; // тепер n = 7 (теж саме, що і n = n + 5) +n *= 2; // now n = 14 (теж саме, що і n = n * 2) alert( n ); // 14 ``` -Short "modify-and-assign" operators exist for all arithmetical and bitwise operators: `/=`, `-=`, etc. +Короткий "модифікуй-та-присвоюй" оператор існує для всіх арифметичних та побітових операторів: `/=`, `-=`, тощо. -Such operators have the same precedence as a normal assignment, so they run after most other calculations: +Такі оператори мають такуж перевагу, як і звичайне присвоювання, тому вони виконуються після більшості інших обчисленнь: ```js run let n = 2; n *= 3 + 5; -alert( n ); // 16 (right part evaluated first, same as n *= 8) +alert( n ); // 16 (права частина обчислюється першою, так само, як і n *= 8) ``` -## Comma +## Кома -The comma operator `,` is one of the rarest and most unusual operators. Sometimes, it's used to write shorter code, so we need to know it in order to understand what's going on. +Оператор кома `,` є одним за найрідкіших та незвичайних операторів. Іноді використовується для написання бальш короткого коду, тому нам потрібно знати його, щоб зрозуміти, що відбувається. -The comma operator allows us to evaluate several expressions, dividing them with a comma `,`. Each of them is evaluated but only the result of the last one is returned. +Оператор кома дозволяє обчислити кілька виразів, розділивши їх комою `,`. Кожен з них обчислюється, але повертається тільки результат останнього. -For example: +Наприклад: ```js run *!* let a = (1 + 2, 3 + 4); */!* -alert( a ); // 7 (the result of 3 + 4) +alert( a ); // 7 (результат обчислення 3 + 4) ``` -Here, the first expression `1 + 2` is evaluated and its result is thrown away. Then, `3 + 4` is evaluated and returned as the result. +Тут обчислюється перший вираз `1 + 2` і його результат викидається. Потім обчислюється `3 + 4` і повертається як результат. -```smart header="Comma has a very low precedence" -Please note that the comma operator has very low precedence, lower than `=`, so parentheses are important in the example above. +```smart header="Кома має дуже низький пріоритет" +Зверніть увагу, що оператор кома має дуже низький пріоритет, нижчий за `=`, тому дужки є важливими в наведеному вище прикладі. -Without them: `a = 1 + 2, 3 + 4` evaluates `+` first, summing the numbers into `a = 3, 7`, then the assignment operator `=` assigns `a = 3`, and finally the number after the comma, `7`, is not processed so it's ignored. +Без них: `a = 1 + 2, 3 + 4` обчислює спочатку `+`, підсумовуючи числа у `a = 3, 7`, потім оператор присвоювання `=` присвоює `a = 3`, і нарешті число після коми, `7`, не обробляється, тому його ігнорують. ``` -Why do we need an operator that throws away everything except the last part? +Чому нам потрібен оператор, що викидає все, окрім останньої частини? -Sometimes, people use it in more complex constructs to put several actions in one line. +Іноді люди використовують його в більш складних конструкціях, щоб помістити кілька дій в один рядок. -For example: +Наприклад: ```js -// three operations in one line +// три операціх в одному рядку for (*!*a = 1, b = 3, c = a * b*/!*; a < 10; a++) { ... } ``` -Such tricks are used in many JavaScript frameworks. That's why we're mentioning them. But, usually, they don't improve code readability so we should think well before using them. +Такі трюки використовуються в багатьох фреймворках JavaScript. Саме тому ми їх згадуємо. Але, як правило, вони не покращують читабельність коду, тому ми повинні добре подумати перед їх використанням. From d0e64c7fd3954c479c4db992d500e38bc41c389d Mon Sep 17 00:00:00 2001 From: Yuriy Ostapyuk Date: Fri, 24 May 2019 23:39:07 +0300 Subject: [PATCH 06/10] corrections --- .../1-increment-order/solution.md | 2 +- .../07-operators/1-increment-order/task.md | 2 +- 1-js/02-first-steps/07-operators/article.md | 46 +++++++++---------- 3 files changed, 25 insertions(+), 25 deletions(-) diff --git a/1-js/02-first-steps/07-operators/1-increment-order/solution.md b/1-js/02-first-steps/07-operators/1-increment-order/solution.md index eb170ba86..66034a7c6 100644 --- a/1-js/02-first-steps/07-operators/1-increment-order/solution.md +++ b/1-js/02-first-steps/07-operators/1-increment-order/solution.md @@ -9,7 +9,7 @@ ```js run no-beautify let a = 1, b = 1; -alert( ++a ); // 2, префиксна форма повертає нове значення +alert( ++a ); // 2, префіксна форма повертає нове значення alert( b++ ); // 1, постфіксна форма повертає старе значення alert( a ); // 2, збільшується один раз diff --git a/1-js/02-first-steps/07-operators/1-increment-order/task.md b/1-js/02-first-steps/07-operators/1-increment-order/task.md index 19baf11e6..b710c8a14 100644 --- a/1-js/02-first-steps/07-operators/1-increment-order/task.md +++ b/1-js/02-first-steps/07-operators/1-increment-order/task.md @@ -4,7 +4,7 @@ importance: 5 # Постфіксна та префіксна форми -Які кінцеви значення всіх змінних `a`, `b`, `c` та `d` після виконання коду нижче? +Які кінцеві значення всіх змінних `a`, `b`, `c` та `d` після виконання коду нижче? ```js let a = 1, b = 1; diff --git a/1-js/02-first-steps/07-operators/article.md b/1-js/02-first-steps/07-operators/article.md index 0aba32ecc..2df30d12f 100644 --- a/1-js/02-first-steps/07-operators/article.md +++ b/1-js/02-first-steps/07-operators/article.md @@ -8,7 +8,7 @@ Перш ніж ми почнемо, давайте розберемо певну загальну термінологію. -- *Операнд* -- це те, до чого затосовуються оператори. Наприклад, у множенні `5 * 2` є два операнди: лівий операнд `5` і правий операнд `2`. Іноді, люди називають їх "аргументами", а не "операндами". +- *Операнд* -- це те, до чого затосовуються оператори. Наприклад, у множенні `5 * 2` є два операнди: лівий операнд `5` і правий операнд `2`. Іноді люди називають їх "аргументами", а не "операндами". - Опреатор є *унарним*, якщо він має один операнд. Наприклад, унарне заперечення `-` змінює знак числа: ```js run @@ -26,9 +26,9 @@ alert( y - x ); // 2, бінарний мінус віднімає значення ``` - Формально, ми говоримо про двох різних операторів: унарне заперечення (єдиний операнд: змінює знак) та бінарне віднімання (два опернди: віднімає). + Формально, ми говоримо про два різні оператори: унарне заперечення (єдиний операнд: змінює знак) та бінарне віднімання (два опернди: віднімає). -## Об'єднаяння рядків, бінарний + +## Об'єднання рядків, бінарний + Тепер розглянемо особливості JavaScript операторів, які виходять за межі шкільної арифметики. @@ -50,7 +50,7 @@ alert( '1' + 2 ); // "12" alert( 2 + '1' ); // "21" ``` -Бачите, на має значення, чи перший операнд є рядком або другий. Правило просте: якщо будь-який операнд є радком, інший також перетворюється на рядок. +Бачите, не має значення, чи перший операнд є рядком або другий. Правило просте: якщо будь-який операнд є радком, інший також перетворюється на рядок. Однак зверніть увагу, що операції виконуються зліва направо. Якщо є два числа, за якими йде рядок, числа будуть додані перед перетворенням на рядок: @@ -59,7 +59,7 @@ alert( 2 + '1' ); // "21" alert(2 + 2 + '1' ); // "41" а не "221" ``` -Об'єднання рядків і перетворення є особливою ознакою бінарного плюса `+`. Інші арифметичні оператори працюють тільки з числами і завжди перетворюють свої операнди в числа. +Об'єднання рядків і перетворення є особливою ознакою бінарного плюса `+`. Інші арифметичні оператори працюють тільки з числами і завжди перетворюють свої операнди на числа. Наприклад, віднімання і ділення: @@ -72,7 +72,7 @@ alert( '6' / '2' ); // 3 Плюс `+` існує у двох формах: бінарна форма, яку ми використовували вище та унарна форма. -Унарний плюс або, іншими словами, оператор плюс `+`, застосований до єдиного операнда, нічого не зробить, якщо операнд є числом. Але якщо операнд не є числом, унарний плюс перетворить його в число. +Унарний плюс або, іншими словами, оператор плюс `+`, застосований до єдиного операнда, нічого не зробить, якщо операнд є числом. Але якщо операнд не є числом, унарний плюс перетворить його на число. Наприклад: @@ -123,17 +123,17 @@ alert( +apples + +oranges ); // 5 З точки зору математика, надмір плюсів може здатися дивним. Але з точки зору програміста, немає нічого особливого: спочатку застосовується унарні плюси, вони перетворюють рядки на числа, а потім бінарний плюс підсумовує їх. -Чому унарні плюси застосовуються до значень перед бінарними плюсами? Як ми побичмо далі, це пов'язано з їх *більш високим пріоритетом*. +Чому унарні плюси застосовуються до значень перед бінарними плюсами? Як ми побачимо далі, це пов'язано з їх *більш високим пріоритетом*. ## Пріоритет оператора Ящо вираз має більше одного оператора, порядок виконання визначається їх *пріоритетом*, або, іншими словами, неявним порядком пріоритетів операторів. -Зі школи ми всі знаємо, що множення у виразі `1 + 2 * 2` повинно бути вираховано перед додаванням. Саме це і є пріоритетом. Кажуть, що множення має *більш високий пріоритет*, ніж додавання. +Зі школи ми всі знаємо, що множення у виразі `1 + 2 * 2` повинно бути обчислене перед додаванням. Саме це і є пріоритетом. Кажуть, що множення має *більш високий пріоритет*, ніж додавання. Дужки перевизначають будь-який пріоритет, тому, якщо ми не задоволенні неявним приорітетом, ми можемо використовувати дужки, щоб змінити його. Наприклад: `(1 + 2) * 2`. -У JavaScript є багато операторів. Кожен оператор має відповідний номер пріоритету. Першим виконується той оператор, який має найбільший номер. Якщо пріоритет є одниковим, порядок виконання — зліва направо. +У JavaScript є багато операторів. Кожен оператор має відповідний номер пріоритету. Першим виконується той оператор, який має найбільший номер. Якщо пріоритет є однаковим, порядок виконання — зліва направо. Ось витяг із [таблиці пріоритетів](https://developer.mozilla.org/en/JavaScript/Reference/operators/operator_precedence) (вам не потрібно запам'ятовувати це, але зверніть увагу, що унарні оператори вище за відповідні бінарні): @@ -147,7 +147,7 @@ alert( +apples + +oranges ); // 5 | 13 | додавання | `+` | | 13 | віднімання | `-` | | ... | ... | ... | -| 3 | призначення | `=` | +| 3 | присвоювання | `=` | | ... | ... | ... | Як ми бачемо, "унарний плюс" має пріоритет `16`, який вище за `13` — пріоритет "додавання" (бінарний плюс). Саме тому, у виразі `"+apples + +oranges"`, унарні плюси виконуються до додавання (бінарного плюса). @@ -164,7 +164,7 @@ let x = 2 * 2 + 1; alert( x ); // 5 ``` -Можливе лангюгове присвоювання: +Можливе ланцюгове присвоювання: ```js run let a, b, c; @@ -178,7 +178,7 @@ alert( b ); // 4 alert( c ); // 4 ``` -Лангюгове присвоювання виконується справа наліво. Спочатку обчислюється самий правий вираз `2 + 2`, а потім присвоюється зінним ліворуч : `c`, `b` and `a`. Наприкінці всі змінні мають спільне значення. +Ланцюгове присвоювання виконується справа наліво. Спочатку обчислюється самий правий вираз `2 + 2`, а потім присвоюється зінним ліворуч : `c`, `b` and `a`. Наприкінці всі змінні мають спільне значення. ````smart header="Оператор присвоювання `\"=\"` повертає значення" Оператор завжди повертає значення. Це очевидно для більшості з них, як додавання `+` або множення `*`. Але оператор присвоювання також додтримується цього правила. @@ -199,7 +199,7 @@ alert( a ); // 3 alert( c ); // 0 ``` -У наведенному вище прикладі результат `(a = b + 1)` є значенням, яке присвоюється змінній `a` (тобто `3`). Потім вона використовується для віднімання від `3`. +У наведенному вище прикладі результат `(a = b + 1)` є значенням, яке присвоюється змінній `a` (тобто `3`). Потім воне використовується для віднімання від `3`. Смішний код, чи не так? Ми повинні зрозуміти, як це працює, бо іноді ми бачимо подібне у бібліотеках третьої сторони, але самі не повинні писати нічого подібного. Такі трюки, безумовно, не роблять код більш ясним або читабельним. ```` @@ -208,14 +208,14 @@ alert( c ); // 0 Оператор залишку `%`, незважаючи на свій зовнішній вигляд, не пов'язаний з відсотками. -Результатом `a % b` є залишок цілочисельного ділення `a` на `b`. +Результатом `a % b` є залишком цілочисельного ділення `a` на `b`. Наприклад: ```js run -alert( 5 % 2 ); // 1 — залишок від 5 розділеного на 2 -alert( 8 % 3 ); // 2 — залишок від 8 розділеного на 3 -alert( 6 % 3 ); // 0 — залишок від 6 розділеного на 3 +alert( 5 % 2 ); // 1 — залишок від 5 поділеного на 2 +alert( 8 % 3 ); // 2 — залишок від 8 поділеного на 3 +alert( 6 % 3 ); // 0 — залишок від 6 поділеного на 3 ``` ## Піднесення до степеня ** @@ -277,7 +277,7 @@ alert( 8 ** (1/3) ); // 2 (степінь 1/3 — це теж саме, що і Чи є різниця? Так, але ми можемо побачити її якщо будемо використовувати повернене значення `++/--`. -Давайте розберемось. Як відомо, усі оператори повертають значення. Інкремент/декремент не є винятком. Префіксна форма повертає нове значення, тоді як постфіксна форма повертає повертає старе значення (до збільшення/зменшення). +Давайте розберемось. Як відомо, усі оператори повертають значення. Інкремент/декремент не є винятком. Префіксна форма повертає нове значення, тоді як постфіксна форма повертає старе значення (до збільшення/зменшення). Щоб побачитит різницю, наведемо приклад: @@ -325,7 +325,7 @@ alert(a); // *!*1*/!* ``` ````smart header="Інкремент/декремент серед інших операторів" -Оператори `++/--` також можуть використовуватись всередені виразів. Їх пріоритет віще за більшість інщих арифметичних операцій. +Оператори `++/--` також можуть використовуватись всередені виразів. Їх пріоритет вище за більшість інщих арифметичних операцій. Наприклад: @@ -384,7 +384,7 @@ n = n + 5; n = n * 2; ``` -Це запис скоротити за допомогою операторів `+=` та `*=`: +Цей запис може бути скорочений за допомогою операторів `+=` та `*=`: ```js run let n = 2; @@ -396,7 +396,7 @@ alert( n ); // 14 Короткий "модифікуй-та-присвоюй" оператор існує для всіх арифметичних та побітових операторів: `/=`, `-=`, тощо. -Такі оператори мають такуж перевагу, як і звичайне присвоювання, тому вони виконуються після більшості інших обчисленнь: +Такі оператори мають таку ж перевагу, як і звичайне присвоювання, тому вони виконуються після більшості інших обчисленнь: ```js run let n = 2; @@ -408,7 +408,7 @@ alert( n ); // 16 (права частина обчислюється перш ## Кома -Оператор кома `,` є одним за найрідкіших та незвичайних операторів. Іноді використовується для написання бальш короткого коду, тому нам потрібно знати його, щоб зрозуміти, що відбувається. +Оператор кома `,` є одним з найрідкіших та незвичайних операторів. Іноді використовується для написання більш короткого коду, тому нам потрібно знати його, щоб зрозуміти, що відбувається. Оператор кома дозволяє обчислити кілька виразів, розділивши їх комою `,`. Кожен з них обчислюється, але повертається тільки результат останнього. @@ -437,7 +437,7 @@ alert( a ); // 7 (результат обчислення 3 + 4) Наприклад: ```js -// три операціх в одному рядку +// три операції в одному рядку for (*!*a = 1, b = 3, c = a * b*/!*; a < 10; a++) { ... } From b8c37c3c3e7eb873db0c63951ef5972a687b30e2 Mon Sep 17 00:00:00 2001 From: Yuriy Ostapyuk Date: Sat, 25 May 2019 00:18:21 +0300 Subject: [PATCH 07/10] correction --- 1-js/02-first-steps/07-operators/2-assignment-result/task.md | 2 +- 1-js/02-first-steps/07-operators/article.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/1-js/02-first-steps/07-operators/2-assignment-result/task.md b/1-js/02-first-steps/07-operators/2-assignment-result/task.md index bcae7416d..58b05e471 100644 --- a/1-js/02-first-steps/07-operators/2-assignment-result/task.md +++ b/1-js/02-first-steps/07-operators/2-assignment-result/task.md @@ -2,7 +2,7 @@ importance: 3 --- -# Рузльтат присвоювання +# Результат присвоювання Які значення мають `a` та `x` після виконання коду нижче? diff --git a/1-js/02-first-steps/07-operators/article.md b/1-js/02-first-steps/07-operators/article.md index 2df30d12f..9a395b608 100644 --- a/1-js/02-first-steps/07-operators/article.md +++ b/1-js/02-first-steps/07-operators/article.md @@ -4,12 +4,12 @@ У цьому розділі ми зупинимося на аспектах операторів, які не охоплені шкільною арифметикою. -## Тарміни: "унарний", "бінарний", "операнд" +## Терміни: "унарний", "бінарний", "операнд" Перш ніж ми почнемо, давайте розберемо певну загальну термінологію. - *Операнд* -- це те, до чого затосовуються оператори. Наприклад, у множенні `5 * 2` є два операнди: лівий операнд `5` і правий операнд `2`. Іноді люди називають їх "аргументами", а не "операндами". -- Опреатор є *унарним*, якщо він має один операнд. Наприклад, унарне заперечення `-` змінює знак числа: +- Оператор є *унарним*, якщо він має один операнд. Наприклад, унарне заперечення `-` змінює знак числа: ```js run let x = 1; From a5236a0e6120e80a0804f35c86b1308f03372e44 Mon Sep 17 00:00:00 2001 From: Yuriy Ostapyuk Date: Sat, 25 May 2019 00:25:57 +0300 Subject: [PATCH 08/10] correction --- 1-js/02-first-steps/07-operators/article.md | 22 ++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/1-js/02-first-steps/07-operators/article.md b/1-js/02-first-steps/07-operators/article.md index 9a395b608..061dec069 100644 --- a/1-js/02-first-steps/07-operators/article.md +++ b/1-js/02-first-steps/07-operators/article.md @@ -147,16 +147,16 @@ alert( +apples + +oranges ); // 5 | 13 | додавання | `+` | | 13 | віднімання | `-` | | ... | ... | ... | -| 3 | присвоювання | `=` | +| 3 | присвоєння | `=` | | ... | ... | ... | Як ми бачемо, "унарний плюс" має пріоритет `16`, який вище за `13` — пріоритет "додавання" (бінарний плюс). Саме тому, у виразі `"+apples + +oranges"`, унарні плюси виконуються до додавання (бінарного плюса). -## Присвоювання +## Присвоєння -Зазначемо, що присвоювання `=` також є оператором. Воно є в таблиці з пріоритетами і має дуже низький пріоритет `3`. +Зазначемо, що присвоєння `=` також є оператором. Воно є в таблиці з пріоритетами і має дуже низький пріоритет `3`. -Тому, коли ми присвоюємо значення змінній, наприклад, `x = 2 * 2 + 1`, спочатку виконуються обчислення, а потім виконується присвоювання `=`, зберігаючи результат у `x`. +Тому, коли ми присвоюємо значення змінній, наприклад, `x = 2 * 2 + 1`, спочатку виконуються обчислення, а потім виконується присвоєння `=`, зберігаючи результат у `x`. ```js let x = 2 * 2 + 1; @@ -164,7 +164,7 @@ let x = 2 * 2 + 1; alert( x ); // 5 ``` -Можливе ланцюгове присвоювання: +Можливе ланцюгове присвоєння: ```js run let a, b, c; @@ -178,14 +178,14 @@ alert( b ); // 4 alert( c ); // 4 ``` -Ланцюгове присвоювання виконується справа наліво. Спочатку обчислюється самий правий вираз `2 + 2`, а потім присвоюється зінним ліворуч : `c`, `b` and `a`. Наприкінці всі змінні мають спільне значення. +Ланцюгове присвоєння виконується справа наліво. Спочатку обчислюється самий правий вираз `2 + 2`, а потім присвоюється зінним ліворуч : `c`, `b` and `a`. Наприкінці всі змінні мають спільне значення. -````smart header="Оператор присвоювання `\"=\"` повертає значення" -Оператор завжди повертає значення. Це очевидно для більшості з них, як додавання `+` або множення `*`. Але оператор присвоювання також додтримується цього правила. +````smart header="Оператор присвоєння `\"=\"` повертає значення" +Оператор завжди повертає значення. Це очевидно для більшості з них, як додавання `+` або множення `*`. Але оператор присвоєння також додтримується цього правила. Виклик `x = значення` записує `значення` у `x`, *а потім повертає його*. -Ось демонстрація, яка використовує присвоювання як частину більш складного виразу: +Ось демонстрація, яка використовує присвоєння як частину більш складного виразу: ```js run let a = 1; @@ -396,7 +396,7 @@ alert( n ); // 14 Короткий "модифікуй-та-присвоюй" оператор існує для всіх арифметичних та побітових операторів: `/=`, `-=`, тощо. -Такі оператори мають таку ж перевагу, як і звичайне присвоювання, тому вони виконуються після більшості інших обчисленнь: +Такі оператори мають таку ж перевагу, як і звичайне присвоєння, тому вони виконуються після більшості інших обчисленнь: ```js run let n = 2; @@ -427,7 +427,7 @@ alert( a ); // 7 (результат обчислення 3 + 4) ```smart header="Кома має дуже низький пріоритет" Зверніть увагу, що оператор кома має дуже низький пріоритет, нижчий за `=`, тому дужки є важливими в наведеному вище прикладі. -Без них: `a = 1 + 2, 3 + 4` обчислює спочатку `+`, підсумовуючи числа у `a = 3, 7`, потім оператор присвоювання `=` присвоює `a = 3`, і нарешті число після коми, `7`, не обробляється, тому його ігнорують. +Без них: `a = 1 + 2, 3 + 4` обчислює спочатку `+`, підсумовуючи числа у `a = 3, 7`, потім оператор присвоєння `=` присвоює `a = 3`, і нарешті число після коми, `7`, не обробляється, тому його ігнорують. ``` Чому нам потрібен оператор, що викидає все, окрім останньої частини? From 0c9ef76e8114034ab694a667535210364b451ab6 Mon Sep 17 00:00:00 2001 From: Yuriy Ostapyuk Date: Sat, 25 May 2019 00:27:07 +0300 Subject: [PATCH 09/10] correction --- 1-js/02-first-steps/07-operators/2-assignment-result/task.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/1-js/02-first-steps/07-operators/2-assignment-result/task.md b/1-js/02-first-steps/07-operators/2-assignment-result/task.md index 58b05e471..f20afdd8a 100644 --- a/1-js/02-first-steps/07-operators/2-assignment-result/task.md +++ b/1-js/02-first-steps/07-operators/2-assignment-result/task.md @@ -2,7 +2,7 @@ importance: 3 --- -# Результат присвоювання +# Результат присвоєння Які значення мають `a` та `x` після виконання коду нижче? From c314d4346ef6921dc700a919b62fc3713951a9b0 Mon Sep 17 00:00:00 2001 From: Taras Date: Sat, 25 May 2019 15:30:32 +0300 Subject: [PATCH 10/10] small language corrections --- 1-js/02-first-steps/07-operators/article.md | 52 ++++++++++----------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/1-js/02-first-steps/07-operators/article.md b/1-js/02-first-steps/07-operators/article.md index 061dec069..ffc45bf5a 100644 --- a/1-js/02-first-steps/07-operators/article.md +++ b/1-js/02-first-steps/07-operators/article.md @@ -1,6 +1,6 @@ # Оператори -Ми знаємо багато операторів зі школи. Це такі речі, як додавання `+`, множення `*`, віднімання `-`, тощо. +Зі шкільної програми, ми знаємо багато арифметичний операцій, такі як додавання `+`, множення `*`, віднімання `-`, тощо. У цьому розділі ми зупинимося на аспектах операторів, які не охоплені шкільною арифметикою. @@ -26,7 +26,7 @@ alert( y - x ); // 2, бінарний мінус віднімає значення ``` - Формально, ми говоримо про два різні оператори: унарне заперечення (єдиний операнд: змінює знак) та бінарне віднімання (два опернди: віднімає). + Формально, ми говоримо про два різні оператори: унарне заперечення (єдиний операнд: змінює знак) та бінарне віднімання (два операнди: віднімає). ## Об'єднання рядків, бінарний + @@ -50,13 +50,13 @@ alert( '1' + 2 ); // "12" alert( 2 + '1' ); // "21" ``` -Бачите, не має значення, чи перший операнд є рядком або другий. Правило просте: якщо будь-який операнд є радком, інший також перетворюється на рядок. +Бачите, не має значення, чи перший операнд є рядком чи другий. Правило просте: якщо будь-який операнд є рядком, інший також перетворюється на рядок. Однак зверніть увагу, що операції виконуються зліва направо. Якщо є два числа, за якими йде рядок, числа будуть додані перед перетворенням на рядок: ```js run -alert(2 + 2 + '1' ); // "41" а не "221" +alert(2 + 2 + '1' ); // "41", а не "221" ``` Об'єднання рядків і перетворення є особливою ознакою бінарного плюса `+`. Інші арифметичні оператори працюють тільки з числами і завжди перетворюють свої операнди на числа. @@ -121,23 +121,23 @@ alert( +apples + +oranges ); // 5 // alert( Number(apples) + Number(oranges) ); // 5 ``` -З точки зору математика, надмір плюсів може здатися дивним. Але з точки зору програміста, немає нічого особливого: спочатку застосовується унарні плюси, вони перетворюють рядки на числа, а потім бінарний плюс підсумовує їх. +З точки зору математики, надмірні плюси можуть здатися дивними. Але з точки зору програміста, немає нічого особливого: спочатку застосовується унарні плюси, вони перетворюють рядки на числа, а потім бінарний плюс підсумовує їх. Чому унарні плюси застосовуються до значень перед бінарними плюсами? Як ми побачимо далі, це пов'язано з їх *більш високим пріоритетом*. ## Пріоритет оператора -Ящо вираз має більше одного оператора, порядок виконання визначається їх *пріоритетом*, або, іншими словами, неявним порядком пріоритетів операторів. +Якщо вираз має більше одного оператора, порядок виконання визначається їх *пріоритетом*, або, іншими словами, неявним порядком пріоритетів операторів. -Зі школи ми всі знаємо, що множення у виразі `1 + 2 * 2` повинно бути обчислене перед додаванням. Саме це і є пріоритетом. Кажуть, що множення має *більш високий пріоритет*, ніж додавання. +Зі школи ми всі знаємо, що множення у виразі `1 + 2 * 2` повинно бути обчислене перед додаванням. Саме це і є пріоритетом. Кажуть, що множення має *вищий пріоритет*, ніж додавання. Дужки перевизначають будь-який пріоритет, тому, якщо ми не задоволенні неявним приорітетом, ми можемо використовувати дужки, щоб змінити його. Наприклад: `(1 + 2) * 2`. -У JavaScript є багато операторів. Кожен оператор має відповідний номер пріоритету. Першим виконується той оператор, який має найбільший номер. Якщо пріоритет є однаковим, порядок виконання — зліва направо. +У JavaScript є багато операторів. Кожен оператор має відповідний номер пріоритету. Першим виконується той оператор, який має найбільший номер пріоритету. Якщо пріоритет є однаковим, порядок виконання — зліва направо. -Ось витяг із [таблиці пріоритетів](https://developer.mozilla.org/en/JavaScript/Reference/operators/operator_precedence) (вам не потрібно запам'ятовувати це, але зверніть увагу, що унарні оператори вище за відповідні бінарні): +Ось витяг із [таблиці пріоритетів](https://developer.mozilla.org/en/JavaScript/Reference/operators/operator_precedence) (вам не потрібно це запам'ятовувати, але зверніть увагу, що унарні оператори мають вищий пріоритет за відповідні бінарні): -| Приорітет | Ім'я | Знак | +| Пріоритет | Ім'я | Знак | |------------|------|------| | ... | ... | ... | | 16 | унарний плюс | `+` | @@ -150,7 +150,7 @@ alert( +apples + +oranges ); // 5 | 3 | присвоєння | `=` | | ... | ... | ... | -Як ми бачемо, "унарний плюс" має пріоритет `16`, який вище за `13` — пріоритет "додавання" (бінарний плюс). Саме тому, у виразі `"+apples + +oranges"`, унарні плюси виконуються до додавання (бінарного плюса). +Як ми бачемо, "унарний плюс" має пріоритет `16`, що вище за `13` — пріоритет "додавання" (бінарний плюс). Саме тому, у виразі `"+apples + +oranges"`, унарні плюси виконуються до додавання (бінарного плюса). ## Присвоєння @@ -178,7 +178,7 @@ alert( b ); // 4 alert( c ); // 4 ``` -Ланцюгове присвоєння виконується справа наліво. Спочатку обчислюється самий правий вираз `2 + 2`, а потім присвоюється зінним ліворуч : `c`, `b` and `a`. Наприкінці всі змінні мають спільне значення. +Ланцюгове присвоєння виконується справа наліво. Спочатку обчислюється самий правий вираз `2 + 2`, а потім присвоюється змінним ліворуч: `c`, `b` та `a`. В результаті всі змінні мають спільне значення. ````smart header="Оператор присвоєння `\"=\"` повертає значення" Оператор завжди повертає значення. Це очевидно для більшості з них, як додавання `+` або множення `*`. Але оператор присвоєння також додтримується цього правила. @@ -199,9 +199,9 @@ alert( a ); // 3 alert( c ); // 0 ``` -У наведенному вище прикладі результат `(a = b + 1)` є значенням, яке присвоюється змінній `a` (тобто `3`). Потім воне використовується для віднімання від `3`. +У наведенному вище прикладі результат `(a = b + 1)` є значенням, яке присвоюється змінній `a` (тобто `3`). Потім воно використовується для віднімання від `3`. -Смішний код, чи не так? Ми повинні зрозуміти, як це працює, бо іноді ми бачимо подібне у бібліотеках третьої сторони, але самі не повинні писати нічого подібного. Такі трюки, безумовно, не роблять код більш ясним або читабельним. +Смішний код, чи не так? Ми повинні зрозуміти, як це працює, бо іноді ми бачимо подібне у сторонніх бібліотеках, але самі не повинні писати нічого подібного. Такі трюки, безумовно, не роблять код більш ясним або читабельним. ```` ## Залишок % @@ -256,7 +256,7 @@ alert( 8 ** (1/3) ); // 2 (степінь 1/3 — це теж саме, що і counter++; // працює так само, як counter = counter + 1, але коротше alert( counter ); // 3 ``` -- **Декремент** `--` зменьшує змінну на 1: +- **Декремент** `--` зменшує змінну на 1: ```js run no-beautify let counter = 2; @@ -265,7 +265,7 @@ alert( 8 ** (1/3) ); // 2 (степінь 1/3 — це теж саме, що і ``` ```warn -Інкремент/декремент можуть застосовуватись лише до змінних. Спроба використовувати їх на значенні як `5++` дасть помилку. +Інкремент/декремент можуть застосовуватись лише до змінних. Спроба використати їх на значенні як `5++` дасть помилку. ``` Оператори `++` та `--` можуть розташовуватись до або після змінної. @@ -279,7 +279,7 @@ alert( 8 ** (1/3) ); // 2 (степінь 1/3 — це теж саме, що і Давайте розберемось. Як відомо, усі оператори повертають значення. Інкремент/декремент не є винятком. Префіксна форма повертає нове значення, тоді як постфіксна форма повертає старе значення (до збільшення/зменшення). -Щоб побачитит різницю, наведемо приклад: +Щоб побачити різницю, наведемо приклад: ```js run let counter = 1; @@ -325,7 +325,7 @@ alert(a); // *!*1*/!* ``` ````smart header="Інкремент/декремент серед інших операторів" -Оператори `++/--` також можуть використовуватись всередені виразів. Їх пріоритет вище за більшість інщих арифметичних операцій. +Оператори `++/--` також можуть використовуватись всередені виразів. Їх пріоритет вищий за більшість інщих арифметичних операцій. Наприклад: @@ -338,10 +338,10 @@ alert( 2 * ++counter ); // 4 ```js run let counter = 1; -alert( 2 * counter++ ); // 2, тому що counter++ повертається "старе" значення +alert( 2 * counter++ ); // 2, тому що counter++ повертає "старе" значення ``` -Не дивлячісь на те, що з технічної точки зору це допустимо, таке використання робить код меньш читабельним. Один рядок робить кілька речей -- не є добре. +Не дивлячись на те, що з технічної точки зору це допустимо, таке використання робить код менш читабельним. Коли один рядок робить кілька речей -- це не добре. При читанні коду швидке "вертикальне" сканування оком може легко пропустити щось подібне до `counter++` і не буде очевидним, що змінна була збільшена. @@ -370,11 +370,11 @@ counter++; - RIGHT SHIFT ( `>>` ) - ZERO-FILL RIGHT SHIFT ( `>>>` ) -Ці оператори використовуються дуже рідко. Цоб їх зрозуміти, нам потрібно заглибитись у представлення числа на низькому рівні і зараз не самий оптимальний час для цього, тим більше, що нам вони не будуть потрібні найближчим часом. Якщо вам цікаво, ви можете прочитати статтю [Bitwise Operators](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) на MDN. Це було би більш практично зробити, коли виникне реальна потреба. +Ці оператори використовуються дуже рідко. Щоб їх зрозуміти, нам потрібно заглибитись у представлення числа на низькому рівні і зараз не самий оптимальний час для цього, тим більше, що нам вони не будуть потрібні найближчим часом. Якщо вам цікаво, ви можете прочитати статтю [Bitwise Operators](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators) на MDN. Це було би більш практично зробити, коли виникне реальна потреба. -## Змінити-на-місці +## Оператор "модифікувати та присвоїти" -Часто нам потрібно застосувати оператор до змінної та зберегти новий результат у ту ж саму змінну. +Часто нам потрібно застосувати оператор до змінної і зберегти новий результат у ту ж саму змінну. Наприклад: @@ -389,12 +389,12 @@ n = n * 2; ```js run let n = 2; n += 5; // тепер n = 7 (теж саме, що і n = n + 5) -n *= 2; // now n = 14 (теж саме, що і n = n * 2) +n *= 2; // тепер n = 14 (теж саме, що і n = n * 2) alert( n ); // 14 ``` -Короткий "модифікуй-та-присвоюй" оператор існує для всіх арифметичних та побітових операторів: `/=`, `-=`, тощо. +Короткий оператор "модифікувати та присвоїти" існує для всіх арифметичних та побітових операторів: `/=`, `-=`, тощо. Такі оператори мають таку ж перевагу, як і звичайне присвоєння, тому вони виконуються після більшості інших обчисленнь: @@ -427,7 +427,7 @@ alert( a ); // 7 (результат обчислення 3 + 4) ```smart header="Кома має дуже низький пріоритет" Зверніть увагу, що оператор кома має дуже низький пріоритет, нижчий за `=`, тому дужки є важливими в наведеному вище прикладі. -Без них: `a = 1 + 2, 3 + 4` обчислює спочатку `+`, підсумовуючи числа у `a = 3, 7`, потім оператор присвоєння `=` присвоює `a = 3`, і нарешті число після коми, `7`, не обробляється, тому його ігнорують. +Без них: `a = 1 + 2, 3 + 4` обчислює спочатку `+`, підсумовуючи числа у `a = 3, 7`, потім оператор присвоєння `=` присвоює `a = 3`, і нарешті число після коми, `7`, не обробляється та ігнорується. ``` Чому нам потрібен оператор, що викидає все, окрім останньої частини? pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy