Skip to content

Commit

Permalink
Update 1.5-variables.md
Browse files Browse the repository at this point in the history
اصلاح متن
  • Loading branch information
r3a70 authored May 19, 2023
1 parent 07a7aeb commit bd0209f
Showing 1 changed file with 21 additions and 21 deletions.
42 changes: 21 additions & 21 deletions content/chapter 1/1.5-variables.md
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ Hello World
3. تایپ {{< tooltip text="متغیر" note="Variable" >}} را از نوع `string` تعیین کردیم
4. سپس با عملگر `=` مقدار {{< tooltip text="متغیر" note="Variable" >}} را مشخص از نوع رشته تعیین کردیم.
5. رشته `"Hello World"` به عنوان مقدار {{< tooltip text="متغیر" note="Variable" >}} `s` می باشد و این مقدار در خانه مشخصی از حافظه قرار گرفته
6. از پکیج استاندارد `fmt` برای چاپ مقدار {{< tooltip text="متغیر" note="Variable" >}} `s` استفاده کردیم که این پکیج یکسری توابع جهت انجام عملیات های مختلفی نظیر چاپ مقادیر را دارند که در کد بالا ما از تابع `Println` استفاده کردیم.
6. از پکیج استاندارد `fmt` برای چاپ مقدار {{< tooltip text="متغیر" note="Variable" >}} `s` استفاده کردیم که این پکیج یکسری توابع جهت انجام عملیات های مختلفی نظیر چاپ مقادیر را دارد که در کد بالا ما از تابع `Println` استفاده کردیم.


### 1.5.1.1 اختصاص مقدار جدید به متغیر از قبل ایجاد شده
Expand Down Expand Up @@ -85,11 +85,11 @@ $ go run main.go

{{< playground url=2xY74XBAa01 >}}

در کد بالا ما یک {{< tooltip text="متغیر" note="Variable" >}} از نوع `int` تعریف کردیم و در خط ۹ مقدار `"One"` را به آن تخصیص دادیم و پس از اجرا با خطای `cannot use "One" (type string) as type int in assignment` اینکه شما یک مقدار رشته را به تایپ اشتباه اختصاص دادید مواجه خواهید شد.
در کد بالا ما یک {{< tooltip text="متغیر" note="Variable" >}} از نوع `int` تعریف کردیم و در خط ۹ مقدار `"One"` را به آن تخصیص دادیم و پس از اجرا با خطای `cannot use "One" (type string) as type int in assignment` مواجه شدیم. این خطا یعنی اینکه شما یک مقدار رشته را به تایپ اشتباه اختصاص داده اید.

### 1.5.1.3 تعریف متغیر به صورت خلاصه

زبان گو علاوه بر اینکه از {{< tooltip text="کلید واژه" note="keyword" >}} `var` برای تعریف متغیر پشتیبانی می کند, از `=:` می توانید یک {{< tooltip text="متغیر" note="Variable" >}} تعریف کنید و نیازی به مشخص کردن تایپ متغیر نمی باشد چون زبان گو بر اساس مقدار تعیین شده تایپ متغیر را تشخیص می دهد.
زبان گو علاوه بر اینکه از {{< tooltip text="کلید واژه" note="keyword" >}} `var` برای تعریف متغیر پشتیبانی می کند, از `=:` به انگلیسی `short variable declaration` نیز برای تعریف متغیر ها پشتیبانی میکند. شما می توانید یک {{< tooltip text="متغیر" note="Variable" >}} تعریف کنید و نیازی به مشخص کردن تایپ متغیر نمی باشد چون زبان گو بر اساس مقدار تعیین شده تایپ متغیر را تشخیص می دهد.


```go
Expand All @@ -107,7 +107,7 @@ func main() {
{{< playground url=qf-fEw3XIXl >}}

{{< hint warning >}}
توجه کنید شما فقط داخل تابع می توانید به صورت مختصر متغیر تعریف کنید و جهت تعریف متغیر بصورت عمومی باید از `var` استفاده کنید.
توجه کنید شما فقط داخل تابع می توانید به صورت مختصر متغیر تعریف کنید و جهت تعریف متغیر بصورت عمومی باید از کلید واژه ی `var` استفاده کنید.

بهتر است برای تعریف متغیر داخل تابع از از روش مختصر استفاده کنید و متغیر با `var` بصورت عمومی در بدنه کد باشد.

Expand Down Expand Up @@ -174,7 +174,7 @@ func main() {

## 1.5.2 مقدار ثابت (Constant)

constant همانند متغیر ها با کلید واژه `const` تعریف می شوند و مقدار بصورت `const a string = "hello world"` می گیرند و با این تفاوت که constant در طول اجرای کد مقدارشان غیرقابل تغییر هست و این تضمین را به شما می کنند هیچ چیزی در طول اجرا باعث تاثیر در تغییر مقدار constant نشود.
ثابت `(Constant)` ها بر خلاف متغیر ها که با کلید واژه ی `var` تعریف میشدند, با کلید واژه `const` تعریف می شوند با این تفاوت که ثابت ها در طول اجرای کد مقدارشان غیرقابل تغییر هست به انگلیسی `Immutable`, و تضمین می کنند هیچ چیزی در طول اجرای برنامه, باعث تغییر مقدار `ثابت` شما نشود.

```go
package main
Expand All @@ -197,7 +197,7 @@ Hello World

{{< playground url=2vI183P6-AU >}}

همانطور که در فوق گفتیم شما نمی توانید Constant را مجدد مقدار دهی کنید و در زیر خطایی که رخ می دهد در زمان اجرا را قرار دادیم :
همانطور که در مثال فوق گفتیم شما نمی توانید `ثابت` ها را مجددا مقدار دهی کنید. در مثال زیر خطایی که بعد از مقدار دهی دوباره ی یک `ثابت` در زمان اجرا رخ داده است را قرار دادیم :

```go
package main
Expand All @@ -217,7 +217,7 @@ main.go:5:cannot assign to a

### 1.5.2.1 تعریف Constant بدون نیاز به تعیین تایپ

در constant شما همانند متغییر می توانید یک `const` به تعیین تایپ تعریف کنید و زبان گو در زمان اجرا با توجه به مقدارتان تایپ را تشخیص می دهد.
در تعریف `ثابت` ها همانند متغییر ها شما می توانید یک `ثابت` بدون تعیین تایپ تعریف کنید و زبان گو در زمان اجرا با توجه به مقدار اختصاص داده شده به `ثابت` شما, تایپ را تشخیص می دهد.

```go
const a = 1 //Default hidden type is int
Expand All @@ -230,7 +230,7 @@ const f = 3+5i //Default hidden type is complex128

## 1.5.3 نحوه مشاهده تایپ متغیر یا Constant

در زیر ما با استفاده یکی از توابع پکیج `fmt` نوع و مقدار متغیر یا constant ها را چاپ کردیم.
در مثال زیر ما با استفاده از یکی از توابع پکیج `fmt` نوع و مقدار متغیر یا ثابت ها را چاپ کردیم.

```go
package main
Expand Down Expand Up @@ -274,7 +274,7 @@ func main() {

### 1.5.3.1 استفاده از iota در constant

شناسه `iota` فقط با constant قابل استفاده اس که با آن می توانید برای ایجاد اعداد auto increment استفاده کنید.
شناسه `iota` فقط با `ثابت` ها قابل استفاده است و با آن می توانید اعداد `auto increment` ایجاد کنید.


**ایجاد auto increment بدون `iota` :**
Expand All @@ -291,19 +291,19 @@ const (

```go
const (
a = iota // 0
a = iota // 0
b // 1
c // 2
)
```

{{< hint warning >}}
توجه کنید مقدار پیش فرض با `iota` صفر می باشد و constant از نوع `int` می باشد.
توجه کنید مقدار پیش فرض `iota` صفر, و `ثابت` ما از نوع `int` می باشد.
{{< /hint >}}

### 1.5.3.2 نحوه ایجاد enum

از `iota` و constant برای ایجاد [enum](https://en.wikipedia.org/wiki/Enumerated_type) استفاده می شود که در زیر یک نمونه کد برای ایجاد enum قرار دادیم.
از `iota` و `ثابت` برای ایجاد [enum](https://en.wikipedia.org/wiki/Enumerated_type) ها هم استفاده می شود که در مثال زیر یک نمونه کد برای ایجاد enum را نیز قرار داده ایم.


```go
Expand Down Expand Up @@ -352,7 +352,7 @@ const (
```

### 1.5.3.4 خودآزمون iota
خروجی کد زیر را در ذهن پیدا کنید و با اجرای کد صحت آن را بررسی کنید.
خروجی کد زیر را در ذهن محاسبه کنید و با اجرای کد صحت آن را بررسی کنید.

```go
package main
Expand Down Expand Up @@ -383,16 +383,16 @@ func main() {

## 1.5.4 قوانین نام گذاری متغیر و constant

در زیر ما یکسری قوانین جهت نام گذاری متغیر و constant تعریف کردیم :
در زیر ما یکسری قوانین جهت نام گذاری متغیر و `تابت` ها تعریف کرده ایم :

- نام متغیر یا constant فقط با یک حرف انگلیسی یا `_` شروع می شود.
- نام ها می تواند ترکیبی از اعداد و حروف انگلیسی یا `_` باشد.
- زبان گو به حروف بزرگ و کوچک در نام ها حساس است و اگر شما `hello` یا `Hello` تعریف کنید ۲ تا متغیر یا constant متفاوت محسوب می شوند.
- نام متغیر یا ثابت باید با یک حرف انگلیسی یا `_` شروع می شود.
- نام ها می توانند ترکیبی از اعداد و حروف انگلیسی یا `_` باشد.
- زبان گو به حروف بزرگ و کوچک در نام ها حساس است و اگر شما `hello` یا `Hello` را تعریف کنید, ۲ متغیر یا ثابت متفاوت محسوب می شوند.
- محدودیتی در تعداد حروف نام ها وجود ندارد ولی بهتر است از یک تعداد مطلوب و مشخصی برای نام ها استفاده کنید.

{{< hint info >}}
توجه داشته باشید اصولا اسم constant ها را با حروف بزرگ و خارج از function تعریف می‌کنند.
- با مشخص کردن اسم با حروف بزرگ هنگام استفاده از constant ها مشخص تر خواهد بود.
- از آنجایی که constant ها فقط امکان read یا همان خواندن را می‌دهند ممکن است در قسمت های مختلف به آن مقادیر نیاز داشته باشیم.
- به دلیل اینکه با هر بار فراخوانی function مانع از این شویم کامپایلر عملیات مقدار دهی const را دوباره انجام ندهد بهتر است آن را خارج از تابع تعریف کنیم.
توجه داشته باشید اصولا اسم ثابت ها را با حروف بزرگ و خارج از توابع تعریف می‌کنند.
- با تعریف کردن ثابت ها با حروف بزرگ, هنگام استفاده مشخص تر خواهند بود.
- از آنجایی که ثابت ها فقط امکان read یا همان خواندن را می‌دهند ممکن است در قسمت های مختلف به آن مقادیر نیاز داشته باشیم.
- به دلیل اینکه با هر بار فراخوانی `تابع`, کامپایلر عملیات مقدار دهی ثابت را دوباره انجام میدهد, بهتر است آن را خارج از تابع تعریف کنیم.
{{< /hint >}}

0 comments on commit bd0209f

Please sign in to comment.