Skip to content

Commit e21ca71

Browse files
authored
Merge pull request #83 from vahmelk99/master
Nullish coalescing operator '??'
2 parents 246ec37 + 10f0b14 commit e21ca71

File tree

1 file changed

+63
-63
lines changed
  • 1-js/02-first-steps/12-nullish-coalescing-operator

1 file changed

+63
-63
lines changed
Lines changed: 63 additions & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -1,94 +1,94 @@
1-
# Nullish coalescing operator '??'
1+
# Null֊ի միավորման (Nullish coalescing) օպերատոր '??'
22

33
[recent browser="new"]
44

5-
The nullish coalescing operator is written as two question marks `??`.
5+
Null֊ի միավորման օպերատորը գրվում է երկու հարցականի նշանի միջոցով՝ `??`։
66

7-
As it treats `null` and `undefined` similarly, we'll use a special term here, in this article. We'll say that an expression is "defined" when it's neither `null` nor `undefined`.
7+
Քանի որ այն վերաբերվում է `null` և `undefined` արժեքներին, մենք կօգտագործենք հատուկ տերմին այս հոդվածում։ Կասենք, որ արտահայտությունը "որոշված" է, եթե դրա արժեքը ո՛չ `null` է, ո՛չ `undefined`։
88

9-
The result of `a ?? b` is:
10-
- if `a` is defined, then `a`,
11-
- if `a` isn't defined, then `b`.
9+
`a ?? b` արտահայտության արժեքը կլինի՝
10+
- եթե `a`֊ն որոշված է, ապա `a`,
11+
- եթե `a`֊ն որոշված չէ, ապա `b`։
1212

13-
In other words, `??` returns the first argument if it's not `null/undefined`. Otherwise, the second one.
13+
Այլ կերպ ասած, `??` օպերատորը վերադարձնում է առաջին արգումենտը, եթե դրա արժեքը `null/undefined` չէ։ Հակառակ դեպքում՝ երկրորդը։
1414

15-
The nullish coalescing operator isn't anything completely new. It's just a nice syntax to get the first "defined" value of the two.
15+
Null֊ի միավորման օպերատորը ամենևին նոր բան չէ, այն ուղղակի սիրուն գրելաձև է՝ երկու արժեքներից առաջին "որոշված" արժեքը ստանալու։
1616

17-
We can rewrite `result = a ?? b` using the operators that we already know, like this:
17+
Կարող ենք գրել `result = a ?? b` արտահայտությունը օգտագործելով մեզ արդեն հայտնի օպերատորները․
1818

1919
```js
2020
result = (a !== null && a !== undefined) ? a : b;
2121
```
2222

23-
Now it should be absolutely clear what `??` does. Let's see where it helps.
23+
Հիմա արդեն պետք է պարզ լինի, թե ինչ է անում `??`֊ը։ Տեսնենք, թե որտեղ կարող է այն օգտակար լինել։
2424

25-
The common use case for `??` is to provide a default value for a potentially undefined variable.
25+
`??`֊ի հաճախ կիրառվում է պոտենցիալ չորոշված փոփոխականի փոխարեն լռելյայն (default) արժեք տալու համար:
2626

27-
For example, here we show `user` if defined, otherwise `Anonymous`:
27+
Օրինակ, այստեղ ցուցադրում ենք `user`, եթե այն որոշված է, հակառակ դեպքում `Անանուն`
2828

2929
```js run
3030
let user;
3131

32-
alert(user ?? "Anonymous"); // Anonymous (user not defined)
32+
alert(user ?? "Անանուն"); // Անանուն (user֊ը որոշված չէ)
3333
```
3434
35-
Here's the example with `user` assigned to a name:
35+
Ահա օրինակ, երբ `user`֊ին վերագրված է անուն․
3636
3737
```js run
38-
let user = "John";
38+
let user = "Ջոն";
3939

40-
alert(user ?? "Anonymous"); // John (user defined)
40+
alert(user ?? "Անանուն"); // Ջոն (user֊ը որոշված է)
4141
```
4242
43-
We can also use a sequence of `??` to select the first value from a list that isn't `null/undefined`.
43+
Մենք կարող ենք նաև օգտագործել `??`֊ից կազմված շարան, առաջին ոչ `null/undefined` արժեքը վերցնելու համար։
4444
45-
Let's say we have a user's data in variables `firstName`, `lastName` or `nickName`. All of them may be not defined, if the user decided not to enter a value.
45+
Ենթադրենք ունենք օգտատիրոջ տվյալները հետևյալ փոփոխականների մեջ՝ `firstName`, `lastName`, `nickName`։ Դրանք բոլորը կարող են որոշված չլինել, եթե օգտատերը որոշի չմուտքագրել արժեք։
4646
47-
We'd like to display the user name using one of these variables, or show "Anonymous" if all of them aren't defined.
47+
Մենք ցանկանում ենք ցուցադրել օգտատիրոջ անունը, օգտագործելով տրված փոփոխականներից մեկը, կամ ցուցադրել "Անանուն", եթե դրանցից ոչ մեկ որոշված չէ։
4848
49-
Let's use the `??` operator for that:
49+
Օգտագործենք `??` օպերատորը․
5050
5151
```js run
5252
let firstName = null;
5353
let lastName = null;
54-
let nickName = "Supercoder";
54+
let nickName = "Սուպերկոդեռ";
5555

56-
// shows the first defined value:
56+
// ցուցադրում է առաջին որոշված արժեքը․
5757
*!*
58-
alert(firstName ?? lastName ?? nickName ?? "Anonymous"); // Supercoder
58+
alert(firstName ?? lastName ?? nickName ?? "Անանուն"); // Սուպերկոդեռ
5959
*/!*
6060
```
6161
62-
## Comparison with ||
62+
## Համեմատում ||֊ի հետ
6363
64-
The OR `||` operator can be used in the same way as `??`, as it was described in the [previous chapter](info:logical-operators#or-finds-the-first-truthy-value).
64+
ԿԱՄ `||` օպերատորը կարող է օգտագործվել նույն կերպ ինչ `??`, որը նկարագրված է [նախորդ հոդվածում](info:logical-operators#or-finds-the-first-truthy-value)։
6565
66-
For example, in the code above we could replace `??` with `||` and still get the same result:
66+
Օրինակ վերևի ծրագրում կարող ենք `??`֊ը փոխարինել `||`֊ով և ստանալ նույն արդյունքը․
6767
6868
```js run
6969
let firstName = null;
7070
let lastName = null;
71-
let nickName = "Supercoder";
71+
let nickName = "Սուպերկոդեռ";
7272

73-
// shows the first truthy value:
73+
// ցուցադրում է առաջին որոշված արժեքը․
7474
*!*
75-
alert(firstName || lastName || nickName || "Anonymous"); // Supercoder
75+
alert(firstName || lastName || nickName || "Անանուն"); // Սուպերկոդեռ
7676
*/!*
7777
```
7878
79-
Historically, the OR `||` operator was there first. It exists since the beginning of JavaScript, so developers were using it for such purposes for a long time.
79+
ԿԱՄ `||` օպերատորը կար JavaScript֊ի ստեղծման պահից ի վեր, և ծրագրավորողները օգտագործում էին այն այսպիսի դեպքերի համար շատ երկար ժամանակ։
8080
81-
On the other hand, the nullish coalescing operator `??` was added to JavaScript only recently, and the reason for that was that people weren't quite happy with `||`.
81+
Իսկ null֊ի միավորման օպերատորը `??` ավելացվել է JavaScript֊ում վերջերս, և դրա պատճառը այն է, որ ծրագրավորողները այնքան էլ գոհ չէին `||`֊ից։
8282
83-
The important difference between them is that:
84-
- `||` returns the first *truthy* value.
85-
- `??` returns the first *defined* value.
83+
Կարևոր տարբերությունը դրանց միջև․
84+
- `||`֊ը վերադարձնում է առաջին *ճշմարիտ* արժեքը։
85+
- `??`֊ը վերադարձնում է առաջին *որոշված* արժեքը։
8686
87-
In other words, `||` doesn't distinguish between `false`, `0`, an empty string `""` and `null/undefined`. They are all the same -- falsy values. If any of these is the first argument of `||`, then we'll get the second argument as the result.
87+
Այլ կերպ ասած, `||`֊ը չի տարբերակում `false`, `0`, դատարկ տող `""` և `null/undefined` արժեքները։ Դրանք բոլորը նույնն են -- սխալական արժեքներ։ Եթե սրանցից ինչ֊որ մեկը լինի առաջին արգումենտ `||`֊ի համար, ապա մենք կստանանք երկրորդ արգումենտը արդյունքում։
8888
89-
In practice though, we may want to use default value only when the variable is `null/undefined`. That is, when the value is really unknown/not set.
89+
Բայց պրակտիկայում լինում են դեպքեր երբ, մենք կարիք ենք ունենում օգտագործել լռելյայն արժեք միայն այն դեպքում, երբ փոփոխականը `null/undefined` է։ Դա այն դեպքն է, երբ արժեքը իրոք անհայտ է, կամ ոչ վերագրված։
9090
91-
For example, consider this:
91+
Դիտարկենք հետևյալ օրինակը․
9292
9393
```js run
9494
let height = 0;
@@ -97,73 +97,73 @@ alert(height || 100); // 100
9797
alert(height ?? 100); // 0
9898
```
9999
100-
- The `height || 100` checks `height` for being a falsy value, and it's `0`, falsy indeed.
101-
- so the result of `||` is the second argument, `100`.
102-
- The `height ?? 100` checks `height` for being `null/undefined`, and it's not,
103-
- so the result is `height` "as is", that is `0`.
100+
- `height || 100` արտահայտությունը ստուգում է, արդյոք `height`֊ը սխալական է, թե ոչ։ Այն `0` է, որն էլ սխալական է,
101+
- այսպիսով `||`֊ի արդյունքը կլինի երկրորդ արգումենտը՝ `100`։
102+
- `height ?? 100` արտահայտությունը ստուգում է, արդյոք `height`֊ը `null/undefined` է, թե ոչ, որն էլ այդպիսին չէ,
103+
- այսպիսով արդյունքը կլինի `height`, այսինքն `0`։
104104
105-
In practice, the zero height is often a valid value, that shouldn't be replaced with the default. So `??` does just the right thing.
105+
Պրակտիկայում զրոն վավեր (valid) արժեք է, որը չպետք է փոխարինվի լռելյայն արժեքով։ Այսինքն `??`֊ը անում է այն ինչ մեզ պետք է։
106106
107-
## Precedence
107+
## Նախապատվություն
108108
109-
The precedence of the `??` operator is about the same as `||`, just a bit lower. It equals `5` in the [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table), while `||` is `6`.
109+
`??`֊ի նախապատվությունը գրեթե նույնն է ինչ `||`֊ինը։ Այն մի քիչ ցածր է՝ `5` [MDN աղյուսակում](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table), իսկ `||`֊ինը՝ `6`։
110110
111-
That means that, just like `||`, the nullish coalescing operator `??` is evaluated before `=` and `?`, but after most other operations, such as `+`, `*`.
111+
Դա նշանակում է, որ ինչպես `||`֊ի դեպքում, null֊ի միավորման օպերատոր `??`֊ը կատարվում է `=` և `?` օպերատորներից առաջ, բայց շատ այլ օպերատորնեից հետո, ինչպիսիք են `+`, `*`։
112112
113-
So if we'd like to choose a value with `??` in an expression with other operators, consider adding parentheses:
113+
Այսպիսով, եթե մենք օգտագործում ենք `??`֊ը այլ օպերատորների հետ միասին մեկ արտահայտությունում՝ արժեք ընտրելու համար, պետք է նաև ավելացնել փակագծեր․
114114
115115
```js run
116116
let height = null;
117117
let width = null;
118118

119-
// important: use parentheses
119+
// կարևոր է օգտագործել փակագծեր
120120
let area = (height ?? 100) * (width ?? 50);
121121

122122
alert(area); // 5000
123123
```
124124
125-
Otherwise, if we omit parentheses, then as `*` has the higher precedence than `??`, it would execute first, leading to incorrect results.
125+
Հակառակ դեպքում, եթե չդնենք փակագծերը, ապա, քանի որ `*`֊ի նախապատվությունը ավելի բարձր է քան `??`֊ինը, այն կաշխատի առաջինը, որի արդյունքում էլ կստանանք սխալ պատասխան։
126126
127127
```js
128-
// without parentheses
128+
// առանց փակագծեր
129129
let area = height ?? 100 * width ?? 50;
130130

131-
// ...works the same as this (probably not what we want):
131+
// ...աշխատում է ինչպես հետևյալը (որը այն չէ ինչ մենք ուզում ենք)․
132132
let area = height ?? (100 * width) ?? 50;
133133
```
134134
135-
### Using ?? with && or ||
135+
### ??֊ի օգտագործումը && և ||֊ի հետ
136136
137-
Due to safety reasons, JavaScript forbids using `??` together with `&&` and `||` operators, unless the precedence is explicitly specified with parentheses.
137+
Անվտանգության նկատառումներից ելնելով JavaScript֊ը արգելում է օգտագործել `??`֊ը `&&` և `||` օպերատորների հետ, բացառությամբ այն դեպքերի, երբ հստակ փակագծերով նշված է հերթականությունը։
138138
139-
The code below triggers a syntax error:
139+
Ներքևում գրված ծրագիրը կաշխատի սինտաքսի սխալով (syntax error)․
140140
141141
```js run
142-
let x = 1 && 2 ?? 3; // Syntax error
142+
let x = 1 && 2 ?? 3; // Սինտաքսի սխալ
143143
```
144144
145-
The limitation is surely debatable, it was added to the language specification with the purpose to avoid programming mistakes, when people start to switch from `||` to `??`.
145+
Այս սահմանափակումը ախոս քննարկման ենթակա է, այն ավելացվել է լեզվում, որպեսզի խուսափվեն ծրագրային սխալները, երբ ծրագրավորողը սկսում է անցում կատարել `||`֊ից `??`֊ին։
146146
147-
Use explicit parentheses to work around it:
147+
Օգտագործեք փակագծեր, որպեսզի այն աշխատի․
148148
149149
```js run
150150
*!*
151-
let x = (1 && 2) ?? 3; // Works
151+
let x = (1 && 2) ?? 3; // Աշխատում է
152152
*/!*
153153

154154
alert(x); // 2
155155
```
156156
157-
## Summary
157+
## Ամփոփում
158158
159-
- The nullish coalescing operator `??` provides a short way to choose the first "defined" value from a list.
159+
- Null֊ի միավորման օպերատոր `??`֊ը տրամադրում է կարճ ձև ընտրելու առաջին "որոշված" արժեքը շարքից։
160160
161-
It's used to assign default values to variables:
161+
Օգտագործվում է փոփոխականին լռելյայն արժեք վերագրելու համար․
162162
163163
```js
164-
// set height=100, if height is null or undefined
164+
// դնում ենք height֊ի արժեքը 100, եթե height֊ը null կամ undefined է
165165
height = height ?? 100;
166166
```
167167
168-
- The operator `??` has a very low precedence, only a bit higher than `?` and `=`, so consider adding parentheses when using it in an expression.
169-
- It's forbidden to use it with `||` or `&&` without explicit parentheses.
168+
- `??` օպերատորը ունի շատ ցածր նախապատվության աստիճան, այն մի քիչ բարձր է, քան `?` և `=`֊ինը, այդ պատճառով կարևոր է հիշել ավելացնել փակագծեր, երբ այն օգտագործում ենք ինչ֊որ արտահայտության մեջ։
169+
- Արգելված է օգտագործել այն `||` կամ `&&` օպերատորների հետ առանց փակագծերի։

0 commit comments

Comments
 (0)