Skip to content

Commit

Permalink
Update 2.2-struct.md
Browse files Browse the repository at this point in the history
تصحیح متن
  • Loading branch information
r3a70 committed Jun 6, 2023
1 parent c482b23 commit f762c5d
Showing 1 changed file with 20 additions and 31 deletions.
51 changes: 20 additions & 31 deletions content/chapter 2/2.2-struct.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ type sample struct {}

## 2.2.1 تعریف تایپ struct

در زیر یک مثال ساده برای اینکه بتوانید در هر جای بدنه فایل `go` {{< tooltip text="ساختار" note="struct" >}} تعریف کنید زدیم :
به مثال زیر توجه کنید :

```go
type point struct {
Expand All @@ -46,20 +46,20 @@ type point struct {
}
```

در بالا ما ۲ تا فیلد برای {{< tooltip text="ساختار" note="struct" >}} تعریف کردیم که هر دو فیلد از نوع `float64` می باشند.
در مثال بالا ما ۲ تا فیلد برای {{< tooltip text="ساختار" note="struct" >}} تعریف کردیم که هر دو فیلد از نوع `float64` هستند.

## 2.2.2 ایجاد یک متغیر ساختار (struct)

برای ایجاد یک متغیر {{< tooltip text="ساختار" note="struct" >}} می توانید خیلی ساده تعریف کنید و خانه ای از حافظه را برای متغیر در نظر گرفته شود.
برای ایجاد یک متغیر {{< tooltip text="ساختار" note="struct" >}} می توانید یک متغیر تعریف کنید و ساختار رو به عنوان مقدار بهش بدید. به مثال زیر توجه کنید:

```go
emp := employee{}
```

در بالا یک متغیر با مقدار پیش فرض صفر {{< tooltip text="ساختار" note="struct" >}} employee تعریف کردیم.
در مثال بالا ما یک متغیر با مقدار پیش فرض صفر {{< tooltip text="ساختار" note="struct" >}} employee تعریف کردیم.

{{< hint info >}}
زمانیکه یک متغیر {{< tooltip text="ساختار" note="struct" >}} تعریف می کنید مقدار استفاده از حافظه **0 بایت** می باشد.
زمانیکه یک متغیر {{< tooltip text="ساختار" note="struct" >}} خالی, مانند مثال بالا تعریف می کنید مقدار استفاده شده از حافظه **0 بایت** می باشد.
{{< /hint >}}

- ایجاد متغیر ساختار و مقدار دهی فیلدها در یک خط :
Expand All @@ -68,7 +68,7 @@ emp := employee{}
emp := employee{name: "Sam", age: 31, salary: 2000}
```

- ایجاد متغیر ساختار و مقدار دهی فیلد در خط های مختلف (توصیه می شود) :
- ایجاد متغیر ساختار و مقدار دهی فیلد در خط های مختلف ( این روش برای خوانایی و درک بهتر توصیه می شود) :

```go
emp := employee{
Expand All @@ -78,7 +78,7 @@ emp := employee{
}
```

توجه کنید هیچ اجباری نیست حتما فیلدی را مقدار دهی کنید چون می توانید در جاهای دیگر یا هر زمانیکه نیاز داشتید مقدار دهی کنید.
توجه کنید هیچ اجباری نیست که حتما شما باید فیلدی را مقدار دهی کنید, شما می توانید هر زمانیکه نیاز داشتید ساختار خودتون رو مقدار دهی کنید.

```go
emp := employee{
Expand All @@ -87,7 +87,7 @@ emp := employee{
}
```

در بالا ما فیلد salary را مقدار دهی نکردیم و بطور پیش فرض کامپایلر با توجه به تایپ فیلد مقدار پیش فرض صفر اون تایپ را در نظر میگیرد.
در مثال بالا ما فیلد salary را مقدار دهی نکردیم. کامپایلر بطور پیش فرض با توجه به تایپ فیلد, مقدار پیش فرض صفر را برای اون تایپ در نظر میگیرد. در ادامه به مثالی که از نحوه ی ساختن ساختار ها زده ایم دقت کنید:


```go
Expand Down Expand Up @@ -135,41 +135,31 @@ Emp4: {name:Sam age:31 salary:0}

- ایجاد متغیر ساختار و مقدار دهی فیلدها بدون نام فیلد :

شما می توانید فیلدها را بدون اینکه نام فیلد را قرار دهید مقدار دهی کنید اما از نظر تکنیکی اینکار توصیه نمی شود.
شما می توانید فیلدها را بدون اینکه نام فیلد را قرار دهید مقدار دهی کنید اما از نظر تکنیکی اینکار توصیه نمی شود, دلیل این توصیه هم این است که اگر شما فیلد ها رو به این روش مقدار دهی کنید, باید ترتیب رو در نظر بگیرید یعنی **1: باید نام باشد, 2: باید سن باشد, 3: باید درآمد باشد** و اگر این ترتیب رعایت نشود شما دیتای اشتباهی خواهید داشت.


```go
emp := employee{"Sam", 31, 2000}

{Sam 31 2000} // حروجی

```
در مثال بالا ترتیب رعایت شده. به مثال زیر توجه کنید:


```go
package main

import "fmt"
emp := employee{"Sam", 2000, 31}

type employee struct {
name string
age int
salary int
}
{Sam 2000 31} // حروجی

func main() {
emp := employee{"Sam", 31, 2000}
fmt.Printf("Emp: %+v\n", emp)
}
```

همانطور که در مثال بالا دیدین الان با ترتیب اشتباه سن کارمند و درآمدش جابه جا شدن و ما دیتای اشتباهی از کارمند خواهیم داشت.


```shell
$ go run main.go
Emp2: {name:Sam age:31 salary:2000}

```

## 2.2.3 دسترسی و تنظیم فیلدهای ساختار (struct)

زمانیکه شما یک متغیر ساختار تعریف می کنید می توانید خیلی آسان با استفاده از همان متغیر به فیلدهای ساختار دسترسی پیدا کنید و مقدار هر کدام از فیلدها را تغییر دهید.
زمانیکه شما یک متغیر ساختار تعریف می کنید می توانید خیلی آسان با استفاده از همان متغیر به فیلدهای ساختار دسترسی پیدا کنید و مقدار هر کدام از فیلدها را تغییر دهید. به مثال زیر توجه کنید:

```go
package main
Expand All @@ -186,10 +176,9 @@ func main() {
emp := employee{name: "Sam", age: 31, salary: 2000}

//Accessing a struct field
n := emp.name
fmt.Printf("Current name is: %s\n", n)
fmt.Printf("Current name is: %s\n", emp.name)

//Assigning a new value
//Assigning a new value to name field
emp.name = "John"
fmt.Printf("New name is: %s\n", emp.name)
}
Expand Down

0 comments on commit f762c5d

Please sign in to comment.