Skip to content

Commit 392d471

Browse files
committed
Merge master branch
2 parents ba1f910 + 4beefaa commit 392d471

55 files changed

Lines changed: 374 additions & 254 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

1-js/02-first-steps/08-operators/article.md

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -194,22 +194,22 @@ alert( +apples + +oranges ); // 5
194194
| اولویت | نام | علامت |
195195
|------------|------|------|
196196
| ... | ... | ... |
197-
| 17 | جمع یگانه | `+` |
198-
| 17 | تفریق یگانه | `-` |
199-
| 16 | بتوان رساندن | `**` |
200-
| 15 | ضرب | `*` |
201-
| 15 | تقسیم | `/` |
202-
| 13 | جمع | `+` |
203-
| 13 | تفریق | `-` |
197+
| 15 | جمع یگانه | `+` |
198+
| 15 | تفریق یگانه | `-` |
199+
| 14 | بتوان رساندن | `**` |
200+
| 13 | ضرب | `*` |
201+
| 13 | تقسیم | `/` |
202+
| 12 | جمع | `+` |
203+
| 12 | تفریق | `-` |
204204
| ... | ... | ... |
205-
| 3 | مقدارده | `=` |
205+
| 2 | مقداردهی | `=` |
206206
| ... | ... | ... |
207207

208-
همانطور که می‌بینیم "عملگر + یگانه" اولویت 17 دارد که از عملگر جمع ( + دوگانه) با اولویت 13 بالاتر است. به همین دلیل است که در عبارت `"+apples + +oranges"` عملگرهای + یگانه پیش از علامت جمع اجرا می‌شوند.
208+
همانطور که می‌بینیم «عملگر + یگانه» اولویت `15` دارد که از عملگر جمع ( + دوگانه) با اولویت `12` بالاتر است. به همین دلیل است که در عبارت `"+apples + +oranges"` عملگرهای + یگانه پیش از علامت جمع اجرا می‌شوند.
209209

210210
## مقداردهی
211211

212-
در نظر داشته باشید که مقداردهی با علامت `=` نیز یک عملگر است. در جدول اولویت‌ها با اولویت پایین `3` قرار گرفته است.
212+
در نظر داشته باشید که مقداردهی با علامت `=` نیز یک عملگر است. در جدول اولویت‌ها با اولویت پایین `2` قرار گرفته است.
213213

214214
به همین دلیل است که وقتی متغیری را مقدار دهی می‌کنیم، مانند `x = 2 * 2 + 1`، ابتدا عملیات محاسباتی انجام شده و سپس مقداردهی `=` صورت می‌گیرد و نتیجه را داخل `x` ذخیره می‌کند.
215215

1-js/02-first-steps/17-arrow-functions-basics/article.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ alert(sum(1, 2)); // 3
4848
alert( double(3) ); // 6
4949
```
5050

51-
- اگر آرگومان ورودی نداریم، پرانتزها خالی می‌مانند (ولی حتما باید حاضر باشند):
51+
- اگر آرگومان ورودی نداشته باشیم، پرانتزها خالی می‌مانند ولی حتما باید حاضر باشند:
5252

5353
```js run
5454
let sayHi = () => alert("Hello!");
@@ -74,9 +74,9 @@ welcome();
7474

7575
## وقتی Arrow Functionها چندخطی می‌شوند
7676

77-
مثال‌های بالا از سمت چپ فلش `<=` آرگومان گرفتند و سمت راست را با آن محاسبه کردند.
77+
توابع کمانی که تا به اینجا دیدیم خیلی ساده بودند. آن‌ها آرگومان‌ها را از سمت چپ `=>` دریافت کردند، آن‌ها را ارزیابی کردند و عبارت سمت راست را از طریق آن‌ها برگرداندند.
7878

79-
گاهی کد پیچیده‌تری داریم که چند expression یا statement دارد. در این مواقع باید کد را درون کمانک قرار دهیم. و درون کمانک نیز از `return` استفاده کنیم.
79+
گاهی اوقات ما به تابعی پیچیده‌تر همراه با چند عبارت و دستور نیاز داریم. در این صورت، می‌توانیم آن‌ها را درون آکولاد قرار دهیم. تفاوت اصلی این است که آکولادها برای برگرداندن یک مقدار به `return` نیاز دارند (درست مانند یک تابع عادی).
8080

8181
مانند این:
8282

@@ -103,7 +103,7 @@ alert( sum(1, 2) ); // 3
103103

104104
## خلاصه
105105

106-
توابع Arrow function مناسب کدهای تک‌خطی هستند. و به‌صورت‌های مختلفی می‌توان از آن‌ها استفاده کرد.
106+
توابع Arrow function مناسب عملیات ساده خصوصا کدهای تک‌خطی هستند. آن‌ها دو حالت دارند:
107107

108-
1. بدون کمانک: `(...args) => expression` -- سمت راست یک expression یا عبارت است: تابع آن را می‌خواند و نتیجه را برمی‌گرداند.
109-
2. با کمانک: `(...args) => { body }` -- کمانک‌ها به ما این امکان را می‌دهند تا چند statement را داخل تابع بنویسیم, اما در این صورت باید حتما از `return` برای بازگرداندن نتیجه استفاده کنیم.
108+
1. بدون آکولاد: `(...args) => expression` -- سمت راست یک expression یا عبارت است: تابع آن را ارزیابی می‌کند و نتیجه را برمی‌گرداند. اگر تنها یک آرگومان وجود داشته باشد، پرانتزها می‌توانند حذف شوند مانند `n => n * 2`.
109+
2. با آکولاد: `(...args) => { body }` -- آکولادها به ما این امکان را می‌دهند تا چند دستور را داخل تابع بنویسیم, اما در این صورت باید حتما از `return` برای بازگرداندن نتیجه استفاده کنیم.

1-js/03-code-quality/01-debugging-chrome/article.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@
3838

3939
بعد از اجرای تکه‌کد، نتایج آن در زیر آن نمایش داده می‌شوند.
4040

41-
برای مثال، نتیجه `1+2` می‌شود `3`، و `hello("debugger")` چیزی را بر نمی‌گرداند، پس نتیجه `undefined` است:
41+
برای مثال، نتیجه `1+2` می‌شود `3`، در حالی که فراخوانی تابع `hello("debugger")` چیزی را بر نمی‌گرداند، پس نتیجه `undefined` است:
4242

4343
![](chrome-sources-console.svg)
4444

@@ -63,12 +63,12 @@
6363
- و دیگر موارد...
6464

6565
```smart header="Conditional breakpoints"
66-
*راست کلیک* بر روی شمارهٔ خط این امکان را می‌دهد تا یک بریک‌پوینت *شرطی* تعریف کنیم. این بریک‌پوینت تنها زمانی صدازده می‌شود که شرط تعیین‌شده درست باشد.
66+
*راست کلیک* بر روی شمارهٔ خط این امکان را می‌دهد تا یک بریک‌پوینت *شرطی* تعریف کنیم. این بریک‌پوینت تنها زمانی صدازده می‌شود که شرط تعیین‌شده در هنگام ایجاد بریک‌پوینت درست باشد.
6767
6868
این امکان می‌تواند برای زمانی که نیاز داریم تا تنها برای یک متغیر خاص یا پارامترهای خاصی برای فانکشن توقف کنیم کارآمد باشد.
6969
```
7070

71-
## دستور debugger
71+
## دستور "debugger"
7272

7373
ما همچنین می‌توانیم با استفاده از دستور `debugger` کد را متوقف کنیم، مثلاً:
7474

@@ -84,7 +84,7 @@ function hello(name) {
8484
}
8585
```
8686

87-
این امکان در زمانی که در یک ویرایش‌گر کد هستیم و نمی‌خواهیم به مرورگر برویم و اسکریپت را در developer tools پیدا کنیم و بریک‌پوینت را ست کنیم خیلی مناسب است.
87+
چنین دستوری تنها زمانی که ابزارهای توسعه باز باشند کار می‌کند و در غیر این صورت مرورگر آن را نادیده می‌گیرد.
8888

8989

9090
## توقف و گَشتن
@@ -99,7 +99,7 @@ function hello(name) {
9999

100100
1. **`Watch` -- .نمایش مقادیر فعلی برای هر عبارت**
101101

102-
شما می‌تونید دکمه به‌علاوه `+` رو فشار بدید و یک عبارت وارد کنید. اشکال‌زدا مقدار آن را در هر لحظه از فرآیند اجرا، به صورت خودکار دوباره محاسبه می‌کنه و نمایش خواهد داد.
102+
شما می‌توانید دکمه به‌علاوه `+` را فشار دهید و یک عبارت وارد کنید. اشکال‌زدا مقدار آن را در هر لحظه از فرآیند اجرا، به صورت خودکار دوباره محاسبه می‌کند و نمایش خواهد داد.
103103

104104
2. **`Call Stack` -- .نمایش زنجیرهٔ صدازدن‌های تودرتو**
105105

@@ -134,12 +134,12 @@ function hello(name) {
134134

135135
کلیک کردن دوباره و دوباره این، گام‌به‌گام همهٔ عبارات اسکریپت را اجرا می‌کند.
136136

137-
<span class="devtools" style="background-position:-62px -192px"></span> -- "Step over": دستور بعدی را اجرا می‌کند، اما *داخل یک تابع نمی‌شود*، میانبر `key:F10`.
138-
: شبیه دستور قبلی «step»، اما اگر عبارت بعدی یک تابع - که built-in نباشد، مانند `alert` باشد، بلکه یک تابع که خودمان آن را تعریف کرده باشیم - باشد، متقاوت رفتار می‌کند.
137+
<span class="devtools" style="background-position:-62px -192px"></span> -- «Step over»: دستور بعدی را اجرا می‌کند، اما *وارد یک تابع نمی‌شود*، میانبر `key:F10`.
138+
: مانند دستور قبلی «Step»، اما اگر عبارت بعدی یک فراخوانی تابع باشد متفاوت رفتار می‌کند (در مورد توابع built-in ماننند `alert` صادق نیست، تنها توابعی ما آن‌ها را تعریف می‌کنیم).
139139

140-
دستور «step» وارد آن می‌شود و فرآیند اجرا را در خطر اول آن متوقف می‌کند، در حالی که دستور «step over» صدازدن‌های تودرتو تابع را نامرئی اجرا می‌کند، از تابع‌های داخلی رد می‌شود.
140+
اگر آن‌ها را مقایسه کنیم، دستور «Step» وارد یک فراخوانی تابع تودرتو می‌شود و فرآیند اجرا را در خط اول آن متوقف می‌کند، در حالی که دستور «Step over» فراخوانی‌های تودرتوی تابع را به صورت پنهانی اجرا می‌کند و از تابع‌های داخلی رد می‌شود.
141141

142-
سپس فرآیند اجرا بعد از آن تابع بلافاصله متوقف می‌شود.
142+
سپس فرآیند اجرا بعد از آن فراخوانی تابع بلافاصله متوقف می‌شود.
143143

144144
این دستور اگر نخواهیم ببینیم داخل تابع چه اتفاقی می‌افتد، می‌تواند مفید واقع شود.
145145

@@ -155,7 +155,7 @@ function hello(name) {
155155
: این دکمه فرآیند اجرا را تغییر نمی‌ده. فقط برای خاموش/روشن کردن بریک‌پوین‌ها به صورت کلی‌ست.
156156

157157
<span class="devtools" style="background-position:-90px -146px"></span> -- enable/disable automatic pause in case of an error.
158-
: زمانی که فعال باشد، و Developer tools باز باشد، در زمان وقوع خطا اسکریپت به صورت خودکار متوقف می‌شود. بعد از آن می‌توانیم متغیرها را تحلیل کنیم تا مشکل را پیدا کنیم. پس اگر اسکریپت ما با یک خطا از کار افتاد، می‌توانیم اشکال‌زدا را باز کنیم، این امکان را فعال کنیم و صفحه را مجدداً بارگزاری کنیم تا ببینیم مشکل در کجا بوده است و نوشته در آن لحظه چه بوده است.
158+
: زمانی که فعال باشد، و Developer tools باز باشد، در زمان وقوع خطا اسکریپت به صورت خودکار متوقف می‌شود. بعد از آن می‌توانیم درون اشکال‌زدا متغیرها را تحلیل کنیم تا مشکل را پیدا کنیم. پس اگر اسکریپت ما با یک خطا از کار افتاد، می‌توانیم اشکال‌زدا را باز کنیم، این امکان را فعال کنیم و صفحه را مجدداً بارگیری کنیم تا ببینیم مشکل کجا بوده و نوشته در آن لحظه چه بوده است.
159159

160160
```smart header="Continue to here"
161161
راست کلیک برروی یک خط کد context menu را باز می‌کند همراه با امکانی عالی که «Continue to here» نامیده می‌شود.
@@ -187,7 +187,7 @@ for (let i = 0; i < 5; i++) {
187187
2. عبارات `debugger`.
188188
3. یک خطا (اگر dev tools باز باشد و دکمه <span class="devtools" style="background-position:-90px -146px"></span> «on» باشد).
189189

190-
وقتی متوقف شد، می‌توانیم اشکال‌زدایی کنیم - بررسی توابع و ردیابی کد تا ببینیم کجای فرآیند اجرا به مشکل خورده است.
190+
وقتی متوقف شد، می‌توانیم اشکال‌زدایی کنیم: متغیرها را بررسی کنیم و کد را تحت نظر بگیریم تا ببینیم کجای فرآیند اجرا به مشکل خورده است.
191191

192192
امکانات بسیار زیادتری در developer tools از چیزی که در این‌جا گفته شد وجود دارد. توضیحات کامل در <https://developers.google.com/web/tools/chrome-devtools> قابل دسترس است.
193193

1-js/03-code-quality/06-polyfills/article.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ height = height !== undefined && height !== null ? height : 100;
4242
4343
حالا که صحبتش شد، بهتر است بدانید [Babel](http://babeljs.io/) یکی از برجسته‌ترین ترنسپایلرها است.
4444
45-
سیستم‌های build پروژه مدرن مثل [webpack](http://webpack.github.io/) این امکان را می‌دهند که بعد از هر بار تغییر کد، ترنسپایلر به‌صورت اتوماتیک اجرا شود و برای همین ادغام کردن آن در روند توسعه کار بسیار ساده‌ای است.
45+
سیستم‌های build پروژه مدرن مثل [webpack](https://webpack.js.org/) این امکان را می‌دهند که بعد از هر بار تغییر کد، ترنسپایلر به‌صورت اتوماتیک اجرا شود و برای همین ادغام کردن آن در روند توسعه کار بسیار ساده‌ای است.
4646
4747
## پلیفیل‌ها
4848
@@ -82,7 +82,7 @@ if (!Math.trunc) { // اگر چنین تابعی وجود ندارد
8282
8383
فراموش نکنید که از یک ترنسپایلر (اگر از syntax یا عملگرهای مدرن استفاده می‌کنید) و پلیفیل‌ها (برای اضافه کردن تابع‌هایی که ممکن است موجود نباشند) استفاده کنید. و با این کار مطمئن خواهید بود که کد شما کار می‌کند.
8484
85-
برای مثال، بعدها که با جاوااسکریپت آشنایی بیشتری پیدا کنید، می‌توانید یک سیستم build کد با [webpack](http://webpack.github.io/) و پلاگین [babel-loader](https://github.com/babel/babel-loader) راه‌اندازی کنید.
85+
برای مثال، بعدها که با جاوااسکریپت آشنایی بیشتری پیدا کنید، می‌توانید یک سیستم build کد با [webpack](https://webpack.js.org/) و پلاگین [babel-loader](https://github.com/babel/babel-loader) راه‌اندازی کنید.
8686
8787
منابع خوبی که نشان می‌دهند فیچرهای مختلف در چه حالتی از پشتیبانی قرار دارند:
8888
- <https://kangax.github.io/compat-table/es6/> - برای جاوااسکریپت.

0 commit comments

Comments
 (0)