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

JS to JavaScript #185

Merged
merged 1 commit into from
Apr 3, 2020
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
2 changes: 1 addition & 1 deletion modules/10-basics/10-hello-world/description.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ instructions: |
```javascript
console.log('Hello, World!');
```
Note that if you type `hello, woRld!` instead of `Hello, World!`, it will be counted us an absolutely different text, because in JS capital and small letters are different symbols. Letter size is called _case_ and in programming the frase _case is important_ is frequently used. This rule affects almost everything in code so get used to pay close attention to case.
Note that if you type `hello, woRld!` instead of `Hello, World!`, it will be counted us an absolutely different text, because in JavaScript capital and small letters are different symbols. Letter size is called _case_ and in programming the frase _case is important_ is frequently used. This rule affects almost everything in code so get used to pay close attention to case.

tips:
- |
Expand Down
2 changes: 1 addition & 1 deletion modules/10-basics/20-comments/description.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

name: Comments
theory: |
Almost every programming language allows you to add comments to your code. Interpreter doesn't evaluate comments, their only purpose is to give programmers opportunity to leave notes for themselves and others. There are two types of comments in JS:
Almost every programming language allows you to add comments to your code. Interpreter doesn't evaluate comments, their only purpose is to give programmers opportunity to leave notes for themselves and others. There are two types of comments in JavaScript:

**Single line comments** start with `//`. Any text or symbols that follow, won't be evaluated or executed.

Expand Down
2 changes: 1 addition & 1 deletion modules/10-basics/40-instructions/description.en.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ theory: |

but it's considered bad practice as it's hard to read.

Interpreter, the program which executes code in JavaScript needs such splitting. This interpreter in JS world is any browser (as it's able to JS code) or Node.js (in the same reason). The operation principle of any interpreter is (approximately) as follows. It reads the file with code, splits it into instructions and then executes them in turn.
Interpreter, the program which executes code in JavaScript needs such splitting. This interpreter in JavaScript world is any browser (as it's able to JavaScript code) or Node.js (in the same reason). The operation principle of any interpreter is (approximately) as follows. It reads the file with code, splits it into instructions and then executes them in turn.

instructions: |
Output these three names on the screen, one after the other: "Robert", "Stannis", "Renly".
Expand Down
2 changes: 1 addition & 1 deletion modules/30-variables/11-change/description.ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ theory: |

Переменные — мощная и, в тоже время, опасная вещь. Никогда нельзя быть точно уверенным, что внутри нее записано не проанализировав код, который находится перед переменной. Именно этим занимаются разработчики во время отладки, когда пытаются разобраться почему программа не работает или работает не так как задумано.

Как вы увидите позже, в JS есть не только переменные. Более того, переменные, не так часто используются с целью менять, намного чаще их используют с целью хранить.
Как вы увидите позже, в JavaScript есть не только переменные. Более того, переменные, не так часто используются с целью менять, намного чаще их используют с целью хранить.

instructions: |

Expand Down
2 changes: 1 addition & 1 deletion modules/30-variables/14-errors/description.ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ theory: |
let greeting = 'Father!';
```

Запуск программы, выше завершается с ошибкой _ReferenceError: greeting is not defined_. _ReferenceError_ - это ошибка обращения, она означает, что в коде используется имя (говорят идентификатор), который не определен. Причем в самой ошибке об этом говорят прямо: _greeting is not defined_, что переводится как _greeting не определен_. Кроме неправильного порядка определения, в JS встречаются банальные опечатки, причем как при использовании переменной, так и при ее объявлении.
Запуск программы, выше завершается с ошибкой _ReferenceError: greeting is not defined_. _ReferenceError_ - это ошибка обращения, она означает, что в коде используется имя (говорят идентификатор), который не определен. Причем в самой ошибке об этом говорят прямо: _greeting is not defined_, что переводится как _greeting не определен_. Кроме неправильного порядка определения, в JavaScript встречаются банальные опечатки, причем как при использовании переменной, так и при ее объявлении.

Количество подобных ошибок уменьшается за счет использования правильно настроенного редактора. Такой редактор подсвечивает имена, которые используются без объявления и предупреждает о возможных проблемах.

Expand Down
2 changes: 1 addition & 1 deletion modules/33-data-types/45-undefined/description.ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ theory: |

И хотя интерпретатор позволяет такое сделать, это нарушение семантики значения `undefined`, ведь в этом коде выполняется присваивание, а значит подставляется значение.

Интересный факт. JS один из немногих языков, в которых в явном виде присутствует понятие `undefined`. В остальных языках его роль выполняет значение `null`, которое, кстати, тоже есть в JavaScript.
Интересный факт. JavaScript один из немногих языков, в которых в явном виде присутствует понятие `undefined`. В остальных языках его роль выполняет значение `null`, которое, кстати, тоже есть в JavaScript.

_Вопрос на самопроверку. Почему нельзя объявить константу без указания значения?_

Expand Down
4 changes: 2 additions & 2 deletions modules/33-data-types/47-immutability/description.ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ theory: |
console.log(firstName); // => "Alexander"
```

Как это ни странно, но значение переменной `firstName` останется прежним, хотя код выполнится без ошибок. Так происходит из-за неизменяемости примитивных типов в JS, язык не дает никакой физической возможности поменять строку. Неизменяемость примитивных типов важна по многим причинам, ключевая - производительность. Но что делать если нам действительно ее нужно изменить? Для этого, как раз и существуют переменные:
Как это ни странно, но значение переменной `firstName` останется прежним, хотя код выполнится без ошибок. Так происходит из-за неизменяемости примитивных типов в JavaScript, язык не дает никакой физической возможности поменять строку. Неизменяемость примитивных типов важна по многим причинам, ключевая - производительность. Но что делать если нам действительно ее нужно изменить? Для этого, как раз и существуют переменные:

```javascript
let firstName = 'Alexander';
Expand All @@ -23,7 +23,7 @@ theory: |
console.log(firstName); // => "Blexander"
```

Есть большая разница между изменением значения переменной и изменением самого значения. Примитивные типы в JS поменять нельзя (а вот составные можно, подробнее о них уже на самом Хекслете), а вот заменить значение переменной - без проблем.
Есть большая разница между изменением значения переменной и изменением самого значения. Примитивные типы в JavaScript поменять нельзя (а вот составные можно, подробнее о них уже на самом Хекслете), а вот заменить значение переменной - без проблем.

instructions: |
Вам даны три константы с фамилиями разных людей. Составьте и выведите на экран слово из символов в таком порядке:
Expand Down
2 changes: 1 addition & 1 deletion modules/33-data-types/50-weak-typing/description.ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ theory: |

Несмотря на то, что `'7'` — это строка, а не число, интерпретатор JavaScript выдал ответ `17`, как если бы мы складывали две строки. Когда JavaScript видит несоответствие типов, он сам пытается преобразовать информацию. В данном случае он преобразовал число `1` в строку `'1'`, а потом спокойно сделал конкатенацию `'1'` и `'7'`.

Не все языки так делают. JavaScript — это язык со **слабой типизацией**. Он знает о существовании разных типов (числа, строки и др.), но относится к их использованию не очень строго, пытаясь преобразовывать информацию, когда это кажется разумным. Причем JS доходит до крайностей. Большинство выражений, не работающих в других языках, прекрасно работают в JS. Попробуйте выполнить любую арифметическую операцию подставив туда строки или любые другие типы данных. Вы увидите что они всегда будут работать и возвращать `NaN`, что довольно логично.
Не все языки так делают. JavaScript — это язык со **слабой типизацией**. Он знает о существовании разных типов (числа, строки и др.), но относится к их использованию не очень строго, пытаясь преобразовывать информацию, когда это кажется разумным. Причем JavaScript доходит до крайностей. Большинство выражений, не работающих в других языках, прекрасно работают в JavaScript. Попробуйте выполнить любую арифметическую операцию подставив туда строки или любые другие типы данных. Вы увидите что они всегда будут работать и возвращать `NaN`, что довольно логично.

```
const result = 'one' * 'two';
Expand Down
2 changes: 1 addition & 1 deletion modules/35-calling-functions/110-math/description.ru.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---

name: Математические функции JS
name: Математические функции JavaScript
theory: |

Объяснение функций в JavaScript немного осложняется структурой языка. Изначально он появился в браузерах и имел сильно ограниченные возможности по отношению к языкам общего назначения. Со временем все изменилось, и JavaScript стал мощным языком, захватившим клиентскую разработку и активно использующимся на сервере, но наследие осталось, так как нужно поддерживать обратную совместимость. Поэтому в некоторых местах есть несостыковки, которые нельзя объяснить системой, можно только махнуть рукой и сказать: "Так исторически сложилось".
Expand Down
2 changes: 1 addition & 1 deletion modules/35-calling-functions/350-stdlib/description.ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ theory: |
* Периодически открывайте раздел со стандартными функциями по изучаемой тематике и просто пробегайтесь по ним, изучая сигнатуры и способы использования.
* Чаще читайте чужой код, особенно код библиотек, которые вы используете. Он весь доступен на GitHub.

У JS есть свои особенности по структуре стандартной библиотеки. Так как его код может исполняться в разных средах, таких как серверное окружение или браузер, то возможности стандартной библиотеки сильно зависят от варианта использования. Например из браузера невозможно выполнять некоторые задачи, которые необходимо уметь выполнять на сервере. Документацию по серверной части необходимо смотреть на сайте https://nodejs.org. Серверные части стандартной библиотеки организованы в модули, у каждого модуля есть своя страница с описанием всех функций находящихся внутри него, например, модуль [fs](https://nodejs.org/api/fs.html) необходим для работы с файловой системой, через его функции происходит запись и чтение файлов.
У JavaScript есть свои особенности по структуре стандартной библиотеки. Так как его код может исполняться в разных средах, таких как серверное окружение или браузер, то возможности стандартной библиотеки сильно зависят от варианта использования. Например из браузера невозможно выполнять некоторые задачи, которые необходимо уметь выполнять на сервере. Документацию по серверной части необходимо смотреть на сайте https://nodejs.org. Серверные части стандартной библиотеки организованы в модули, у каждого модуля есть своя страница с описанием всех функций находящихся внутри него, например, модуль [fs](https://nodejs.org/api/fs.html) необходим для работы с файловой системой, через его функции происходит запись и чтение файлов.

А если говорить про браузер, то там вообще мало что есть. По большей части это какие-то базовые функции встроенные в сам язык, например те же [функции](https://developer.mozilla.org/ru/docs/Web/JavaScript/Reference/Global_Objects/Math) для работы с математикой. Остальные возможности добавляются через использование сторонних библиотек.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,7 +51,7 @@ theory: |
console.log(name.toUpperCase().toLowerCase().length.toString().length);
```

_С функциями подобный трюк не сработает, так как при обычном использовании они вкладываются друг в друга f(f(f())), что значительно ухудшает анализ. Но это не значит, что нельзя сделать красиво - можно и даже нужно. В других языках это реализуется через композицию функций или пайплайн-оператор, который, кстати говоря, постепенно начинает использоваться и в самом JS: https://github.com/tc39/proposal-pipeline-operator_
_С функциями подобный трюк не сработает, так как при обычном использовании они вкладываются друг в друга f(f(f())), что значительно ухудшает анализ. Но это не значит, что нельзя сделать красиво - можно и даже нужно. В других языках это реализуется через композицию функций или пайплайн-оператор, который, кстати говоря, постепенно начинает использоваться и в самом JavaScript: https://github.com/tc39/proposal-pipeline-operator_

instructions: |

Expand Down
2 changes: 1 addition & 1 deletion modules/38-properties/description.ru.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@

name: Свойства и Методы
description: |
Объектно-ориентированные возможности JS начинают проявляться буквально с первых программ.
Объектно-ориентированные возможности JavaScript начинают проявляться буквально с первых программ.
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
name: Упрощенный синтаксис функций
theory: |

По сравнению с некоторыми (в первую очередь функциональными) языками, определение функции в JS выглядит довольно громоздко:
По сравнению с некоторыми (в первую очередь функциональными) языками, определение функции в JavaScript выглядит довольно громоздко:

```javascript
const square = (x) => {
Expand Down