Skip to content

Commit 8d24702

Browse files
Merge pull request #13 from kooshan75/methods-of-primitives
Translation of methods of primitives is done.
2 parents dc81705 + 7649fc9 commit 8d24702

File tree

3 files changed

+70
-66
lines changed

3 files changed

+70
-66
lines changed
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11

2-
Try running it:
2+
اجرا کنید:
33

44
```js run
55
let str = "Hello";
@@ -9,23 +9,25 @@ str.test = 5; // (*)
99
alert(str.test);
1010
```
1111

12-
There may be two kinds of result:
13-
1. `undefined`
14-
2. An error.
12+
ممکن است دو نوع جواب وجود داشته باشد:
13+
۱. `تعریف نشده`
14+
۲. یک خطا
1515

16-
Why? Let's replay what's happening at line `(*)`:
16+
چرا؟ بگذارید دوباره ببینیم چه اتفاقی در خط `(*)` می‌افتد:
1717

18-
1. When a property of `str` is accessed, a "wrapper object" is created.
19-
2. The operation with the property is carried out on it. So, the object gets the `test` property.
20-
3. The operation finishes and the "wrapper object" disappears.
2118

22-
So, on the last line, `str` has no trace of the property. A new wrapper object for every object operation on a string.
19+
۱. وفتی یک مشخصه‌ی `str` در دسترس قرار می‌گیرد، یک دربرگیرنده شئ ساخته می‌شود.
2320

24-
Some browsers though may decide to further limit the programmer and disallow to assign properties to primitives at all. That's why in practice we can also see errors at line `(*)`. It's a little bit farther from the specification though.
21+
۲. عملوند به همراه مشخصه می‌آید. بنابراین شئ مشخصه `test` را هم دارد.
2522

26-
**This example clearly shows that primitives are not objects.**
23+
۳. عملیات تمام می‌شود و دربرگیرنده شئ ناپدید میشود.
2724

28-
They just can not store data.
25+
بنابراین، در خط آخر، `str` هیچ نشانه‌ای از مشخصه ندارد. یک شئ دربرگیرنده جدید برای هر عملوند شئ روی رشته حرف.
26+
27+
بعضی از مرورگرها حتی ممکن است تصمیم بگیرند که برنامه‌نویس را محدود کنند و اجازه‌ی دسترسی به تخصیص مشخصه‌ها به داده‌های ابتدایی ندهند. به همین علت است که ما میتوانیم همچنین در عمل، خطا در خط `(*)` را ببینیم. البته کمی دور از انتظار است.
2928

30-
All property/method operations are performed with the help of temporary objects.
29+
**این مثال به وضوح نشان میدهد که داده‌های ابتدایی، شئ نیستند.**
30+
31+
آنها نمیتوانند اطلاعات را ذخیره کنند.
3132

33+
تمامی عملوند‌های توابع/مشخصه‌‌ها با کمک اشیا موقتی انجام می‌شود.

1-js/05-data-types/01-primitives-methods/1-string-new-property/task.md

+3-3
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ importance: 5
22

33
---
44

5-
# Can I add a string property?
5+
# آیا میتوان یک مشخصه‌ی رشته حرف اضافه کرد؟
66

77

8-
Consider the following code:
8+
کد زیر را در نظر بگیرید:
99

1010
```js
1111
let str = "Hello";
@@ -15,4 +15,4 @@ str.test = 5;
1515
alert(str.test);
1616
```
1717

18-
How do you think, will it work? What will be shown?
18+
فکر میکنید چطور کار خواهد کرد؟ چه چیزی نمایش داده خواهد شد؟
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,22 @@
1-
# Methods of primitives
1+
# توابع ابتدایی
22

3-
JavaScript allows us to work with primitives (strings, numbers, etc.) as if they were objects.
3+
.جاوااسکریپت اجازه‌ی استفاده کردن از داده‌های ابتدایی مثل رشته حروف، اعداد و غیره، به مثابه یک شئ را به ما می‌دهد
44

5-
They also provide methods to call as such. We will study those soon, but first we'll see how it works because, of course, primitives are not objects (and here we will make it even clearer).
5+
همچنین توابعی برای صدا کردن را فراهم میکنند. ما آنها را به زودی مطالعه خواهیم کرد اما ابتدا باید ببینیم که آنها چطور کار میکنند چراکه داده‌های ابتدایی، شئ نیستند.(در اینجا حتی این موضوع را روشن‌تر خواهیم کرد).
66

7-
Let's look at the key distinctions between primitives and objects.
7+
بیایید به تفاوت‌های اصلی بین یک شئ و داده‌های ابتدایی بنگریم.
88

9-
A primitive
9+
یک داده ابتدایی
1010

11-
- Is a value of a primitive type.
12-
- There are 6 primitive types: `string`, `number`, `boolean`, `symbol`, `null` and `undefined`.
11+
- مقداری از یک نوع ابتدایی‌ست.
12+
- شش نوع ابتدایی وجود دارد: `رشته حروف`، `اعداد`، `متغیر بولی`، `نماد`، `هیچ` و `تعریف نشده`.
1313

14-
An object
14+
یک شئ
1515

16-
- Is capable of storing multiple values as properties.
17-
- Can be created with `{}`, for instance: `{name: "John", age: 30}`. There are other kinds of objects in JavaScript; functions, for example, are objects.
16+
- قابلیت نگه‌داری مقادیر چندگانه به عنوان مشخصه‌ها می‌باشد.
17+
- میتواند با فلان ساخته شود به عنوان مثال، فلان. انواع دیگری از اشیا هم در جاوااسکریپت داریم: توابع، برای مثال اشیا هستند.
1818

19-
One of the best things about objects is that we can store a function as one of its properties.
19+
یکی از بهترین خصوصیات اشیا این است که ما میتوانیم یک تابع را به عنوان مشخصه‌های خودش ذخیره کنیم.
2020

2121
```js run
2222
let john = {
@@ -29,74 +29,74 @@ let john = {
2929
john.sayHi(); // Hi buddy!
3030
```
3131

32-
So here we've made an object `john` with the method `sayHi`.
32+
ما اینجا یک شئ ساختیم `john` با تابع `sayHi`.
3333

34-
Many built-in objects already exist, such as those that work with dates, errors, HTML elements, etc. They have different properties and methods.
34+
تعداد زیادی اشیا از قبل تعریف شده در حال حاضر وجود دارد مثل آنهایی که با تاریخ، خطاها، المان‌های `html` و غیره کار میکنند که توابع و مشخصه‌های متفاتی هم دارند.
3535

36-
But, these features come with a cost!
36+
اما این خواص هزینه‌ای دارند!
3737

38-
Objects are "heavier" than primitives. They require additional resources to support the internal machinery. But as properties and methods are very useful in programming, JavaScript engines try to optimize them to reduce the additional burden.
38+
اشیا از داده‌های ابتدایی وزین‌تر هستند. آنها به منابعی اضافی برای پشتیبانی از فعالیت درونی سیستم دارند. درحالیکه مشخصه‌ها و توابع در برنامه‌نویسی خیلی مفید هستند، موتور‌های جاوااسکریپت با بهینه‌سازی سعی در کاهش بار اضافی به وجود آمده دارند.
3939

40-
## A primitive as an object
40+
## یک داده‌ ابتدایی به عنوان یک شئ
4141

42-
Here's the paradox faced by the creator of JavaScript:
42+
تناقضی که سازنده جاوااسکریپت با آن مواجه شده:
43+
-خیلی کارها هستند که یک نفر بخواهد با داده‌های ابتدایی مثل رشته حروف یا اعداد انجام دهد که اگر دسترسی به آنها به عنوان تابع باشد عالی میشود.
4344

44-
- There are many things one would want to do with a primitive like a string or a number. It would be great to access them as methods.
45-
- Primitives must be as fast and lightweight as possible.
45+
راه حال، اندکی عجیب به نظر میرسد:
46+
۱. داده‌های ابتدایی هنوز داده‌های ابتدایی هستند. همانطور خواسته شده، یک مقدار واحد.
47+
۲. زبان اجازه دسترسی به توابع و مشخصه‌های رشته حروف، اعداد، متغیرهای بولی و نمادها را میدهد.
48+
۳. وقتی این اتفاق می‌افتد، یک دربرگیرنده شی اختصاصی ساخته میشود گه عملکرد اضافی را فراهم میکند و سپس نابود میشود
4649

47-
The solution looks a little bit awkward, but here it is:
50+
دربرگیرنده‌های اشیا برای هر نوع ابتدایی مختلف هستند به نام‌های: ‍`رشته حروف`،‍ `عدد`، `متغیر بولی` و `نماد`. بنابراین آنها مجموعه‌ای از توابع مختلفی را فراهم میسازند.
4851

49-
1. Primitives are still primitive. A single value, as desired.
50-
2. The language allows access to methods and properties of strings, numbers, booleans and symbols.
51-
3. When this happens, a special "object wrapper" is created that provides the extra functionality, and then is destroyed.
52+
برای مثال، تابع [str.toUpperCase()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase) که خروجی آن، حروف کاپیتال شده رشته حرف ورودی میباشد.
5253

53-
The "object wrappers" are different for each primitive type and are called: `String`, `Number`, `Boolean` and `Symbol`. Thus, they provide different sets of methods.
54-
55-
For instance, there exists a method [str.toUpperCase()](https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/String/toUpperCase) that returns a capitalized string.
56-
57-
Here's how it works:
54+
روش کار به صورت زیر است:
5855

5956
```js run
6057
let str = "Hello";
6158

6259
alert( str.toUpperCase() ); // HELLO
6360
```
6461

65-
Simple, right? Here's what actually happens in `str.toUpperCase()`:
62+
ساده است، نه؟! ببینیم در درون `str.toUpperCase()` چه اتفاقی می‌افتد:
63+
64+
65+
۱. رشته حرف `str` یک داده ابتدایی‌ست. پس در هنگام دسترسی به مشخصه‌ش، یک شی اختصاصی ساخته میشود که مقدار رشته حرف را میداند و توابع مفیدی مثل `toUpperCase()` دارد.
6666

67-
1. The string `str` is a primitive. So in the moment of accessing its property, a special object is created that knows the value of the string, and has useful methods, like `toUpperCase()`.
68-
2. That method runs and returns a new string (shown by `alert`).
69-
3. The special object is destroyed, leaving the primitive `str` alone.
67+
۲. این تابع اجرا میشود و یک رشته حرف جدید را خروجی میدهد. (نشان داده شده توسط `alert` .)
7068

71-
So primitives can provide methods, but they still remain lightweight.
69+
۳. شی اختصاصی نابود میشود و داده ابتدایی `str` را تنها میگذارد.
7270

73-
The JavaScript engine highly optimizes this process. It may even skip the creation of the extra object at all. But it must still adhere to the specification and behave as if it creates one.
71+
بنابراین داده‌های ابتدایی میتوانند توابع را فراهم سازند و در عین حال سبک‌وزن هم میمانند.
7472

75-
A number has methods of its own, for instance, [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) rounds the number to the given precision:
73+
موتور جاوااسکریپت این پردازه را به شدت بهینه میسازد به طوریکه حتی ممکن است ساخته شدن شئ اضافی را انجام ندهد. اما هنوز بایستی به مشخصات پایبند باشد و مثل ساخته شدن یک شئ رفتار کند.
74+
75+
یک عدد هم توابع خودش را دارد، به عنوان مثلا، [toFixed(n)](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed) عدد را با دقت خواسته شده گرد میکند:
7676

7777
```js run
7878
let n = 1.23456;
7979

8080
alert( n.toFixed(2) ); // 1.23
8181
```
8282

83-
We'll see more specific methods in chapters <info:number> and <info:string>.
83+
در بخش‌های <info:number> and <info:string> توابع خاص بیشتری خواهیم دید.
8484

85+
````warn header="Constructors `رشته حرف/عدد/متغیر بولی` فقط برای استفاده‌ی درونی هستند"
8586

86-
````warn header="Constructors `String/Number/Boolean` are for internal use only"
87-
Some languages like Java allow us to create "wrapper objects" for primitives explicitly using a syntax like `new Number(1)` or `new Boolean(false)`.
87+
بعضی از زبان‌های برنامه‌نویسی مثل جاوا به ما اجازه ساختن دربرگیرنده اشیا برای داده‌های ابتدایی را میدهند که با کدی مثل `new Number(1)` یا `new Boolean(false)` کار میکنند.
8888

89-
In JavaScript, that's also possible for historical reasons, but highly **unrecommended**. Things will go crazy in several places.
89+
در جاوااسکریپت، به دلایل تاریخی، این فعالیت ممکن است اما **اصلا** توصیه نمیشود. اینطور چیزها ممکن است در برخی جاها اصلا کار نکنند.
9090

91-
For instance:
91+
به عنوان مثال:
9292

9393
```js run
9494
alert( typeof 1 ); // "number"
9595

9696
alert( typeof new Number(1) ); // "object"!
9797
```
9898

99-
And because what follows, `zero`, is an object, the alert will show up:
99+
اما چون `صفر` یک شئ است، پیغام زیر ظاهر خواهد شد:
100100

101101
```js run
102102
let zero = new Number(0);
@@ -106,25 +106,27 @@ if (zero) { // zero is true, because it's an object
106106
}
107107
```
108108

109-
On the other hand, using the same functions `String/Number/Boolean` without `new` is a totally sane and useful thing. They convert a value to the corresponding type: to a string, a number, or a boolean (primitive).
109+
از سویی دیگر، توابع مشابه `رشته حرف/عدد/متغیر بولی` بدون `new`، به شدت چیز به درد بخوری هستند. آنها یک مقدار را به نوع مربوطه‌شان تبدیل میکنند: یک رشته حرف، یک عدد یا یک متغیر بولی
110+
(داده ابتدایی).
111+
112+
برای مثال، این کاملا صحیح است:
110113

111-
For example, this is entirely valid:
112114
```js
113115
let num = Number("123"); // convert a string to number
114116
```
115-
````
116117

117118

118-
````warn header="null/undefined have no methods"
119-
The special primitives `null` and `undefined` are exceptions. They have no corresponding "wrapper objects" and provide no methods. In a sense, they are "the most primitive".
119+
````warn header=".هیچ/تعریف نشده هیچ تابعی ندارند"````
120+
121+
داده‌های ابتدایی خاص `هیچ` و `تعریف نشده`، استثنا هستند. آنها هیچ دربرگیرنده اشیا خاصی ندارند و هیچ تابعی را فراهم نمیسازند. به زبانی دیگر، آنها ابتدایی ترین ها هستند.
120122

121-
An attempt to access a property of such value would give the error:
123+
یک تلاش برای دسترسی به مشخصه چنین مقداری، خطای ذیل را میدهد:
122124

123125
```js run
124126
alert(null.test); // error
125127
````
126128

127-
## Summary
129+
## خلاصه
128130

129-
- Primitives except `null` and `undefined` provide many helpful methods. We will study those in the upcoming chapters.
130-
- Formally, these methods work via temporary objects, but JavaScript engines are well tuned to optimize that internally, so they are not expensive to call.
131+
- داده‌های ابتدایی به جز `هیچ` و `تعریف نشده`، توابع مفید زیادی را فراهم میسازند که ما آنهارا در بخش‌های آتی بررسی خواهیم کرد.
132+
- به طور رسمی، این توابع با اشیا موقتی سر و کار دارند اما موتورهای جاوااسکریپت به بهترین نحو، به صورت درونی، بهینه‌سازی شده‌ند، به همین علت صدا زدن آنها دشواری خاصی ندارد.

0 commit comments

Comments
 (0)