Skip to content

Commit 76b3cce

Browse files
committed
translate 1-js/02-first-steps/15-function-expressions-arrows
1 parent 7687877 commit 76b3cce

1 file changed

Lines changed: 61 additions & 61 deletions

File tree

  • 1-js/02-first-steps/15-function-expressions-arrows

1-js/02-first-steps/15-function-expressions-arrows/article.md

Lines changed: 61 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -237,7 +237,7 @@ let sayHi = function(name) { // (*) магии больше нет
237237
};
238238
```
239239

240-
Функциональные выражения создаются тогда, когда выполнение доходит до них. Это случится только на строке, помеченной звёздочкой `(*)`. Слишком поздно.
240+
Функциональные Выражения создаются тогда, когда выполнение доходит до них. Это случится только на строке, помеченной звёздочкой `(*)`. Слишком поздно.
241241

242242
**Когда Объявление Функции создаётся для блока кода, оно становится доступно везде внутри блока. Но не снаружи него.**
243243

@@ -248,19 +248,19 @@ let sayHi = function(name) { // (*) магии больше нет
248248
Код, написанный подобным образом, работать не будет:
249249

250250
```js run
251-
let age = prompt("What is your age?", 18);
251+
let age = prompt("Сколько Вам лет?", 18);
252252
253253
// в зависимости от условия объявляем функцию
254254
if (age < 18) {
255255
256256
function welcome() {
257-
alert("Hello!");
257+
alert("Привет!");
258258
}
259259
260260
} else {
261261
262262
function welcome() {
263-
alert("Greetings!");
263+
alert("Здравствуйте!");
264264
}
265265
266266
}
@@ -271,7 +271,7 @@ welcome(); // Ошибка: welcome is not defined
271271
*/!*
272272
```
273273

274-
Это произошло, так как Объявление Функции видимо только внутри блока кода в котором располагается.
274+
Это произошло, так как Объявление Функции видимо только внутри блока кода, в котором располагается.
275275

276276
Вот ещё один пример:
277277

@@ -284,7 +284,7 @@ if (age < 18) {
284284
*/!*
285285
// |
286286
function welcome() { // |
287-
alert("Hello!"); // | Объявление Функции доступно
287+
alert("Привет!"); // | Объявление Функции доступно
288288
} // | во всём блоке кода, в котором объявлено
289289
// |
290290
*!*
@@ -294,7 +294,7 @@ if (age < 18) {
294294
} else {
295295
296296
function welcome() { // для age = 16, эта функция "welcome" никогда не создастся
297-
alert("Greetings!");
297+
alert("Здравствуйте!");
298298
}
299299
}
300300
@@ -306,87 +306,87 @@ welcome(); // Ошибка: welcome is not defined
306306
*/!*
307307
```
308308

309-
What can we do to make `welcome` visible outside of `if`?
309+
Что можно сделать, чтобы `welcome` была видима снаружи `if`?
310310

311-
The correct approach would be to use a Function Expression and assign `welcome` to the variable that is declared outside of `if` and has the proper visibility.
311+
Верным подходом будет воспользоваться Функциональным Выражением и присвоить значение `welcome` переменной, объявленной снаружи `if`, что обеспечит нам нужную видимость.
312312

313-
Now it works as intended:
313+
Теперь работает как надо:
314314

315315
```js run
316-
let age = prompt("What is your age?", 18);
316+
let age = prompt("Сколько Вам лет?", 18);
317317
318318
let welcome;
319319
320320
if (age < 18) {
321321
322322
welcome = function() {
323-
alert("Hello!");
323+
alert("Привет!");
324324
};
325325
326326
} else {
327327
328328
welcome = function() {
329-
alert("Greetings!");
329+
alert("Здравствуйте!");
330330
};
331331
332332
}
333333
334334
*!*
335-
welcome(); // ok now
335+
welcome(); // теперь всё в порядке
336336
*/!*
337337
```
338338

339-
Or we could simplify it even further using a question mark operator `?`:
339+
Можно упростить этот код ещё сильнее, используя оператор вопросительного знака `?`:
340340

341341
```js run
342-
let age = prompt("What is your age?", 18);
342+
let age = prompt("Сколько Вам лет?", 18);
343343
344344
let welcome = (age < 18) ?
345-
function() { alert("Hello!"); } :
346-
function() { alert("Greetings!"); };
345+
function() { alert("Привет!"); } :
346+
function() { alert("Здравствуйте!"); };
347347
348348
*!*
349-
welcome(); // ok now
349+
welcome(); // теперь всё в порядке
350350
*/!*
351351
```
352352

353353

354-
```smart header="When should you choose Function Declaration versus Function Expression?"
355-
As a rule of thumb, when we need to declare a function, the first to consider is Function Declaration syntax, the one we used before. It gives more freedom in how to organize our code, because we can call such functions before they are declared.
354+
```smart header="Когда использовать Объявление Функции, а когда Функциональное Выражение?"
355+
Как правило, если нам понадобилась функция в первую очередь нужно рассматривать синтаксис Объявления Функции, который мы использовали до этого. Это даёт нам больше свободы в том, как мы можем организовывать код. Функции, объявленные таким образом можно вызывать до их объявления.
356356
357-
It's also a little bit easier to look up `function f(…) {…}` in the code than `let f = function(…) {…}`. Function Declarations are more "eye-catching".
357+
Ещё такие функции `function f(…) {…}`, чуть более заметны в коде, чем `let f = function(…) {…}`. Объявления функций более распознаваемы.
358358
359-
...But if a Function Declaration does not suit us for some reason (we've seen an example above), then Function Expression should be used.
359+
...Но если Объявление Функции нам не подходит по какой-то причине (мы рассмотрели это в примере выше), тогда должно быть использовано Функциональное Выражение.
360360
```
361361

362362

363-
## Arrow functions [#arrow-functions]
363+
## Функции-стрелки [#arrow-functions]
364364

365-
There's one more very simple and concise syntax for creating functions, that's often better than Function Expressions. It's called "arrow functions", because it looks like this:
365+
Существует ещё более простой и краткий синтаксис для создания функций, который часто лучше, чем синтаксис Функциональных Выражений. Он называется "функции-стрелки" или "стрелочные функции" (arrow functions), т.к. выглядит следующим образом:
366366

367367

368368
```js
369369
let func = (arg1, arg2, ...argN) => expression
370370
```
371371

372-
...This creates a function `func` that has arguments `arg1..argN`, evaluates the `expression` on the right side with their use and returns its result.
372+
...Такой код создаёт функцию `func` с аргументами `arg1..argN` и вычисляет `expression` с правой стороны с их использованием, сразу возвращая результат.
373373

374-
In other words, it's roughly the same as:
374+
Другими словами, это почти так же как:
375375

376376
```js
377377
let func = function(arg1, arg2, ...argN) {
378378
return expression;
379379
};
380380
```
381381

382-
...But much more concise.
382+
...Но гораздо более кратко.
383383

384-
Let's see an example:
384+
Давайте взглянем на пример:
385385

386386
```js run
387387
let sum = (a, b) => a + b;
388388
389-
/* The arrow function is a shorter form of:
389+
/* Функция-стрелка более краткая форма:
390390
391391
let sum = function(a, b) {
392392
return a + b;
@@ -397,10 +397,10 @@ alert( sum(1, 2) ); // 3
397397
398398
```
399399

400-
If we have only one argument, then parentheses can be omitted, making that even shorter:
400+
Если у нас только один аргумент, то круглые скобки можно опустить, сделав запись ещё короче:
401401

402402
```js run
403-
// same as
403+
// тоже что и
404404
// let double = function(n) { return n * 2 }
405405
*!*
406406
let double = n => n * 2;
@@ -409,71 +409,71 @@ let double = n => n * 2;
409409
alert( double(3) ); // 6
410410
```
411411

412-
If there are no arguments, parentheses should be empty (but they should be present):
412+
Если нет аргументов, исользуются пустые круглые скобки (их указывать обязательно):
413413

414414
```js run
415415
let sayHi = () => alert("Hello!");
416416
417417
sayHi();
418418
```
419419

420-
Arrow functions can be used in the same way as Function Expressions.
420+
Функции-стрелки могут быть использован, в качестве Функциональныех Выражений.
421421

422-
For instance, here's the rewritten example with `welcome()`:
422+
Например, вот переписанный пример уже знакомой нам функции `welcome()`:
423423

424424
```js run
425-
let age = prompt("What is your age?", 18);
425+
let age = prompt("Сколько Вам лет?", 18);
426426
427427
let welcome = (age < 18) ?
428-
() => alert('Hello') :
429-
() => alert("Greetings!");
428+
() => alert('Привет') :
429+
() => alert("Здравствуйте!");
430430
431-
welcome(); // ok now
431+
welcome(); // теперь всё в порядке
432432
```
433433

434-
Arrow functions may appear unfamiliar and not very readable at first, but that quickly changes as the eyes get used to the structure.
434+
По началу Функции-стрелки могут позакаться необычными и трудно-читаемыми, но это быстро пройдёт, как только глаза привыкнут к этим конструкциям.
435435

436-
They are very convenient for simple one-line actions, when we're just too lazy to write many words.
436+
Они очень удобны для простых однострочных действий, когда бывает утомительно писать много слов.
437437

438-
```smart header="Multiline arrow functions"
438+
```smart header="Многострочные стрелочные функции"
439439
440-
The examples above took arguments from the left of `=>` and evaluated the right-side expression with them.
440+
В примерах выше аргументы использовались слева от `=>`, а справа вычислялось выражение с ними.
441441
442-
Sometimes we need something a little bit more complex, like multiple expressions or statements. It is also possible, but we should enclose them in curly braces. Then use a normal `return` within them.
442+
Иногда нам нужно кое-что более сложное, например, несколько выражений или инструкций. Это также возможно, но мы должны заключать такие выражения в фигурные скобки с использованием директивы `return` внутри них, как в обычной функции.
443443
444-
Like this:
444+
Например:
445445
446446
```js run
447-
let sum = (a, b) => { // the curly brace opens a multiline function
447+
let sum = (a, b) => { // фигурная скобка, открывающая тело многострочной функции
448448
let result = a + b;
449449
*!*
450-
return result; // if we use curly braces, use return to get results
450+
return result; // если используются фигурные скобки, должна использоваться `return`, чтобы вернуть результат
451451
*/!*
452452
};
453453

454454
alert( sum(1, 2) ); // 3
455455
```
456456

457-
```smart header="More to come"
458-
Here we praised arrow functions for brevity. But that's not all! Arrow functions have other interesting features. We'll return to them later in the chapter <info:arrow-functions>.
457+
```smart header="Кое-что ещё"
458+
Здесь мы рассмотрели Функции-стрелки, с позиции их более краткой записи. Но это далеко не всё! Стрелочные функциио обладают другими интересными особенностями. Мы вернёмся к ним позже в главе <info:arrow-functions>.
459459
460-
For now, we can already use them for one-line actions and callbacks.
460+
А пока, мы можем использовать их для простых однострочных действий и колбэков.
461461
```
462462

463-
## Summary
463+
## Итого
464464

465-
- Functions are values. They can be assigned, copied or declared in any place of the code.
466-
- If the function is declared as a separate statement in the main code flow, that's called a "Function Declaration".
467-
- If the function is created as a part of an expression, it's called a "Function Expression".
468-
- Function Declarations are processed before the code block is executed. They are visible everywhere in the block.
469-
- Function Expressions are created when the execution flow reaches them.
465+
- Функции это значения. Они могут быть присвоены, скопированы или объявлены в другом месте кода.
466+
- Если функция объявлена, как отдельная инструкция в основном потоке кода, то это "Объявление Функции".
467+
- Если функция была создана, как часть выражения, такая функция называется "Функциональным Выражением".
468+
- Объявления Функций обрабатываются перед выполненеи блока кода. Они видны во всём блоке.
469+
- Функциональные Выражения создаются, только когда поток выполнения достигает их.
470470

471471

472-
In most cases when we need to declare a function, a Function Declaration is preferable, because it is visible prior to the declaration itself. That gives us more flexibility in code organization, and is usually more readable.
472+
В большинстве случаев, когда нам нужно создать фукнцию, предпочтительно использовать Объявление Функции, т.к. оно видимо до своего объявления в коде. Это позволяет более гибко организовывать код, и обычно улучшает его читаемость.
473473

474-
So we should use a Function Expression only when a Function Declaration is not fit for the task. We've seen a couple of examples of that in this chapter, and will see more in the future.
474+
Таким образом, мы должны прибегать к Функциональным Выражениям в случае, когда Объявления Функций не подходят для нашей задачи. Мы рассмотрели несколько таких примеров в этой главе, и рассмотрим их ещё больше в будущем.
475475

476-
Arrow functions are handy for one-liners. They come in two flavors:
476+
Стрелочные функции очень удобны для однострочных действий. Они бывают двух типов:
477477

478-
1. Without curly braces: `(...args) => expression` -- the right side is an expression: the function evaluates it and returns the result.
479-
2. With curly braces: `(...args) => { body }` -- brackets allow us to write multiple statements inside the function, but we need an explicit `return` to return something.
478+
1. Без фигурных скобок: `(...args) => expression` -- правая сторона выражение: функция выполняет его и возвращает результат.
479+
2. С фигурными скобками: `(...args) => { body }` -- скобки позволяют нам писать многосточные инструкции внутри функции, но при этом необходимо указывать директиву `return`, чтобы вернуть какое либо значение.

0 commit comments

Comments
 (0)