You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
همچنین میتوانیم از دنبالهی `??` برای انتخاب کردن اولین مقدار در یک لیست که `null/undefined` نباشد استفاده کنیم.
50
44
51
-
<<<<<<< HEAD
52
45
فرض کنیم که دادهی کاربری را در متغیرهای `firstName`، `lastName` یا `nickName` ذخیره کردهایم. اگر کاربر تصمیم به وارد نکردن مقداری گرفته باشد، ممکن است همه آنها تعریف شده نباشند.
53
46
54
-
ما میخواهیم اسم کاربر را با استفاده از این متغیرها نمایش دهیم، یا اگر هیچ کدام تعریف شده نباشند "Anonymous" را نمایش دهیم.
55
-
=======
56
-
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 fill in the corresponding values.
57
-
58
-
We'd like to display the user name using one of these variables, or show "Anonymous" if all of them are `null/undefined`.
59
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
47
+
ما میخواهیم اسم کاربر را با استفاده از این متغیرها نمایش دهیم، یا اگر همه آنها `null/undefined` باشند، "Anonymous" را نمایش دهیم.
60
48
61
49
بیایید برای این کار از عملگر `??` استفاده کنیم:
62
50
@@ -122,11 +110,7 @@ alert(height ?? 100); // 0
122
110
123
111
این یعنی که درست مانند `||`، عملگر nullish coalescing `??` قبل از `=` و `?` ارزیابی میشود، اما بعد از بیشتر عملیاتها مانند `+`، `-` ارزیابی میشود.
124
112
125
-
<<<<<<< HEAD
126
-
پس اگر بخواهیم مقداری را با استفاده از `??` در یک عبارت که عملگرهای دیگر هم وجود دارند انتخاب کنیم، باید اضافه کردن پرانتز را در نظر بگیریم:
127
-
=======
128
-
So we may need to add parentheses in expressions like this:
129
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
113
+
پس شاید ما نیاز داشته باشیم که در عباراتی مانند کد پایین پرانتزها را اضافه کنیم:
130
114
131
115
```js run
132
116
let height =null;
@@ -144,11 +128,7 @@ alert(area); // 5000
144
128
// بدون پرانتز
145
129
let area = height ??100* width ??50;
146
130
147
-
<<<<<<<HEAD
148
-
// ...عبارت بالا مثل عبارت پایین عمل میکند (که احتمالا چیزی نیست که ما بخواهیم)
149
-
=======
150
-
// ...works this way (not what we want):
151
-
>>>>>>>7000ede297bfd688f9a3767e8ca43abd9242f322
131
+
// اینگونه کار میکند (احتمالا چیزی که ما میخوانیم نیست)...
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/13-while-for/article.md
+8-40Lines changed: 8 additions & 40 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -6,25 +6,21 @@
6
6
7
7
*حلقه ها* راهی برای تکرار یک کد برای چندین بار هستند.
8
8
9
-
<<<<<<< HEAD
10
9
## حلقه "while"
11
-
=======
12
-
```smart header="The for..of and for..in loops"
13
-
A small announcement for advanced readers.
10
+
```smart header="حلقههای for..of و for..in"
11
+
اعلانی برای خوانندههای پیشرفته.
14
12
15
13
This article covers only basic loops: `while`, `do..while` and `for(..;..;..)`.
14
+
این مقاله تنها حلقههای پایهای را پوشش میدهد: `while`، `do..while` و `for(..;..;..)`.
16
15
17
-
If you came to this article searching for other types of loops, here are the pointers:
16
+
اگر شما برای جستجوی انواع دیگر حلقه به این مقاله آمدهاید، اینجا اشاراتی به آنها را داریم:
18
17
19
-
- See [for..in](info:object#forin) to loop over object properties.
20
-
- See [for..of](info:array#loops) and [iterables](info:iterable) for looping over arrays and iterable objects.
18
+
- حلقه [for..in](info:object#forin) را برای حلقه زدن در ویژگیهای شیء ببینید.
19
+
- حلقه [for..of](info:array#loops) و [iterables](info:iterable) را برای حلقه زدن در آرایهها و شیءهای حلقهپذیر ببینید.
21
20
22
-
Otherwise, please read on.
21
+
در غیر این صورت، لطفا خواندن را ادامه دهید.
23
22
```
24
23
25
-
## The "while" loop
26
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
27
-
28
24
حلقه `while` سینتکس زیر را دارد:
29
25
30
26
```js
@@ -181,12 +177,8 @@ alert(i); // 3، قابل دیدن است، چون بیرون از حلقه تع
181
177
```
182
178
````
183
179
184
-
<<<<<<< HEAD
185
180
186
181
### قسمت های قابل جا انداختن
187
-
=======
188
-
### Skipping parts
189
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
190
182
191
183
هر قسمت `for` را می توان از قلم انداخت.
192
184
@@ -288,11 +280,7 @@ for (let i = 0; i < 10; i++) {
288
280
289
281
از دیدگاه فنی، این شبیه مثال بالا است. مسلما، ما می توانیم کد را داخل یک بلوک `if` بگذاریم به جای اینکه از `continue` استفاده کنیم.
290
282
291
-
<<<<<<< HEAD
292
-
اما به عنوان یک عارضه جانبی، یک سطح بیشتری از تو در تویی می سازد (صدا زدن `alert` داخل آکولادها). اگر کد داخل `if` بیشتر از چند خط باشد، ممکن است خوانایی کلی را کاهش دهد.
293
-
=======
294
-
But as a side effect, this created one more level of nesting (the `alert` call inside the curly braces). If the code inside of `if` is longer than a few lines, that may decrease the overall readability.
295
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
283
+
اما به عنوان یک عارضه جانبی، یک سطح بیشتری از تودرتویی می سازد (صدا زدن `alert` داخل آکولادها). اگر کد داخل `if` بیشتر از چند خط باشد، ممکن است خوانایی کلی را کاهش دهد.
296
284
````
297
285
298
286
````warn header="ممنوعیت `break/continue` در سمت راست '?'"
@@ -343,12 +331,7 @@ alert('تمام!');
343
331
344
332
`break` معمولی بعد از `input` فقط حلقه داخلی را متوقف می کند. این کافی نیست -- برچسب ها، به کمک می آیند!
345
333
346
-
<<<<<<< HEAD
347
334
یک *برچسب* مشخص کننده ای است که قبل از یک حلقه همراه دو نقطه می آید:
348
-
=======
349
-
A *label* is an identifier with a colon before a loop:
350
-
351
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
352
335
```js
353
336
labelName:for (...) {
354
337
...
@@ -370,12 +353,7 @@ labelName: for (...) {
370
353
// یک کاری با مقدار انجام بده...
371
354
}
372
355
}
373
-
<<<<<<<HEAD
374
356
alert('تمام!');
375
-
=======
376
-
377
-
alert('Done!');
378
-
>>>>>>>7000ede297bfd688f9a3767e8ca43abd9242f322
379
357
```
380
358
381
359
در کد بالا، `break outer` برای پیدا کردن برچسب `outer` بالا را جست و جو می کند و از آن حلقه خارج می شود.
@@ -394,24 +372,14 @@ for (let i = 0; i < 3; i++) { ... }
394
372
````warn header="برچسب ها اجازه \"پرش\" به جایی را نمی دهند"
395
373
برچسب ها به ما اجازه نمی دهند که به جای دلخواهی از کد بپریم.
396
374
397
-
<<<<<<< HEAD
398
375
برای مثال، انجام دادن این کار غیر ممکن است:
399
-
=======
400
-
For example, it is impossible to do this:
401
-
402
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
403
376
```js
404
377
break label; // پرش به برچسب پایین (کار نمی کند)
405
378
406
379
label: for (...)
407
380
```
408
381
409
-
<<<<<<< HEAD
410
382
یک دستور `break` باید در داخل بلوک کد باشد. از نظر فنی، آن بلوک می تواند هر بلوک کد برچسب زده باشد
411
-
=======
412
-
A `break` directive must be inside a code block. Technically, any labelled code block will do, e.g.:
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/14-switch/article.md
+1-5Lines changed: 1 addition & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -141,11 +141,7 @@ switch (a) {
141
141
142
142
حالا `3` و `5` پیام یکسانی نمایش میدهند.
143
143
144
-
<<<<<<< HEAD
145
-
این توانایی که میتوان caseهای مختلف را گروهبندی کرد، به این خاطر است که `switch/case` بدون `break` کار میکند. اینجا اجرای کد `case 3` از خط `(*)` شروع میشود و تا خط `case 5` ادامه پیدا میکند. چرا که هیچ `break` وجود ندارد.
146
-
=======
147
-
The ability to "group" cases is a side effect of how `switch/case` works without `break`. Here the execution of `case 3` starts from the line `(*)` and goes through `case 5`, because there's no `break`.
148
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
144
+
این توانایی که میتوان caseهای مختلف را گروهبندی کرد، به این خاطر است که `switch/case` بدون چگونه `break` کار میکند. اینجا اجرای کد `case 3` از خط `(*)` شروع میشود و تا خط `case 5` ادامه پیدا میکند. چرا که هیچ `break` وجود ندارد.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/15-function-basics/article.md
+12-25Lines changed: 12 additions & 25 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -176,13 +176,8 @@ alert( from ); // Ann
176
176
177
177
به عبارتی دیگر، بگذارید این مقررات را تعیین کنیم:
178
178
179
-
<<<<<<< HEAD
180
-
- یک پارامتر یک متغیر لیست شده درون پرانتزهای تعریف تابع (در زمان تعریف تابع) است.
181
-
- یک آرگومان مقداریست که به تابع موقع صدازدن آن پاس داده شده است.
182
-
=======
183
-
- A parameter is the variable listed inside the parentheses in the function declaration (it'sadeclarationtimeterm).
184
-
- An argument is the value that is passed to the function when it is called (it's a call time term).
185
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
179
+
- یک پارامتر یک متغیر لیست شده درون پرانتزهای تعریف تابع است (یک عبارت مخصوص زمان تعریف).
180
+
- یک آرگومان مقداریست که به تابع موقع صدازدن آن پاس داده شده است (یک عبارت مخصوص زمان فراخوانی).
186
181
187
182
ما توابع را با پارامترهایشان تعریف میکنیم، و سپس آنها را با آرگومانهایشان صدا میزنیم.
188
183
@@ -230,43 +225,39 @@ function showMessage(from, text = anotherFunction()) {
230
225
از سوی دیگر، این به طور مستقل فراخوانی میشود وقتی `text` وجود نداشته باشد.
231
226
```
232
227
233
-
<<<<<<< HEAD
234
228
### پارامترهای پیشفرض جایگزین
235
-
=======
236
-
````smart header="Default parameters in old JavaScript code"
237
-
Several years ago, JavaScript didn't support the syntax for default parameters. So people used other ways to specify them.
229
+
````smart header="پارامترهای پیشفرض در کد جاوااسکریپت قدیمی"
230
+
چند سال پیش، جاوااسکریپت از سینتکس برای پارامترهای پیشفرض پشتیبانی نمیکرد. پس افراد از روشهای دیگر برای تعیین آنها استفاده میکردند.
238
231
239
-
Nowadays, we can come across them in old scripts.
232
+
امروزه، در اسکریپتهای قدیمی میتوانیم با آنها برخورد داشته باشیم.
240
233
241
-
For example, an explicit check for `undefined`:
234
+
برای مثال، یک بررسی ضمنی برای `undefined`:
242
235
243
236
```js
244
237
function showMessage(from, text) {
245
238
*!*
246
239
if (text === undefined) {
247
-
text = 'no text given';
240
+
text = 'متنی داده نشده';
248
241
}
249
242
*/!*
250
243
251
244
alert( from + ": " + text );
252
245
}
253
246
```
254
247
255
-
...Or using the `||` operator:
248
+
...یا استفاده از عمگر `||`:
256
249
257
250
```js
258
251
function showMessage(from, text) {
259
-
// If the value of text is falsy, assign the default value
260
-
// this assumes that text == "" is the same as no text at all
261
-
text = text || 'no text given';
252
+
// بود، مقدار پیشفرض را تخصیص بده falsy از نوع text اگر مقدار
253
+
// با وجود نداشتن متن یکسان است text == "" این یعنی
254
+
text = text || 'متنی داده نشده';
262
255
...
263
256
}
264
257
```
265
258
````
266
259
267
260
268
-
### Alternative default parameters
269
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
270
261
271
262
گاهی اوقات این منطقی است که مقدارهای پیشفرض پارامترها را در تعریف تابع قرار ندهیم بلکه در مرحله بعدی یعنی حین اجرا شدن آن قرار دهیم.
272
263
@@ -531,11 +522,7 @@ function name(parameters, delimited, by, comma) {
531
522
532
523
برای قابل فهم و تمیز بودن کد، توصیه میشود از متغیرهای محلی و پارامترهای تابع را استفاده کنیم تا متغیرهای بیرونی.
533
524
534
-
<<<<<<< HEAD
535
-
فهم اینکه یک تابع پارامترها را میگیرد و با آنها کار میکند و سپس یک خروجی میدهد همیشه سادهتر است تا اینکه یک تابع که هیچ پارامتری نمیگیرد اما متغیرهای بیرونی را تغییر میدهد.
536
-
=======
537
-
It is always easier to understand a function which gets parameters, works with them and returns a result than a function which gets no parameters, but modifies outer variables as a side effect.
538
-
>>>>>>> 7000ede297bfd688f9a3767e8ca43abd9242f322
525
+
فهم یک تابع که پارامترهایی را میگیرد و با آنها کار میکند و سپس یک خروجی میدهد همیشه سادهتر است تا یک تابع که هیچ پارامتری نمیگیرد اما متغیرهای بیرونی را تغییر میدهد.
0 commit comments