Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: [Week-9] Translation and Update of NodeJS Module #1338

Merged
90 changes: 45 additions & 45 deletions stage1/modules/node-materials/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,48 +2,48 @@

![Node.js logo](node/images/node-logo.jpg)

**Node.js** — среда выполнения JavaScript вне браузера.

В основе Node.js — виртуальная машина V8. Она была создана компанией Google для браузера Chrome. V8 умеет выполнять JavaScript быстрее и экономнее, чем любая другая.

Node.js используется для создания веб-серверов, самостоятельных приложений, программ для компьютеров и мобильных устройств, а также программирования микроконтроллеров.

У Node.js только одна платформа, в которой в результате постоянного улучшения появляется поддержка новейших возможностей Javascript. В отличие от браузерного JS, не нужно заботиться о поддержке устаревших браузеров, практически никогда не нужно транспилировать код под старые версии платформы (однако, как и в случае с браузерным JS, перед использованием новейших возможностей языка рекомендуется проверить, что они уже поддерживаются выбранной версией Node.js).

Компании выбирают Node.js за скорость и простоту разработки, возможность использовать один язык при создании фронтенда и бэкенда, скорость работы созданных приложений, кроссплатформенность, экономию ресурсов.

К относительным недостаткам Node.js можно отнести то, что он несколько хуже подходит для решения задач, требующих интенсивных вычислений (хотя с появлением `worker threads` ситуация значительно улучшилась).

## Содержание

1. [Начало работы](node/node-introduction.md)
2. [Операции ввода/вывода](node/node-io.md)
3. [Стандартные потоки ввода/вывода](node/node-stdio.md)
4. [Аргументы командной строки](node/node-argv.md)
5. [Доступ к файловой системе](node/node-fs-access.md)
6. [Модули](node/node-module.md)
- [модуль path](node/module/path.md)
- [модуль fs](node/module/fs.md)
- [модуль os](node/module/os.md)
- [модуль http](node/module/http.md)
- [модули, устанавливаемые через npm](node/module/npm-module.md)
- [создание собственных модулей](node/module/create-module.md)
7. [События](node/events.md)
8. [Потоки](node/stream.md)
- [поток чтения](node/stream-readable.md)
- [поток записи](node/stream-writable.md)
- [объединение потоков](node/stream-pipes.md)
9. [Проекты](node/projects/projects.md)
- [приложение для заметок](node/projects/notes.md)
- [приложение Таймер](node/projects/timer.md)
- [приложение Github](node/projects/github-app.md)

## Материалы

- [Введение в node.js](http://imnotgenius.com/vvedeniya-v-node-js/)
- [Гайд по Node.js](https://nodejsdev.ru/guide/)
- [Скринкаст по Node.js](https://learn.javascript.ru/screencast/nodejs)
- [Создание первого приложения на Node](https://webref.ru/dev/first-node-app)
- [Руководство по Node.js - metanit](https://metanit.com/web/nodejs/)
- [Пишем API на Node.js](https://www.youtube.com/playlist?list=PLY4rE9dstrJzrDaSPKOrhNgQ19GhVl19u)
- [Герман Волков. Node.js](https://youtu.be/qZ5xzkEdkhg) - [Презентация](https://drive.google.com/file/d/1P3mRxOQISJHEatmAEv5X_f1Qk8OEr9rZ/view)
**Node.js** — an open-source, cross-platform JavaScript runtime environment.

Node.js is based on the V8 virtual machine. It was created by Google for the Chrome browser. V8 can execute JavaScript faster and more efficiently than any other.

Node.js is used to create web servers, standalone applications, programs for computers and mobile devices, and to program microcontrollers.

Node.js has only one platform, and through continuous improvement, it supports the latest Javascript features. Unlike browser-based JS, you don't need to worry about supporting legacy browsers, and you almost never need to transpile code for older versions of the platform (however, as with browser-based JS, before using the latest language features, it is recommended to check that they are already supported by the selected version of Node.js).

Companies opt for Node.js due to its speedy and straightforward development, the convenience of using a single language for both frontend and backend, the rapid performance of the resulting applications, the capability to craft cross-platform software, and the cost-effective use of resources.

Node.js has its drawbacks, particularly in scenarios demanding intensive calculations, although the introduction of worker threads has notably enhanced its suitability in such cases.

## Table of Contents

1. [Getting Started](node/node-introduction.md)
2. [Input/Output Operations](node/node-io.md)
3. [Standard Input/Output Streams](node/node-stdio.md)
4. [Command Line Arguments](node/node-argv.md)
5. [File System Access](node/node-fs-access.md)
6. [Modules](node/node-module.md)
- [Path Module](node/module/path.md)
- [File System Module](node/module/fs.md)
- [Operating System Module](node/module/os.md)
- [HTTP Module](node/module/http.md)
- [Installing Modules via npm](node/module/npm-module.md)
- [Creating Custom Modules](node/module/create-module.md)
7. [Events](node/events.md)
8. [Streams](node/stream.md)
- [Readable Stream](node/stream-readable.md)
- [Writable Stream](node/stream-writable.md)
- [Combining Readable-Writable Streams](node/stream-pipes.md)
9. [Projects](node/projects/projects.md)
- [Notes App](node/projects/notes.md)
- [Timer App](node/projects/timer.md)
- [Github App](node/projects/github-app.md)

## Materials

- [How to Get Started with NodeJS](https://www.freecodecamp.org/news/get-started-with-nodejs/)
- [Introduction to NodeJS](https://youtu.be/JZXQ455OT3A?si=9bmAsMq0PDKB-4QA)
- [The Absolute Beginner's Guide to Node.js](https://www.cloudbees.com/blog/node-js-tutorial)
- [Node.js Tutorial for Beginners](https://youtu.be/-u-j7uqU7sI?si=LOEicYHfrPmxwftO)
- [Build a Node.js Project from scratch](https://anotheruiguy.gitbooks.io/nodeexpreslibsass_from-scratch/content/)
- [NodeJS Tutorial](https://www.geeksforgeeks.org/nodejs/)
- [Node.js Full Course for Beginners](https://youtu.be/f2EqECiTBL8?si=WosH_b9hgkH7MPqj)
66 changes: 32 additions & 34 deletions stage1/modules/node-materials/node/events.md
Original file line number Diff line number Diff line change
@@ -1,47 +1,47 @@
## Модуль events
## Events

[HOME](../README.md)

Модуль `Events` предназначен для работы с событиями.
The `Events` module is designed to work with events.

С событиями мы уже сталкивались раньше, когда читали файл
We have already encountered events earlier when reading a file:

```js
const { stdin, stdout } = process;
stdin.on("data", (data) => stdout.write(data));
```

и когда выводили сообщение при завершении работы программы
and when displaying a message upon the program's completion:

```js
const { stdout } = process;
process.on("exit", () => stdout.write("Удачи в изучении Node.js!"));
process.on("exit", () => stdout.write("Good luck learning Node.js!"));
```

Модуль `Events` позволяет создавать и генерировать свои собственные события.
The `Events` module allows you to create and generate your own events.

Импортируем класс `EventEmitter` из модуля `events`
Let's import the `EventEmitter` class from the `events` module:

```js
const EventEmitter = require("events");
```

Создадим экземпляр `EventEmitter` — объект `emitter`
Now, let's create an instance of `EventEmitter` called `emitter`:

```js
const EventEmitter = require("events");
const emitter = new EventEmitter();
```

У него есть два полезных метода:
It has two useful methods:

- `emit(<event>)` - генерирует событие `event`, заставляя срабатывать обработчики этого события у подписчиков
- `on(<event>, <handler>)` - подписка на события (выполнение функции `handler` действий при наступлении события `event`
- `emit(<event>)` - generates the event, causing the event handlers for this event to be triggered for subscribers
- `on(<event>, <handler>)` - subscribes to events (executes the `handler` function when the `event` occurs)

У метода `on(<event>, <handler>)` два аргумента:
The `on(<event>, <handler>)` method has two arguments:

- `event` - название события.
- `handler` - обработчик события (функция, которая сработает, когда событие произойдёт)
- `event` - the name of the event
- `handler` - the event handler (the function that will run when the event occurs)

```js
const EventEmitter = require("events");
Expand All @@ -50,8 +50,7 @@ const emitter = new EventEmitter();
emitter.on("start", () => console.log("Start"));
```

Мы подписались на событие `'start'` для объекта `emitter`. Теперь нам нужно сгенерировать это событие, чтобы сработал его обработчик
Для этого вызываем метод `emit()`, аргументом которого указываем название события
We subscribed to the `start` event for the `emitter` object. Now we need to generate this event to trigger its handler. To do this, we call the `emit()` method, specifying the event name as an argument:

```js
const EventEmitter = require("events");
Expand All @@ -62,10 +61,9 @@ emitter.on("start", () => console.log("Start"));
emitter.emit("start");
```

Запускаем файл с кодом, в консоли видим надпись 'Start'.
Самостоятельно созданное событие работает.
When we run the code file, we see the 'Start' message in the console. The custom event works.

При вызове события в методе `emit()` можно передать какое-то дополнительное значение (`payload`). Это значение будет передано в качестве аргумента в функцию-обработчик
When calling the `emit()` method for an event, you can pass some additional value (`payload`). This value will be passed as an argument to the handler function:

```js
const EventEmitter = require("events");
Expand All @@ -76,7 +74,7 @@ emitter.on("start", (message) => console.log(message));
emitter.emit("start", "Start message");
```

Таких значение можно передать несколько
You can pass multiple values as well:

```js
const EventEmitter = require("events");
Expand All @@ -87,7 +85,7 @@ emitter.on("start", (first, second) => console.log(`${first} and ${second}`));
emitter.emit("start", 1, 2); // 1 and 2
```

При подписке на событие его обработчик ставится в очередь обработчиков. Одному и тому же событию можно назначить несколько обработчиков (по умолчанию **не больше 10**, но это не жесткий лимит). Обработчики срабатывают в том порядке, в котором они были назначены:
When subscribing to an event, its handler is added to the handler queue. Multiple handlers (by default, **no more than 10**, but this is not a strict limit) can be assigned to the same event. Handlers are triggered in the order they were assigned:

```js
const EventEmitter = require("events");
Expand All @@ -99,10 +97,10 @@ const handler2 = () => console.log(2);
emitter.on("start", handler1);
emitter.on("start", handler2);

emitter.emit("start"); // выводит 1, затем 2
emitter.emit("start"); // outputs 1, then 2
```

Поставить назначенный позже обработчик в начало очереди нам поможет метод `prependListener`
To place a handler assigned later at the beginning of the queue, the `prependListener` method is used:

```js
const EventEmitter = require("events");
Expand All @@ -116,12 +114,12 @@ const handler4 = () => console.log(4);
emitter.on("start", handler1);
emitter.on("start", handler2);
emitter.on("start", handler3);
emitter.prependListener("start", handler4); // назначет позже, сработает раньше
emitter.prependListener("start", handler4); // assigned later, triggered earlier

emitter.emit("start"); // выведет цифры в следующем порядке: 4 => 1 => 2 => 3
emitter.emit("start"); // outputs numbers in the following order: 4 => 1 => 2 => 3
```

Один и тот же обработчик может быть назначен несколько раз:
The same handler can be assigned multiple times:

```js
const EventEmitter = require("events");
Expand All @@ -133,10 +131,10 @@ emitter.on("start", handler);
emitter.on("start", handler);
emitter.on("start", handler);

emitter.emit("start"); // выводит 1 трижды
emitter.emit("start"); // outputs 1 three times
```

Обработчик срабатывает на каждую генерацию события:
The handler is triggered for each event generation:

```js
const EventEmitter = require("events");
Expand All @@ -149,20 +147,20 @@ emitter.emit("start", "from"); // from
emitter.emit("start", "Node.js"); // Node.js
```

Если необходимо, чтобы обработчик срабатывал только один раз, для подписки используем метод `once()`
If you want the handler to be triggered only once, use the `once()` method for subscription:

```js
const EventEmitter = require("events");
const emitter = new EventEmitter();

emitter.once("start", (message) => console.log(message));

emitter.emit("start", "Hello"); // сработает только для этого вызова
emitter.emit("start", "Hello"); // works only for this call
emitter.emit("start", "from");
emitter.emit("start", "Node.js");
```

Удалить из очереди одну функцию-обработчик определенного события позволяет метод экземпляра `EventEmitter` `off()` (или его алиас `removeListener`)
To remove a specific event handler function from the queue, the `off()` method of the `EventEmitter` instance (or its alias `removeListener`) is used:

```js
const EventEmitter = require("events");
Expand All @@ -174,13 +172,13 @@ emitter.on("start", handler);

emitter.emit("start", "Hello"); // Hello

emitter.off("start", handler); // дальнейшие события не будут обработаны
emitter.off("start", handler); // further events will not be handled

emitter.emit("start", "from");
emitter.emit("start", "Node.js");
```

Иногда мы хотим, чтобы наш собственный класс имел API `EventEmitter`:
Sometimes, we want our custom class to have the `EventEmitter` API:

```js
const EventEmitter = require("events");
Expand All @@ -204,4 +202,4 @@ user.on("greetings", user.sayHi);
user.emit("greetings"); // Hi! My name is Vasya
```

Заметили странность? Как правило, в случае передачи метода объекта для использования в качестве обработчика происходит потеря контекста. Но не в этом случае, так как `this` внутри функции-обработчика ссылается на экземпляр `EventEmitter` (в нашем случае объект `user`).
Notice anything strange? Usually, when passing an object's method for use as an event handler, the context is lost. But not in this case because `this` inside the event handler function refers to the `EventEmitter` instance (in our case, the `user` object).
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Loading