Skip to content

Update Type Conversions #260

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from Jul 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions 1-js/02-first-steps/07-type-conversions/article.md
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
# تبدیل نوع داده

بیشتر مواقع عملگرها و فانکشن‌ها به طور خودکار مقادیری که آنها داده می‌شود را به نوع صحیح تبدیل می‌کنند. به این عمل "تبدیل نوع داده" گفته می‌شود.
بیشتر مواقع عملگرها و فانکشن‌ها به طور خودکار مقادیری که به آنها داده می‌شود را به نوع صحیح تبدیل می‌کنند. به این عمل "تبدیل نوع داده (Type Conversions)" گفته می‌شود.

برای نمونه فانکشن `alert` مقدار ورودی خود را به نوع داده‌ی string تبدیل می‌کند. عملگرهای ریاضیاتی مقادیر را به نوع number تبدیل می‌کنند.

همینطور شرایطی وجود دارد که ما نیاز داریم مقدار را به نوع مورد نظرمان تبدیل کنیم.


```smart header="هنوز در مورد object ها صحبت نکرده‌ایم"
در این بخش در مورد object ها صحبت نمی‌کنیم. فعلا فقط درباره انواع اولیه صحبت می‌کنیم.
در این بخش در مورد object ها صحبت نمی‌کنیم. فعلا فقط درباره انواع اولیه (primitives) صحبت می‌کنیم.
```

## تبدیل به string

تبدیل به string زمانی رخ می‌دهد که ما به بخش رشته کاراکترهای یک مقدار نیاز داریم.
تبدیل به string زمانی رخ می‌دهد که ما به نوع رشته‌ای کاراکترهای یک مقدار نیاز داریم.

برای نمونه `alert(value)` تبدیل به string را برای نمایش، انجام می‌دهد.
برای نمونه `alert(value)` تبدیل به string را برای نمایش انجام می‌دهد.

همینطور می‌توانیم با صدا زدن `String(value)` تبدیل یک مقدار به string را انجام دهیم.

Expand All @@ -30,7 +30,7 @@ alert(typeof value); // string
*/!*
```

تبدیل به string عموما واضح است. `false` به `"false"` ، `null` به `"null"` و برای بقیه مقادیر هم به همین ترتیب انجام می‌شود.
تبدیل به string عموما واضح است. `false` به `"null` ، `"false` به `"null"` و برای بقیه مقادیر هم به همین ترتیب انجام می‌شود.

## تبدیل به number

Expand All @@ -43,7 +43,7 @@ alert(typeof value); // string
alert( "6" / "2" ); // 3, strings are converted to numbers
```

برای تبدیل یک مقدار به عدد بطور مشخص، می‌توانیم از فانکشن `Number(value)` استفاده کنیم.
به‌ طور‌ مشخص برای تبدیل یک مقدار به عدد می‌توانیم از فانکشن `Number(value)` استفاده کنیم.

```js run
let str = "123";
Expand All @@ -54,9 +54,9 @@ let num = Number(str); // becomes a number 123
alert(typeof num); // number
```

معمولا زمانی که مقداری را از یک منبع متنی (string based) مانند input های فرم دریافت می‌کنیم، در حالیکه نیاز به ورود مقدار عدد داشته‌ایم، باید آن مقدار را بطور مشخص به عدد تبدیل کنیم.
معمولا زمانی که مقداری را از ورودی های یک فرم دریافت می‌کنیم نوع داده این ورودی به صورت رشته (string) می‌باشد درحالی که به نوع عددی (Number) ورودی نیاز داریم. به همین علت باید ورودی را به مقدار عددی (Number) تبدیل کنیم.

اگر نتیجه عدد معتبری نبود، نتیجه تبدیل `NaN` خواهد بود.
اگر نتیجه، عدد معتبری نباشد نتیجه تبدیل `NaN` خواهد بود. برای نمونه:


```js run
Expand Down Expand Up @@ -134,7 +134,7 @@ alert( Boolean(" ") ); // spaces, also true (any non-empty string is true)

سه نوع تبدیل نوع داده، که بطور گسترده مورد استفاده قرار می‌گیرد، تبدیل به string ، تبدیل به number و تبدیل به boolean است.

**`تبدیل به string`** - زمانی که می‌خواهیم خروجی‌ای داشته باشم رخ می‌دهد. از طریق `String(value)` قابل انجام است. تبدیل به string معمولا وقتی مقدار از انواع اولیه داده است، واضح خواهد بود.
**`تبدیل به string`** - زمانی که می‌خواهیم خروجی‌ای داشته باشیم رخ می‌دهد. از طریق `String(value)` قابل انجام است. تبدیل به string معمولا وقتی مقدار از انواع اولیه داده (primitive values ) است، واضح خواهد بود.

**`تبدیل به number`** – در عملگرهای ریاضیاتی رخ می‌دهد. از طریق `Number(value)` قابل انجام است.

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,10 @@ null + 1 = 1 // (5)
undefined + 1 = NaN // (6)
" \t \n" - 2 = -2 // (7)
```
1. علامت جمع همراه با رشته `"" + 1` عدد `1` را به رشته تبدیل می‌کند: `"" + 1 = "1"` ، و سپس داریم: `"1" + 0` که همین قاعده برای آن نیز برقرار خواهد بود.
1. علامت جمع همراه با رشته `"" + 1` عدد `1` را به رشته تبدیل می‌کند: `"1 = "" + 1"` ، و سپس داریم: `"1" + 0` که همین قاعده برای آن نیز برقرار خواهد بود.
2. علامت تفریق (مانند اکثر عملگرهای ریاضیاتی) فقط با اعداد کار می‌کند. این عملگر رشته خالی را به `0` تبدیل می‌کند.
3. علامت جمع به همراه رشته ، باعث تبدیل عدد `5` به رشته و سپس چسباندن آن بهم می‌شود.
4. علامت تفریق همیشه مقدار را به عدد تبدیل می‌کند. در نتیجه `" -9 "` را به عدد `–9` تبدیل می‌کند (فاصله‌های خالی را نیز حذف می‌کند).
4. علامت تفریق همیشه مقدار را به عدد تبدیل می‌کند. در نتیجه `" 9- "` را به عدد `9–` تبدیل می‌کند (فاصله‌های خالی را نیز حذف می‌کند).
5. `null` پس از تبدیل به عدد `0` خواهد بود.
6. `undefined` پس از تبدیل به عدد `NaN` خواهد بود.
7. هنگام تبدیل یک رشته به عدد، کاراکترهای فاصله (اسپیس) از رشته حذف می‌شوند. در اینجا کل رشته از کاراکترهای فاصله تشکیل شده است، مانند '\t'، '\n' و یک فاصله‌ی «معمولی» بین آن‌ها. پس، مانند یک رشتهٔ خالی، `0` می‌شود.
2 changes: 1 addition & 1 deletion 1-js/02-first-steps/08-operators/4-fix-prompt/solution.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ let b = "2"; // prompt("Second number?", 2);
alert(a + b); // 12
```

کاری که باید بکنیم این است که رشته‌ها را قبل از `+` به عدد تبدیل کنیم. برای مثال، از `Number()` استفاده کنیم یا `+` را قبل از آنها بیاوریم.
کاری که باید بکنیم این است که رشته‌ها را قبل از `+` به عدد تبدیل کنیم. برای مثال، از `()Number` استفاده کنیم یا `+` را قبل از آنها بیاوریم.

برای مثال، درست قبل از `prompt`:

Expand Down
24 changes: 12 additions & 12 deletions 1-js/02-first-steps/08-operators/article.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# عملگرهای ساده، ریاضیات
# عملگرهای پایه، ریاضیات

ما عملگرهای مختلفی را از زمان مدرسه به خاطر داریم. مانند جمع `+`، تفریق `-`، ضرب `*` و دیگر عملگرها.

در این فصل، ما با عملگرهای ساده شروع می‌کنیم، سپس روی موضوعات مخصوص جاوااسکریپت تمرکز می‌کنیم که توسط دروس محاسباتی در مدرسه پوشش داده نشده‌اند.
در این فصل، ما با عملگرهای پایه شروع می‌کنیم، سپس روی موضوعات مخصوص جاوااسکریپت تمرکز می‌کنیم که توسط دروس محاسباتی در مدرسه پوشش داده نشده‌اند.

## اصطلاحات: یگانه (unary) - دوگانه (binary) - عملوند (operand)

Expand Down Expand Up @@ -57,7 +57,7 @@ alert( 8 % 4 ); // باقی‌ماندۀ تقسیم 8 بر 4، 0

### بتوان‌رساندن **

عملگر بتوان‌رساندن `a**b` `a` را بتوانِ `b` می‌رساند.
عملگر بتوان‌رساندن `a` `a**b` را بتوانِ `b` می‌رساند.

در ریاضیات مدرسه، ما آن را به صورت a<sup>b</sup> می‌نویسیم.

Expand Down Expand Up @@ -148,7 +148,7 @@ alert( +"" ); // 0
*/!*
```

در واقع این همان کاریست که `Number(...)` انجام می‌دهد ولی به شکلی کوتاه‌تر.
در واقع این همان کاریست که `(...)Number` انجام می‌دهد ولی به شکلی کوتاه‌تر.

نیاز به تبدیل رشته به عدد اغلب پیش می‌آید. برای نمونه اگر در حال دریافت مقادیری از فرم‌های HTML باشیم، آنها معمولا رشته هستند. اگر بخواهیم آنها را جمع کنیم چه کار باید کنیم؟

Expand Down Expand Up @@ -208,7 +208,7 @@ alert( +apples + +oranges ); // 5

همانطور که می‌بینیم «عملگر + یگانه» اولویت `14` دارد که از عملگر جمع ( + دوگانه) با اولویت `11` بالاتر است. به همین دلیل است که در عبارت `"+apples + +oranges"` عملگرهای + یگانه پیش از علامت جمع اجرا می‌شوند.

## مقداردهی
## مقداردهی (Assignment)

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

Expand Down Expand Up @@ -338,12 +338,12 @@ alert( n ); // 16

عملگرهای `++` و `--` می‌توانند پیش و پس از متغیر قرار گیرند.

- وقتی پس از متغیر قرار بگیرد "شکل پسوندی" دارد: `counter++`.
- وقتی پیش از متغیر قرار گیرد "شکل پیشوندی" دارد: `++counter`.
- وقتی پس از متغیر قرار بگیرد "شکل پسوندی" دارد: `++counter`.
- وقتی پیش از متغیر قرار گیرد "شکل پیشوندی" دارد: `counter++`.

هردو گزاره، کار یکسانی می‌کنند: به `counter` `یکی` اضافه می‌کنند.

آیا تفاوتی بین آنها وجود دارد؟ بله، اما فقط با مشاهده‌ی مقدار باز گردانده شده از `--/++`، می‌توانیم این تفاوت را دریابیم.
آیا تفاوتی بین آنها وجود دارد؟ بله، اما فقط با مشاهده‌ی مقدار بازگردانده شده از `--/++`، می‌توانیم این تفاوت را دریابیم.

بیایید موضوع را روشن کنیم. همانطور که همه ما می‌دانیم، تمام عملگرها مقداری برمی‌گردانند. عملگرهای افزایش/کاهش هم این کار را انجام می‌دهند. شکل پیشوندی، مقدار جدید را برمی‌گرداند درحالیکه شکل پسوندی مقدار قبلی را برمی‌گرداند (قبل از افزایش/کاهش).

Expand All @@ -356,7 +356,7 @@ let a = ++counter; // (*)
alert(a); // *!*2*/!*
```

در خط `(*)` شکل *پیشوندی* `++counter` متغیر `counter` را یک واحد افزایش می‌دهد و مقدار جدید `2` را برمی‌گرداند. در نتیجه `alert` مقدار `2` را نمایش می‌دهد.
در خط `(*)` شکل *پیشوندی* `counter++` متغیر `counter` را یک واحد افزایش می‌دهد و مقدار جدید `2` را برمی‌گرداند. در نتیجه `alert` مقدار `2` را نمایش می‌دهد.

حالا بیایید از شکل پسوندی استفاده کنیم:

Expand All @@ -367,7 +367,7 @@ let a = counter++; // (*) تغییر دادیم counter++ را به ++counter
alert(a); // *!*1*/!*
```

در خط `(*)` شکل پسوندی `counter++` مقدار `counter` را یک واحد افزایش می‌دهد ولی مقدار قبلی این متغیر را برمی‌گرداند (قبل از افزایش). در نتیجه `alert` مقدار `1` را نمایش می‌دهد.
در خط `(*)` شکل پسوندی `++counter` مقدار `counter` را یک واحد افزایش می‌دهد ولی مقدار قبلی این متغیر را برمی‌گرداند (قبل از افزایش). در نتیجه `alert` مقدار `1` را نمایش می‌دهد.

به طور خلاصه:

Expand Down Expand Up @@ -411,7 +411,7 @@ alert( 2 * counter++ ); // 2 ،مقدار «قدیمی» را برمی‌گرد

با اینکه از نظر فنی مشکلی ندارد ولی چنین روشی خوانایی کد را کاهش می‌دهد. اینکه یک خط کارهای مختلفی انجام می‌دهد مناسب نیست.

در هنگام خواندن کدها، چشم‌ها به صورت عمودی و با سرعت کدها را می‌خوانند و چیزی مانند `counter++` به سادگی از چشم پنهان می‌ماند و دیگر واضح نخواهد بود که متغیر افزایش پیدا کرده است.
در هنگام خواندن کدها، چشم‌ها به صورت عمودی و با سرعت کدها را می‌خوانند و چیزی مانند `++counter` به سادگی از چشم پنهان می‌ماند و دیگر واضح نخواهد بود که متغیر افزایش پیدا کرده است.

ما پیشنهاد می‌کنیم هر عمل را در یک خط بنویسید:

Expand All @@ -422,7 +422,7 @@ counter++;
```
````

## عملگرهای بیتی
## عملگرهای بیتی (Bitwise operators)

عملگرهای بیتی با آرگومان‌ها به شکل اعداد صحیح 32 بیتی رفتار می‌کنند و در سطح نمایش دودویی با آنها کار می‌کنند.

Expand Down