Merge branch 'master' into patch-2

This commit is contained in:
Ilya Kantor 2018-12-24 12:45:27 +03:00 committed by GitHub
commit bc72141bb0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
22 changed files with 43 additions and 39 deletions

View file

@ -2,23 +2,22 @@
A code editor is the place where programmers spend most of their time.
There are two archetypes: IDE and lightweight editors. Many people feel comfortable choosing one tool of each type.
There are two main types of code editors: IDEs and lightweight editors. Many people use one tool of each type.
## IDE
The term [IDE](https://en.wikipedia.org/wiki/Integrated_development_environment) (Integrated Development Environment) means a powerful editor with many features that usually operates on a "whole project." As the name suggests, that's not just an editor, but a full-scale "development environment."
The term [IDE](https://en.wikipedia.org/wiki/Integrated_development_environment) (Integrated Development Environment) refers to a powerful editor with many features that usually operates on a "whole project." As the name suggests, it's not just an editor, but a full-scale "development environment."
An IDE loads the project (can be many files), allows navigation between files, provides autocompletion based on the whole project (not just the open file), integrates with a version management system (like [git](https://git-scm.com/)), a testing environment and other "project-level" stuff.
An IDE loads the project (which can be many files), allows navigation between files, provides autocompletion based on the whole project (not just the open file), and integrates with a version management system (like [git](https://git-scm.com/)), a testing environment, and other "project-level" stuff.
If you haven't considered selecting an IDE yet, look at the following variants:
If you haven't selected an IDE yet, consider the following options:
- [WebStorm](http://www.jetbrains.com/webstorm/) for frontend development and other editors of the same company if you need additional languages (paid).
- [Visual Studio Code](https://code.visualstudio.com/) (free).
- [WebStorm](http://www.jetbrains.com/webstorm/) for frontend development. The same company offers other editors for other languages (paid).
- [Netbeans](http://netbeans.org/) (paid).
All of the IDEs are cross-platform.
All of these IDEs are cross-platform.
For Windows, there's also a "Visual Studio" editor, don't confuse it with "Visual Studio Code." "Visual Studio" is a paid and mighty Windows-only editor, well-suited for the .NET platform. A free version of it is called ([Visual Studio Community](https://www.visualstudio.com/vs/community/).
For Windows, there's also "Visual Studio", not to be confused with "Visual Studio Code." "Visual Studio" is a paid and mighty Windows-only editor, well-suited for the .NET platform. A free version of it is called [Visual Studio Community](https://www.visualstudio.com/vs/community/).
Many IDEs are paid but have a trial period. Their cost is usually negligible compared to a qualified developer's salary, so just choose the best one for you.
@ -34,7 +33,7 @@ In practice, lightweight editors may have a lot of plugins including directory-l
The following options deserve your attention:
- [Visual Studio Code](https://code.visualstudio.com/) (cross-platform, free).
- [Visual Studio Code](https://code.visualstudio.com/) (cross-platform, free) also has many IDE-like features.
- [Atom](https://atom.io/) (cross-platform, free).
- [Sublime Text](http://www.sublimetext.com) (cross-platform, shareware).
- [Notepad++](https://notepad-plus-plus.org/) (Windows, free).
@ -46,7 +45,7 @@ The personal preference of the author is to have both an IDE for projects and a
I'm using:
- [WebStorm](http://www.jetbrains.com/webstorm/) for JS, and if there is one more language in the project, then I switch to one of the other JetBrains offerings listed above.
- As an IDE for JS -- [WebStorm](http://www.jetbrains.com/webstorm/) (I switch to one of the other JetBrains offerings when using other languages)
- As a lightweight editor -- [Sublime Text](http://www.sublimetext.com) or [Atom](https://atom.io/).
## Let's not argue
@ -55,4 +54,4 @@ The editors in the lists above are those that either I or my friends whom I cons
There are other great editors in our big world. Please choose the one you like the most.
The choice of an editor, like any other tool, is individual and depends on your projects, habits, personal preferences.
The choice of an editor, like any other tool, is individual and depends on your projects, habits, and personal preferences.

View file

@ -206,6 +206,7 @@ function showMessage(from, text = anotherFunction()) {
```smart header="Evaluation of default parameters"
In JavaScript, a default parameter is evaluated every time the function is called without the respective parameter. In the example above, `anotherFunction()` is called every time `someMessage()` is called without the `text` parameter. This is in contrast to some other languages like Python, where any default parameters are evaluated only once during the initial interpretation.
```

View file

@ -56,7 +56,7 @@ A *breakpoint* is a point of code where the debugger will automatically pause th
While the code is paused, we can examine current variables, execute commands in the console etc. In other words, we can debug it.
We can always find a list of breakpoints in the right pane. That's useful when we have many breakpoints in various files. It allows to:
We can always find a list of breakpoints in the right pane. That's useful when we have many breakpoints in various files. It allows us to:
- Quickly jump to the breakpoint in the code (by clicking on it in the right pane).
- Temporarily disable the breakpoint by unchecking it.
- Remove the breakpoint by right-clicking and selecting Remove.

View file

@ -233,7 +233,7 @@ Grouping is done with a nested `describe`:
describe("pow", function() {
*!*
describe("raises x to power n", function() {
describe("raises x to power 3", function() {
*/!*
function makeTest(x) {

View file

@ -1,6 +1,6 @@
describe("pow", function() {
describe("raises x to power n", function() {
describe("raises x to power 3", function() {
function makeTest(x) {
let expected = x * x * x;

View file

@ -1,6 +1,6 @@
describe("pow", function() {
describe("raises x to power n", function() {
describe("raises x to power 3", function() {
function makeTest(x) {
let expected = x * x * x;

View file

@ -1,6 +1,6 @@
describe("pow", function() {
describe("raises x to power n", function() {
describe("raises x to power 3", function() {
function makeTest(x) {
let expected = x * x * x;

View file

@ -1 +1,5 @@
```js run
function extractCurrencyValue(str) {
return +str.slice(1);
}
```

View file

@ -1,6 +1,6 @@
```js run no-beautify
function sortByName(arr) {
arr.sort((a, b) => a.name > b.name);
arr.sort((a, b) => b.name > a.name ? 1 : -1);
}
let john = { name: "John", age: 25 };

View file

@ -45,7 +45,7 @@ let user = {
};
```
- `Object.keys(user) = [name, age]`
- `Object.keys(user) = ["name", "age"]`
- `Object.values(user) = ["John", 30]`
- `Object.entries(user) = [ ["name","John"], ["age",30] ]`

View file

@ -475,7 +475,7 @@ They look like this:
Here a Function Expression is created and immediately called. So the code executes right away and has its own private variables.
The Function Expression is wrapped with brackets `(function {...})`, because when JavaScript meets `"function"` in the main code flow, it understands it as the start of a Function Declaration. But a Function Declaration must have a name, so there will be an error:
The Function Expression is wrapped with parenthesis `(function {...})`, because when JavaScript meets `"function"` in the main code flow, it understands it as the start of a Function Declaration. But a Function Declaration must have a name, so there will be an error:
```js run
// Error: Unexpected token (
@ -497,7 +497,7 @@ function go() {
}(); // <-- can't call Function Declaration immediately
```
So, round brackets are needed to show JavaScript that the function is created in the context of another expression, and hence it's a Function Expression. It needs no name and can be called immediately.
So, parenthesis are needed to show JavaScript that the function is created in the context of another expression, and hence it's a Function Expression. It needs no name and can be called immediately.
There are other ways to tell JavaScript that we mean Function Expression:

View file

@ -112,7 +112,7 @@ let rabbit = {
let longEar = {
earLength: 10,
__proto__: rabbit
}
};
// walk is taken from the prototype chain
longEar.walk(); // Animal walk
@ -146,7 +146,7 @@ let animal = {
let rabbit = {
__proto__: animal
}
};
*!*
rabbit.walk = function() {

View file

@ -2,7 +2,7 @@ importance: 5
---
# The difference beteeen calls
# The difference between calls
Let's create a new `rabbit` object:

View file

@ -185,7 +185,7 @@ try {
The new class `PropertyRequiredError` is easy to use: we only need to pass the property name: `new PropertyRequiredError(property)`. The human-readable `message` is generated by the constructor.
Please note that `this.name` in `PropertyRequiredError` constructor is again assigned manually. That may become a bit tedius -- to assign `this.name = <class name>` when creating each custom error. But there's a way out. We can make our own "basic error" class that removes this burden from our shoulders by using `this.constructor.name` for `this.name` in the constructor. And then inherit from it.
Please note that `this.name` in `PropertyRequiredError` constructor is again assigned manually. That may become a bit tedious -- to assign `this.name = <class name>` when creating each custom error. But there's a way out. We can make our own "basic error" class that removes this burden from our shoulders by using `this.constructor.name` for `this.name` in the constructor. And then inherit from it.
Let's call it `MyError`.