Skip to content

Commit

Permalink
Update 2.3-method.md
Browse files Browse the repository at this point in the history
اضافه کردن جزییات بیشتر برای درک بهتر مفهوم متد
  • Loading branch information
OmidHekayati committed May 20, 2023
1 parent 9b94b00 commit 9e82ff6
Showing 1 changed file with 10 additions and 6 deletions.
16 changes: 10 additions & 6 deletions content/chapter 2/2.3-method.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,18 +4,22 @@ slug: method
weight: 3003
---

متد در واقع یک تابع گیرنده (reciver) است که به واسطه یک تایپ در دسترس خواهد, تا زمانیکه شما یک متغیر از نوع تایپی که دارای متد می باشد را راه اندازی نکنید به متدهایش دسترسی نخواهید داشت.
متد در واقع یک تابع گیرنده (reciver) است که به واسطه یک تایپ در دسترس خواهد. توجه کنید برای تعریف تابع متد باید قبل از اسم تابع پرانتز قرار دهید و داخلش یک نام و تایپ مورد `(reciver type)` نظر را قرار دهید. در زیر یک نمونه از متد را قرار دادیم:

اکثرا متد را یکی از عناوین شی گرایی در زبان گو میشناسند که مزایای خوبی دارد بخصوص اگر متدها برای تایپ struct تعریف شوند شما می توانید برای هریک از فیلدهای ساختارتان توابع بخصوصی در قالب متد بنویسید .

در زیر یک نمونه از متد را قرار دادیم :
```go
func (receiver receiver_type) some_func_name(arguments) return_values
```

برای درک بهتر این مفهوم می توانید متد را دقیقا یک تابع در نظر بگیرید و دو نوع تعریف زیر را عملا یکسان در نظر بگیرید. نحوه تعریف به صورت متد صرفا برای راحتی در زمان توسعه نرم افزار می باشد که به برنامه نویس امکان توسعه ای روان تر بدون نیاز به حفظ کردن زیاد عملکرد های سیستم را می دهد و عملا کامپایلر نیازی به تمایز دادن این دو تعریف ندارد.

```go
func (receiver receiver_type) some_func_name(arguments) return_values
func (r receiver_T) some_func_name(arg1 arg1_T, ...) return_values
func some_func_name(r receiver_T, arg1 arg1_T, ...) return_values
```
نکته قابل ذکر دیگر در خصوص این مفهوم این می باشد که متد در زبان گو از رویکرد static method به صورت مستقیم پشتیبانی نمی کند، یعنی تا زمانیکه شما یک متغیر از نوع تایپی که دارای متد می باشد را راه اندازی نکنید به متدهایش دسترسی نخواهید داشت.

توجه کنید برای تعریف تابع متد باید قبل از اسم تابع پرانتز قرار دهید و داخلش یک نام و تایپ مورد `(reciver type)` نظر را قرار دهید.
اکثرا متد را یکی از عناوین شی گرایی در زبان گو میشناسند که مزایای خوبی دارد بخصوص اگر متدها برای تایپ struct تعریف شوند شما می توانید برای هریک از فیلدهای ساختارتان توابع بخصوصی در قالب متد بنویسید. ولی اگر بخوایم کمی دقیق تر بگیم مفهوم متد برگفته از الگوی [Encapsulation](https://en.wikipedia.org/wiki/Encapsulation_(computer_programming)) که بر خلاف تصور رایج صرفا محدود به رویکرد OOP نمی شود و یک الگوی پذیرفته شده حتی در زبان های FP نیز می باشد.

## 2.3.1 متدها برای ساختار (struct)

Expand Down Expand Up @@ -209,4 +213,4 @@ City: London
Country: UK
```

در بالا ما یک متد برای ساختار address تعریف کردیم و سپس ساختار address را داخل ساختار employee گذاشتیم. در نهایت شما با استفاده از employee می توانید به متدهای address هم دسترسی داشته باشید و استفاده کنید.
در بالا ما یک متد برای ساختار address تعریف کردیم و سپس ساختار address را داخل ساختار employee گذاشتیم. در نهایت شما با استفاده از employee می توانید به متدهای address هم دسترسی داشته باشید و استفاده کنید.

0 comments on commit 9e82ff6

Please sign in to comment.