diff --git a/1-js/02-first-steps/07-type-conversions/article.md b/1-js/02-first-steps/07-type-conversions/article.md index 906684495..e7c133269 100644 --- a/1-js/02-first-steps/07-type-conversions/article.md +++ b/1-js/02-first-steps/07-type-conversions/article.md @@ -1,6 +1,6 @@ # تبدیل نوع داده -بیشتر مواقع عملگرها و فانکشن‌ها به طور خودکار مقادیری که آنها داده می‌شود را به نوع صحیح تبدیل می‌کنند. به این عمل "تبدیل نوع داده" گفته می‌شود. +بیشتر مواقع عملگرها و فانکشن‌ها به طور خودکار مقادیری که به آنها داده می‌شود را به نوع صحیح تبدیل می‌کنند. به این عمل "تبدیل نوع داده (Type Conversions)" گفته می‌شود. برای نمونه فانکشن `alert` مقدار ورودی خود را به نوع داده‌ی string تبدیل می‌کند. عملگرهای ریاضیاتی مقادیر را به نوع number تبدیل می‌کنند. @@ -8,14 +8,14 @@ ```smart header="هنوز در مورد object ها صحبت نکرده‌ایم" -در این بخش در مورد object ها صحبت نمی‌کنیم. فعلا فقط درباره انواع اولیه صحبت می‌کنیم. +در این بخش در مورد object ها صحبت نمی‌کنیم. فعلا فقط درباره انواع اولیه (primitives) صحبت می‌کنیم. ``` ## تبدیل به string -تبدیل به string زمانی رخ می‌دهد که ما به بخش رشته کاراکترهای یک مقدار نیاز داریم. +تبدیل به string زمانی رخ می‌دهد که ما به نوع رشته‌ای کاراکترهای یک مقدار نیاز داریم. -برای نمونه `alert(value)` تبدیل به string را برای نمایش، انجام می‌دهد. +برای نمونه `alert(value)` تبدیل به string را برای نمایش انجام می‌دهد. همینطور می‌توانیم با صدا زدن `String(value)` تبدیل یک مقدار به string را انجام دهیم. @@ -30,7 +30,7 @@ alert(typeof value); // string */!* ``` -تبدیل به string عموما واضح است. `false` به `"false"` ، `null` به `"null"` و برای بقیه مقادیر هم به همین ترتیب انجام می‌شود. +تبدیل به string عموما واضح است. `false` به `"null` ، `"false` به `"null"` و برای بقیه مقادیر هم به همین ترتیب انجام می‌شود. ## تبدیل به number @@ -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"; @@ -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 @@ -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)` قابل انجام است. diff --git a/1-js/02-first-steps/08-operators/3-primitive-conversions-questions/solution.md b/1-js/02-first-steps/08-operators/3-primitive-conversions-questions/solution.md index 4bd1cc5ed..49ab60dba 100644 --- a/1-js/02-first-steps/08-operators/3-primitive-conversions-questions/solution.md +++ b/1-js/02-first-steps/08-operators/3-primitive-conversions-questions/solution.md @@ -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` می‌شود. diff --git a/1-js/02-first-steps/08-operators/4-fix-prompt/solution.md b/1-js/02-first-steps/08-operators/4-fix-prompt/solution.md index e00bbed0a..222fa4ed2 100644 --- a/1-js/02-first-steps/08-operators/4-fix-prompt/solution.md +++ b/1-js/02-first-steps/08-operators/4-fix-prompt/solution.md @@ -9,7 +9,7 @@ let b = "2"; // prompt("Second number?", 2); alert(a + b); // 12 ``` -کاری که باید بکنیم این است که رشته‌ها را قبل از `+` به عدد تبدیل کنیم. برای مثال، از `Number()` استفاده کنیم یا `+` را قبل از آنها بیاوریم. +کاری که باید بکنیم این است که رشته‌ها را قبل از `+` به عدد تبدیل کنیم. برای مثال، از `()Number` استفاده کنیم یا `+` را قبل از آنها بیاوریم. برای مثال، درست قبل از `prompt`: diff --git a/1-js/02-first-steps/08-operators/article.md b/1-js/02-first-steps/08-operators/article.md index 6e7d1fbc7..65f7ff519 100644 --- a/1-js/02-first-steps/08-operators/article.md +++ b/1-js/02-first-steps/08-operators/article.md @@ -1,8 +1,8 @@ -# عملگرهای ساده، ریاضیات +# عملگرهای پایه، ریاضیات ما عملگرهای مختلفی را از زمان مدرسه به خاطر داریم. مانند جمع `+`، تفریق `-`، ضرب `*` و دیگر عملگرها. -در این فصل، ما با عملگرهای ساده شروع می‌کنیم، سپس روی موضوعات مخصوص جاوااسکریپت تمرکز می‌کنیم که توسط دروس محاسباتی در مدرسه پوشش داده نشده‌اند. +در این فصل، ما با عملگرهای پایه شروع می‌کنیم، سپس روی موضوعات مخصوص جاوااسکریپت تمرکز می‌کنیم که توسط دروس محاسباتی در مدرسه پوشش داده نشده‌اند. ## اصطلاحات: یگانه (unary) - دوگانه (binary) - عملوند (operand) @@ -57,7 +57,7 @@ alert( 8 % 4 ); // باقی‌ماندۀ تقسیم 8 بر 4، 0 ### بتوان‌رساندن ** -عملگر بتوان‌رساندن `a**b` `a` را بتوانِ `b` می‌رساند. +عملگر بتوان‌رساندن `a` `a**b` را بتوانِ `b` می‌رساند. در ریاضیات مدرسه، ما آن را به صورت ab می‌نویسیم. @@ -148,7 +148,7 @@ alert( +"" ); // 0 */!* ``` -در واقع این همان کاریست که `Number(...)` انجام می‌دهد ولی به شکلی کوتاه‌تر. +در واقع این همان کاریست که `(...)Number` انجام می‌دهد ولی به شکلی کوتاه‌تر. نیاز به تبدیل رشته به عدد اغلب پیش می‌آید. برای نمونه اگر در حال دریافت مقادیری از فرم‌های HTML باشیم، آنها معمولا رشته هستند. اگر بخواهیم آنها را جمع کنیم چه کار باید کنیم؟ @@ -208,7 +208,7 @@ alert( +apples + +oranges ); // 5 همانطور که می‌بینیم «عملگر + یگانه» اولویت `14` دارد که از عملگر جمع ( + دوگانه) با اولویت `11` بالاتر است. به همین دلیل است که در عبارت `"+apples + +oranges"` عملگرهای + یگانه پیش از علامت جمع اجرا می‌شوند. -## مقداردهی +## مقداردهی (Assignment) در نظر داشته باشید که مقداردهی با علامت `=` نیز یک عملگر است. در جدول اولویت‌ها با اولویت پایین `2` قرار گرفته است. @@ -338,12 +338,12 @@ alert( n ); // 16 عملگرهای `++` و `--` می‌توانند پیش و پس از متغیر قرار گیرند. -- وقتی پس از متغیر قرار بگیرد "شکل پسوندی" دارد: `counter++`. -- وقتی پیش از متغیر قرار گیرد "شکل پیشوندی" دارد: `++counter`. +- وقتی پس از متغیر قرار بگیرد "شکل پسوندی" دارد: `++counter`. +- وقتی پیش از متغیر قرار گیرد "شکل پیشوندی" دارد: `counter++`. هردو گزاره، کار یکسانی می‌کنند: به `counter` `یکی` اضافه می‌کنند. -آیا تفاوتی بین آنها وجود دارد؟ بله، اما فقط با مشاهده‌ی مقدار باز گردانده شده از `--/++`، می‌توانیم این تفاوت را دریابیم. +آیا تفاوتی بین آنها وجود دارد؟ بله، اما فقط با مشاهده‌ی مقدار بازگردانده شده از `--/++`، می‌توانیم این تفاوت را دریابیم. بیایید موضوع را روشن کنیم. همانطور که همه ما می‌دانیم، تمام عملگرها مقداری برمی‌گردانند. عملگرهای افزایش/کاهش هم این کار را انجام می‌دهند. شکل پیشوندی، مقدار جدید را برمی‌گرداند درحالیکه شکل پسوندی مقدار قبلی را برمی‌گرداند (قبل از افزایش/کاهش). @@ -356,7 +356,7 @@ let a = ++counter; // (*) alert(a); // *!*2*/!* ``` -در خط `(*)` شکل *پیشوندی* `++counter` متغیر `counter` را یک واحد افزایش می‌دهد و مقدار جدید `2` را برمی‌گرداند. در نتیجه `alert` مقدار `2` را نمایش می‌دهد. +در خط `(*)` شکل *پیشوندی* `counter++` متغیر `counter` را یک واحد افزایش می‌دهد و مقدار جدید `2` را برمی‌گرداند. در نتیجه `alert` مقدار `2` را نمایش می‌دهد. حالا بیایید از شکل پسوندی استفاده کنیم: @@ -367,7 +367,7 @@ let a = counter++; // (*) تغییر دادیم counter++ را به ++counter alert(a); // *!*1*/!* ``` -در خط `(*)` شکل پسوندی `counter++` مقدار `counter` را یک واحد افزایش می‌دهد ولی مقدار قبلی این متغیر را برمی‌گرداند (قبل از افزایش). در نتیجه `alert` مقدار `1` را نمایش می‌دهد. +در خط `(*)` شکل پسوندی `++counter` مقدار `counter` را یک واحد افزایش می‌دهد ولی مقدار قبلی این متغیر را برمی‌گرداند (قبل از افزایش). در نتیجه `alert` مقدار `1` را نمایش می‌دهد. به طور خلاصه: @@ -411,7 +411,7 @@ alert( 2 * counter++ ); // 2 ،مقدار «قدیمی» را برمی‌گرد با اینکه از نظر فنی مشکلی ندارد ولی چنین روشی خوانایی کد را کاهش می‌دهد. اینکه یک خط کارهای مختلفی انجام می‌دهد مناسب نیست. -در هنگام خواندن کدها، چشم‌ها به صورت عمودی و با سرعت کدها را می‌خوانند و چیزی مانند `counter++` به سادگی از چشم پنهان می‌ماند و دیگر واضح نخواهد بود که متغیر افزایش پیدا کرده است. +در هنگام خواندن کدها، چشم‌ها به صورت عمودی و با سرعت کدها را می‌خوانند و چیزی مانند `++counter` به سادگی از چشم پنهان می‌ماند و دیگر واضح نخواهد بود که متغیر افزایش پیدا کرده است. ما پیشنهاد می‌کنیم هر عمل را در یک خط بنویسید: @@ -422,7 +422,7 @@ counter++; ``` ```` -## عملگرهای بیتی +## عملگرهای بیتی (Bitwise operators) عملگرهای بیتی با آرگومان‌ها به شکل اعداد صحیح 32 بیتی رفتار می‌کنند و در سطح نمایش دودویی با آنها کار می‌کنند.