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
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/05-types/article.md
+2-10Lines changed: 2 additions & 10 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -46,23 +46,15 @@ n = 12.345;
46
46
alert( "not a number" / 2 ); // NaN، چنین تقسیمی اشتباه است
47
47
```
48
48
49
-
<<<<<<<HEAD
50
-
هر عملی بر روی `NaN` نتیجه `NaN` خواهد داشت:
51
-
=======
52
-
`NaN` is sticky. Any further mathematical operation on `NaN` returns `NaN`:
53
-
>>>>>>> bae0ef44d0208506f6e9b7f3421ee640ab41af2b
49
+
`NaN` دشوار است. هر عمل ریاضیاتی روی `NaN` مقدار `NaN` را برمیگرداند:
54
50
55
51
```js run
56
52
alert( NaN + 1 ); // NaN
57
53
alert( 3 * NaN ); // NaN
58
54
alert( "not a number" / 2 - 1 ); // NaN
59
55
```
60
56
61
-
<<<<<<<HEAD
62
-
در نتیجه اگر `NaN` در عملیات ریاضیاتیای وجود داشته باشد، بر روی تمام معادله تاثیر میگذارد (نتیجه معادله برابر `NaN` خواهد بود).
63
-
=======
64
-
So, if there's a `NaN` somewhere in a mathematical expression, it propagates to the whole result (there's only one exception to that:`NaN ** 0` is `1`).
65
-
>>>>>>> bae0ef44d0208506f6e9b7f3421ee640ab41af2b
57
+
در نتیجه اگر جایی در عبارت ریاضیاتی `NaN`وجود داشته باشد، بر روی تمام معادله تاثیر میگذارد (فقط یک استثنا برای آن وجود دارد:`NaN ** 0` برابر با `1` است).
66
58
67
59
```smart header="عملیات ریاضیاتی امن هستند"
68
60
عملیات ریاضی در جاوااسکریپت امن است. ما هر نوع عملی میتوانیم انجام دهیم مانند تقسیم بر صفر، رفتار کردن با رشتههای غیر عددی همانند اعداد و غیره.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/12-nullish-coalescing-operator/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
@@ -106,11 +106,7 @@ alert(height ?? 100); // 0
106
106
107
107
## اولویت
108
108
109
-
<<<<<<< HEAD
110
-
اولویت عملگر `??` تقریبا برابر با عملگر `||` است، اما کمتر. اولویت آن در [جدول MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table) برابر با `5` است، در حالی که اولویت `||` برابر با `6` است.
111
-
=======
112
-
The precedence of the `??` operator is the same as `||`. They both equal `4` in the [MDN table](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table).
113
-
>>>>>>> bae0ef44d0208506f6e9b7f3421ee640ab41af2b
109
+
اولویت عملگر `??` برابر با عملگر `||` است. اولویت آنها در [جدول MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Operator_Precedence#Table) برابر با `4` است.
114
110
115
111
این یعنی که درست مانند `||`، عملگر nullish coalescing `??` قبل از `=` و `?` ارزیابی میشود، اما بعد از بیشتر عملیاتها مانند `+`، `-` ارزیابی میشود.
Copy file name to clipboardExpand all lines: 1-js/02-first-steps/17-arrow-functions-basics/article.md
+1-9Lines changed: 1 addition & 9 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -33,11 +33,7 @@ let sum = function(a, b) {
33
33
alert(sum(1, 2)); // 3
34
34
```
35
35
36
-
<<<<<<< HEAD
37
36
همانطور که میبینید `(a, b) => a + b` بدین معنیست که این تابع دو آرگومان با نامهای `a` و `b` میپذیرد. و هنگام اجرا شدن، مقدار `a + b` را حساب میکند و نتیجه را برمیگرداند.
38
-
=======
39
-
As you can see, `(a, b) => a + b` means a function that accepts two arguments named `a` and `b`. Upon the execution, it evaluates the expression `a + b` and returns the result.
40
-
>>>>>>> bae0ef44d0208506f6e9b7f3421ee640ab41af2b
41
37
42
38
- اگر فقط یک آرگومان داشته باشیم میتوانیم پرانتزهای دور آرگومان را حذف کنیم و کد را از این هم کوتاهتر کنیم.
43
39
@@ -88,11 +84,7 @@ welcome();
88
84
letsum= (a, b) => { // کمانک یک تابع چندخظی را دربرمیگیرد
89
85
let result = a + b;
90
86
*!*
91
-
<<<<<<<HEAD
92
-
return result; // اگر از کمانک استفاده کنیم باید از return استفاده کنیم
93
-
=======
94
-
return result; // if we use curly braces, then we need an explicit "return"
95
-
>>>>>>> bae0ef44d0208506f6e9b7f3421ee640ab41af2b
87
+
return result; // استفاده کنیم "return" اگر از آکولاد استفاده کنیم، سپس باید صراحتا از
ولی در بسیاری از موارد عملی، ما ترجیح میدهیم به جای خطا، `undefined` را دریافت کنیم (به معنای "بدون خیابان").
27
27
28
-
<<<<<<< HEAD
29
-
...و مثالی دیگر، در توسعه وب، ما میتوانیم یک شیء که با یک المان در صفحه مطابقت دارد را با استفاده از یک متد خاص، مانند `document.querySelector('.elem')` بگیریم و این متد هنگامی که چنین المانی وجود نداشته باشد `null` را برمیگرداند:
30
-
=======
31
-
...and another example. In Web development, we can get an object that corresponds to a web page element using a special method call, such as `document.querySelector('.elem')`, and it returns `null` when there's no such element.
32
-
>>>>>>> bae0ef44d0208506f6e9b7f3421ee640ab41af2b
28
+
...و مثالی دیگر. در توسعه وب، ما میتوانیم یک شیء که با یک المان در صفحه مطابقت دارد را با استفاده از یک متد خاص، مانند `document.querySelector('.elem')` بگیریم و این متد هنگامی که چنین المانی وجود نداشته باشد `null` را برمیگرداند:
33
29
34
30
```js run
35
31
// document.querySelector('.elem') خواهد شد اگر المنت وجود نداشته باشد null برابر با
Copy file name to clipboardExpand all lines: 1-js/05-data-types/10-destructuring-assignment/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
@@ -5,13 +5,9 @@
5
5
- شیءها به ما این امکان را میدهند تا چیزی بسازیم که المانهای داده را به واسطه کلید ذخیره کند.
6
6
- آرایهها به ما امکان جمعآوری المانهای داده را در لیستی مرتب میدهند.
7
7
8
-
<<<<<<< HEAD
9
-
اگرچه، زمانی که ما آنها را به تابع میدهیم، ممکن است که نیازی به کل یک شیء/آرایه نباشد. ممکن است تنها قطعههای تکی نیاز باشد.
8
+
اگرچه، زمانی که ما آنها را به تابع میدهیم، ممکن است که نیازی به کل یک شیء/آرایه نباشد. شاید تنها قطعههای تکی نیاز باشد.
10
9
11
10
*مقداردهیِ تجزیهکنندهی ساختار (Destructuring assignment)* یک سینتکس خاص است که به ما امکان میدهد تا آرایهها یا شیءها را درون چند متغیر «پخش کنیم» چون بعضی اوقات این موضوع کار را راحتتر میکند.
12
-
=======
13
-
Although, when we pass those to a function, it may need not be an object/array as a whole. It may need individual pieces.
14
-
>>>>>>> bae0ef44d0208506f6e9b7f3421ee640ab41af2b
15
11
16
12
تخریب ساختار همچنین با تابعهای پیچیده که تعداد زیادی پارامتر، مقدارهای پیشفرض و... دارند هم به خوبی کار میکند. به زودی آن را خواهیم دید.
3.`3.js` را بارگذاری میکنیم سپس اگر خطایی نداشت -- کار دیگری انجام میدهیم`(*)`
197
+
1.`1.js`را بارگذاری میکنیم سپس اگر خطایی نداشت
198
+
2.`2.js`را بارگذاری میکنیم سپس اگر خطایی نداشت
199
+
3.`3.js` را بارگذاری میکنیم سپس اگر خطایی نداشت -- کار دیگری انجام میدهیم`(*)`
205
200
206
-
<<<<<<< HEAD
207
-
هرچقدر فراخوانی های ما تودرتو باشند کدهای مارا عمیقتر و غیرقابل فهم و مدیریت میکنند مخصوصا اگر به جای ... ها کدهای واقعی داشته باشیم که خود شامل حلقه ها و شرط ها و هر جمله دیگری هستند.
208
-
=======
209
-
In the code above:
210
-
1. We load `1.js`, then if there's no error...
211
-
2. We load `2.js`, then if there's no error...
212
-
3. We load `3.js`, then if there's no error -- do something else `(*)`.
213
-
214
-
As calls become more nested, the code becomes deeper and increasingly more difficult to manage, especially if we have real code instead of `...` that may include more loops, conditional statements and so on.
215
-
>>>>>>> bae0ef44d0208506f6e9b7f3421ee640ab41af2b
201
+
هرچقدر فراخوانیها بیشتر تودرتو میشوند، کدها عمیقتر و برای مدیریت دشوارتر میشوند مخصوصا اگر به جای `...` کدهای واقعی داشته باشیم که خود ممکن است شامل حلقهها و شرطها و هر چیز دیگری باشند.
216
202
217
203
که معمولا به آن "جهنم فراخوانی" (callback-hell / pyramid of doom) میگویند.
218
204
@@ -275,15 +261,9 @@ function step3(error, script) {
275
261
}
276
262
}
277
263
```
278
-
همینجوری که مشاهده میکنید نتیجه تغییری نکرد ولی از تودرتو بودن فراخوانی ها با تعریف کردن توابع به صورت جداگانه برای هر مرحله از تودرتو بودن عمیق جلوگیری کردیم.
279
-
280
-
<<<<<<< HEAD
281
-
این روش کار میکند ولی کدش تکه تکه و جدا از هم است که خواندن آن را سخت میکند. همانطور که احتمالا دیدید لازم است در حین خواندن از جایی به جای دیگر بپرید. این طور اصلا راحت نیست مخصوصا اگر به کد آشنا نباشید و ندانید باید برای ادامه کد کجا را بخوانید.
282
-
=======
283
-
See? It does the same thing, and there's no deep nesting now because we made every action a separate top-level function.
264
+
همانطور که مشاهده میکنید نتیجه تغییری نکرد ولی از تودرتو بودن فراخوانیها با تعریف کردن توابع به صورت جداگانه برای هر مرحله از تودرتو بودن عمیق جلوگیری کردیم.
284
265
285
-
It works, but the code looks like a torn apart spreadsheet. It's difficult to read, and you probably noticed that one needs to eye-jump between pieces while reading it. That's inconvenient, especially if the reader is not familiar with the code and doesn't know where to eye-jump.
286
-
>>>>>>> bae0ef44d0208506f6e9b7f3421ee640ab41af2b
266
+
این روش کار میکند ولی کدش تکه تکه و جدا از هم است. خواندن آن دشوارتر است و احتمالا متوجه شدید که لازم است در حین خواندن از جایی به جای دیگر بپرید. اینگونه اصلا مناسب نیست مخصوصا اگر به کد آشنا نباشید و ندانید برای ادامه باید کجای کد را بخوانید.
287
267
288
268
همچنین توابعِ `step*` فقط یکبار استفاده میشوند و فقط برای جلوگیری از بوجود امدن جهنم فراخوانی و تودرتویی بیش از حد تعریف شده اند که باعث بی نظمی زیادی در کد میشوند.
0 commit comments