Skip to content

Commit 4c71b59

Browse files
committed
merging all conflicts
2 parents d6caa01 + 34a80e7 commit 4c71b59

File tree

50 files changed

+2329
-146
lines changed

Some content is hidden

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

50 files changed

+2329
-146
lines changed

.github/FUNDING.yml

+1
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
github: iliakan

1-js/02-first-steps/04-variables/article.md

+50
Original file line numberDiff line numberDiff line change
@@ -88,16 +88,26 @@ let user = 'John'
8888
*!*var*/!* message = 'سلام';
8989
```
9090

91+
<<<<<<< HEAD
9192
کلیدواژه `var` تقریبا* با* `let` یکسان است. آن هم یک متغیر را تعریف می‌کند، ولی روش کار آن قدیمی است.
9293

9394
تفاوت‌های کوچکی بین این دو وجود دارد که در حال حاضر به آن نمی‌پردازیم. در مبحث <info:var> با جزییات به آن خواهیم پرداخت.
95+
=======
96+
The `var` keyword is *almost* the same as `let`. It also declares a variable but in a slightly different, "old-school" way.
97+
98+
There are subtle differences between `let` and `var`, but they do not matter to us yet. We'll cover them in detail in the chapter <info:var>.
99+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
94100
````
95101
96102
## یک مقایسه‌ی واقعی
97103
98104
برای درک مفهوم متغیر، می‌توانیم آن را یک جعبه برای نگهداری اطلاعات تصور کنیم، که یک نام منحصربه‌فرد روی آن چسبانده‌ایم.
99105
106+
<<<<<<< HEAD
100107
برای نمونه، تصور کنید متغیر "`message`" در جعبه‌ای با برچسب `message` و با مقدار "`سلام!`" داخل آن وجود دارد:
108+
=======
109+
For instance, the variable `message` can be imagined as a box labelled `"message"` with the value `"Hello!"` in it:
110+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
101111
102112
![](variable.svg)
103113
@@ -196,15 +206,24 @@ let my-name; // خط‌های پیوند '-' در نام‌ها ممنوع هس
196206
متغیرهای apple و Apple دو متغیر متفاوت هستند.
197207
```
198208

209+
<<<<<<< HEAD
199210
````smart header="کاراکترهای غیر انگلیسی مجاز هستند ولی توصیه نمی‌شوند"
200211
امکان استفاده از هر زبانی، شامل حروف cyrillic، لوگوگرام‌های چینی و دیگر زبان‌ها وجود دارد، مثلا اینگونه::
212+
=======
213+
````smart header="Non-Latin letters are allowed, but not recommended"
214+
It is possible to use any language, including Cyrillic letters, Chinese logograms and so on, like this:
215+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
201216
202217
```js
203218
let имя = '...';
204219
let 我 = '...';
205220
```
206221
222+
<<<<<<< HEAD
207223
از نظر فنی، این‌ها درست کار می‌کنند و مجاز هستند، ولی بر اساس یک قائده بین‌المللی برای نام متغیرها از زبان انگلیسی استفاده می‌شود. حتی اگر اسکریپتی کوچک می‌نویسیم، ممکن است تا مدت طولانی‌ای مورد استفاده و توسعه قرار بگیرد. اشخاصی از سایر کشورها ممکن است نیاز باشد روزی آن اسکریپت را بخوانند.
224+
=======
225+
Technically, there is no error here. Such names are allowed, but there is an international convention to use English in variable names. Even if we're writing a small script, it may have a long life ahead. People from other countries may need to read it sometime.
226+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
208227
````
209228

210229
````warn header="نام‌های رِزِرو شده"
@@ -261,10 +280,18 @@ const myBirthday = '18.04.1982';
261280
myBirthday = '01.01.2001'; // !ارور، نمی‌توان ثابت را دوباره مقداردهی کرد
262281
```
263282
283+
<<<<<<< HEAD
264284
وقتی برنامه‎‌نویس اطمینان دارد که متغیری هیچگاه تغییر نمی‌کند می‌تواند آن را به عنوان const تعریف کند تا برای دیگران نیز این موضوع واضح باشد.
285+
=======
286+
When a programmer is sure that a variable will never change, they can declare it with `const` to guarantee and communicate that fact to everyone.
287+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
265288
266289
290+
<<<<<<< HEAD
267291
### ثابت‌های با حروف بزرگ
292+
=======
293+
There is a widespread practice to use constants as aliases for difficult-to-remember values that are known before execution.
294+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
268295
269296
به صورت یک عُرفِ همه‌گیر، از ثابت‌های با حروف بزرگ به عنوان نام مستعار برای مقادیری که به خاطر سپردن آنها دشوار است، استفاده می‌شود. این دسته از ثابت‌ها اصطلاحا prior to execution (پیش از اجرای برنامه) مقدارشان مشخص است.
270297
@@ -291,31 +318,54 @@ alert(color); // #FF7F00
291318
292319
چه زمانی باید از حروف بزرگ و چه زمانی باید از حروف معمولی برای نام‌گذاری یک constant استفاده کنیم؟ بیایید قضیه را روشن کنیم.
293320
321+
<<<<<<< HEAD
294322
ثابت بودن یک متغیر صرفا بدین معناست که مقدار آن تغییر نخواهد کرد. یک دسته از ثابت‌ها پیش از اجرای برنامه مقدارشان مشخص خواهد بود (مثل هگزادسیمال برای رنگ قرمز) و دسته دیگر در حین اجرای (Run Time) برنامه مقدارشان مشخص می‌شود، اما پس از مقدار دهی اولیه مقدارشان تغییر نمی‌کند.
323+
=======
324+
Being a "constant" just means that a variable's value never changes. But some constants are known before execution (like a hexadecimal value for red) and some constants are *calculated* in run-time, during the execution, but do not change after their initial assignment.
325+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
295326
296327
برای نمونه:
297328
298329
```js
299330
const pageLoadTime = /* زمان بارگیری برای یک صفحه وب */;
300331
```
301332
333+
<<<<<<< HEAD
302334
مقدار `pageLoadTime` پیش از اجرای برنامه مشخص نبوده و به همین دلیل به صورت عادی نوشته شده است. اما همچنان یک ثابت است چراکه زمان اجرای برنامه بعد از مقداردهی دیگر تغییر نخواهد کرد.
335+
=======
336+
The value of `pageLoadTime` is not known before the page load, so it's named normally. But it's still a constant because it doesn't change after the assignment.
337+
338+
In other words, capital-named constants are only used as aliases for "hard-coded" values.
339+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
303340
304341
به تعبیری دیگر، ثابت‌های با حروف بزرگ فقط به عنوان نام مستعار برای مقدارهای «hard-coded» استفاده می‌شوند.
305342
306343
## نام‌های مناسب انتخاب کنید
307344
308345
یک نکته بسیار پر اهمیت دیگر درباره متغیرها وجود دارد.
309346
347+
<<<<<<< HEAD
310348
نام یک متغیر باید معنی واضح و روشنی داشته باشد که داده درون خود را توصیف می‌کند.
311349
312350
انتخاب نام برای متغیرها یکی از کارهای مهم و پیچیده در برنامه‌نویسی است. یک نگاه سریع به نام متغیرها می‌تواند تفاوت یک برنامه‌نویس تازه‌کار و با تجربه را نشان دهد.
351+
=======
352+
Variable naming is one of the most important and complex skills in programming. A glance at variable names can reveal which code was written by a beginner versus an experienced developer.
353+
354+
In a real project, most of the time is spent modifying and extending an existing code base rather than writing something completely separate from scratch. When we return to some code after doing something else for a while, it's much easier to find information that is well-labelled. Or, in other words, when the variables have good names.
355+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
313356
314357
در پروژه‌های واقعی، بجای از صفر نوشتن برنامه‌ها، بیشتر زمان صرف اصلاح و توسعه کدهای موجود می‌شود. وقتی پس از مدتی به کدهای قبلی باز می‌گردیم، بدست آوردن اطلاعات از آن دسته کدهایی که نام‌گذاری‌های خوبی دارند بسیار راحت‌تر است (منظور متغیرهایی است که نام‌های خوبی دارند).
315358
316359
لطفا پیش از انتخاب نام برای یک متغیر، خوب به آن فکر کنید. ثمره‌ی آن را خواهید دید.
317360
361+
<<<<<<< HEAD
318362
بعضی از دستورالعمل‌های مفید:
363+
=======
364+
- Use human-readable names like `userName` or `shoppingCart`.
365+
- Stay away from abbreviations or short names like `a`, `b`, and `c`, unless you know what you're doing.
366+
- Make names maximally descriptive and concise. Examples of bad names are `data` and `value`. Such names say nothing. It's only okay to use them if the context of the code makes it exceptionally obvious which data or value the variable is referencing.
367+
- Agree on terms within your team and in your mind. If a site visitor is called a "user" then we should name related variables `currentUser` or `newUser` instead of `currentVisitor` or `newManInTown`.
368+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
319369
320370
- از نام‌هایی که برای انسان قابل فهم است استفاده کنید مانند `userName` یا `shoppingCart`.
321371
- از نام‌های مخفف یا کوتاه استفاده نکنید مانند `a`، `b`، `c`، مگر آنکه واقعا بدانید چه می‌کنید.

1-js/02-first-steps/05-types/article.md

+3
Original file line numberDiff line numberDiff line change
@@ -94,13 +94,16 @@ const bigInt = 1234567890123456789012345678901234567890n;
9494

9595
به دلیل اینکه اعداد `BigInt` به ندرت نیاز می‌شوند، ما آنها را اینجا پوشش نمی‌دهیم، اما یک فصل <info:bigint> جدا به آنها اختصاص دادیم. زمانی که به چنین اعداد بزرگی نیاز داشتید آن را بخوانید.
9696

97+
<<<<<<< HEAD
9798

9899
```smart header="مشکلات سازگاری"
99100
در حال حاضر، `BigInt` در Firefox/Chrome/Edge/Safari پشتیبانی می‌شوند، اما در IE خیر.
100101
```
101102

102103
شما می‌توانید [جدول سازگاری BigInt در *MDN*](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt#Browser_compatibility) را برای اینکه بدانید کدام نسخه از مرورگرها پشتیبانی می‌شوند، بررسی کنید.
103104

105+
=======
106+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
104107
## String
105108

106109
در جاوااسکریپت یک رشته (string) باید توسط کوتِیشِن‌ها احاطه شود.

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

+15
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,11 @@
77

88
پس کاملا طبیعی است که یک موتور فقط بخشی از یک استاندارد را پیاده‌سازی کند.
99

10+
<<<<<<< HEAD
1011
یک صفحه‌ی خوب برای این که ببینید در حال حاضر چه چیزهایی پشتیبانی می‌شود اینجاست <https://compat-table.github.io/compat-table/es6/> (خیلی بزرگ است، ما چیزهای زیادی برای مطالعه داریم).
12+
=======
13+
A good page to see the current state of support for language features is <https://compat-table.github.io/compat-table/es6/> (it's big, we have a lot to study yet).
14+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
1115
1216
به عنوان توسعه‌دهنده، ما همیشه دوست داریم از ویژگی‌ها و امکانات جدید استفاده کنیم. هر چه جدیدتر، بهتر!
1317

@@ -71,9 +75,14 @@ if (!Math.trunc) { // اگر چنین تابعی وجود ندارد
7175
7276
جاوااسکریپت یک زبان به‌شدت داینامیک است. اسکریپت‌ها می‌توانند هر تابعی را تغییر دهند یا اضافه کنند. حتی تابع‌های built-in.
7377
78+
<<<<<<< HEAD
7479
دو کتابخانه جالب پلیفیل‌ها:
7580
- [core js](https://github.com/zloirock/core-js) که از چیزهای زیادی پشتیبانی می‌کند و اجازه می‌دهد فقط فیچرهای مورد نیاز خود را اضافه کنید.
7681
- [polyfill.io](http://polyfill.io) سرویسی که یک اسکریپت با پلیفیل‌ها ارائه می‌دهد. بسته به فیچرها و مرورگر کاربر.
82+
=======
83+
Two interesting polyfill libraries are:
84+
- [core js](https://github.com/zloirock/core-js) that supports a lot, allows to include only needed features.
85+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
7786
7887
7988
## خلاصه
@@ -84,9 +93,15 @@ if (!Math.trunc) { // اگر چنین تابعی وجود ندارد
8493
8594
برای مثال، بعدها که با جاوااسکریپت آشنایی بیشتری پیدا کنید، می‌توانید یک سیستم build کد با [webpack](https://webpack.js.org/) و پلاگین [babel-loader](https://github.com/babel/babel-loader) راه‌اندازی کنید.
8695
96+
<<<<<<< HEAD
8797
منابع خوبی که نشان می‌دهند فیچرهای مختلف در چه حالتی از پشتیبانی قرار دارند:
8898
- <https://compat-table.github.io/compat-table/es6/> - برای جاوااسکریپت.
8999
- <https://caniuse.com/> - برای تابع‌های مربوط به مرورگر.
100+
=======
101+
Good resources that show the current state of support for various features:
102+
- <https://compat-table.github.io/compat-table/es6/> - for pure JavaScript.
103+
- <https://caniuse.com/> - for browser-related functions.
104+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
90105
91106
پانوشت گوگل کروم معمولا نسبت به فیچرهای زبان به‌روزترین است. اگر دموی یک آموزش کار نکرد، آن را امتحان کنید. البته بیشتر دموهای آموزش با هر مرورگر مدرنی کار می‌کنند.
92107

1-js/04-object-basics/04-object-methods/8-chain-calls/task.md

+16
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@ importance: 2
44

55
# زنجیره‌ای
66

7+
<<<<<<< HEAD
78
یک شیء `ladder` وجود دارد که بالا و پایین رفتن را ممکن می‌کند:
9+
=======
10+
There's a `ladder` object that allows you to go up and down:
11+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
812
913
```js
1014
let ladder = {
@@ -21,7 +25,11 @@ let ladder = {
2125
};
2226
```
2327

28+
<<<<<<< HEAD
2429
حال اگر ما نیاز داشته باشیم که برای چند بار متوالی صدا بزنیم، می‌توانیم اینگونه این کار را انجام دهیم:
30+
=======
31+
Now, if we need to make several calls in sequence, we can do it like this:
32+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
2533
2634
```js
2735
ladder.up();
@@ -32,10 +40,18 @@ ladder.down();
3240
ladder.showStep(); // 0
3341
```
3442

43+
<<<<<<< HEAD
3544
کد `up`، `down` و `showStep` را تغییر دهید تا صدازدن‌ها را زنجیره‌ای کنید، مثل این:
45+
=======
46+
Modify the code of `up`, `down`, and `showStep` to make the calls chainable, like this:
47+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
3648
3749
```js
3850
ladder.up().up().down().showStep().down().showStep(); // اول 1 را نشان می‌دهد سپس 0 را
3951
```
4052

53+
<<<<<<< HEAD
4154
چنین روشی در بین کتابخانه‌های جاوااسکریپت به طور گسترده استفاده می‌شود.
55+
=======
56+
Such an approach is widely used across JavaScript libraries.
57+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3

1-js/04-object-basics/09-object-toprimitive/article.md

+4
Original file line numberDiff line numberDiff line change
@@ -253,7 +253,11 @@ let obj = {
253253
}
254254
};
255255

256+
<<<<<<< HEAD
256257
alert(obj + 2); // تبدیل به مقدار اصلی یک رشته برگرداند => ادغام، (2 + "2") 22
258+
=======
259+
alert(obj + 2); // "22" ("2" + 2), conversion to primitive returned a string => concatenation
260+
>>>>>>> 34a80e70f8cce5794be259d25f815d7a7db7cbe3
257261
```
258262

259263
## خلاصه

0 commit comments

Comments
 (0)