Skip to content

Commit

Permalink
Merge pull request #288 from keyvangholami/main
Browse files Browse the repository at this point in the history
Update 4.20-rules.md
  • Loading branch information
Ja7ad authored Aug 20, 2023
2 parents 448d3ef + dc90981 commit 9ca6552
Showing 1 changed file with 9 additions and 9 deletions.
18 changes: 9 additions & 9 deletions content/chapter 4/4.20-rules.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,21 +3,21 @@ title: '4.20 قوانین کدنویسی در گو'
slug: go-code-rules
weight: 7020
---
قوانین در زبان گو همانند دیگر زبان های برنامه نویسی به دو دسته تقسیم می شوند. بخشی از قوانین در سطح سینتکس زبان مطرح می شوند، لذا رعایت آنها مهم هست، در غیر اینصورت کامپایلر قادر به کامپایل درست کدهای شما نخواهد بود و در بعضی شرایط ممکن است به صورت خاموش خطا به محیط اجرا (runtime) نیز برده شود. بخشی از قوانین به عنوان پیشنهاد و ترجیح مطرح هستند که عموما توسط لینتر بررسی می شوند و تاثیر اصلی بر خوانایی منطق کدها دارند. یعنی رعایت آنها الزام قطعی ندارد. به طور مثال استفاده از `_` در نام گذاری ها در گو توصیه نمی شود ولی در کتابخانه استاندارد (الحاقی به زبان گو) به وفور عدم رعایت این موضوع دیده می شود.
قوانین در زبان گو همانند دیگر زبان های برنامه نویسی به دو دسته تقسیم می شود. بخشی از قوانین در سطح {{< tooltip text="سینتکس" note="Syntax" >}} زبان مطرح می شوند، لذا رعایت آنها مهم هست، در غیر اینصورت کامپایلر قادر به کامپایل درست کدهای شما نخواهد بود و در بعضی شرایط ممکن است به صورت خاموش خطا به محیط اجرا (runtime) نیز برده شود. بخشی از قوانین به عنوان پیشنهاد و ترجیح مطرح هستند که عموما توسط لینتر بررسی می شوند و تاثیر اصلی بر خوانایی منطق کدها دارند. یعنی رعایت آنها الزام قطعی ندارد. به طور مثال استفاده از `_` در نام گذاری ها در گو توصیه نمی شود ولی در کتابخانه استاندارد (الحاقی به زبان گو) به وفور عدم رعایت این موضوع دیده می شود.

لازم به ذکر است که سازمان ها می توانند قوانین پیشنهادی خود را توسعه دهند و با توسعه لینتر اختصصای در فرآیند توسعه نرم افزار خود با روش هایی مانند CI/CD از رعایت قوانین خود توسط توسعه دهندگان پروژه های نرم افزاری خود اطمینان حاصل نمایند.
لازم به ذکر است که سازمان ها می توانند قوانین پیشنهادی خود را توسعه دهند و با توسعه لینتر اختصاصی در فرآیند توسعه نرم افزار خود با روش هایی مانند CI/CD از رعایت قوانین خود توسط توسعه دهندگان پروژه های نرمافزاری خود اطمینان حاصل نمایند.

## 4.20.1 قوانین نام گذاری
در زبان برنامه‌نویسی Go برای نامگذاری توابع، همان گونه که در بالا نیز توضیح داده شد دو مدل قوانین (اجباری و اختیاری) وجود دارد. قوانین اجباری باید رعایت شوند و قوانین اختیاری بهتر است رعایت شوند تا کد هم خوانایی بیشتری داشته باشد و هم از نظر تعاریف و نام‌گذاری مطابق رویه های (پروتکل های) معرفی شده توسط تیم توسعه زبان، به صورت استاندارد باشند.

### 4.20.1.1 نام توابع

نام توابع باید با حروف بزرگ یا کوچک شروع شود. توابعی که با حروف بزرگ شروع می‌شوند، به عنوان public تلقی می‌شوند و از سمت بیرون برای دیگران قابل دسترس هستند. توابعی که با حروف کوچک شروع می‌شوند، به عنوان private تلقی می‌شوند و فقط در داخل پکیج موجود هستند.
نام توابع باید با حروف بزرگ یا کوچک شروع شود. توابعی که با حروف بزرگ شروع می‌شوند، به عنوان public تلقی می‌شوند و از سمت بیرون پکیج برای دیگران قابل دسترس هستند. توابعی که با حروف کوچک شروع می‌شوند، به عنوان private تلقی می‌شوند و فقط در داخل پکیج موجود هستند.

- نام توابع public بصورت Pascal Case هستند مانند: ()CalculateInterestRate
- نام توابع private بصورت camel Case هستند مانند: ()calculateInterestRate

برای اطلاعات بیشتر درخصوص public یا private میتوانید به بخش Encapsulation مراجعه کنید.
برای اطلاعات بیشتر درخصوص public یا private میتوانید به بخش [Encapsulation](https://book.gofarsi.ir/chapter-4/oop/go-encapsulation/) مراجعه کنید.

### 4.20.1.2 نام فایل های پسوند go.

Expand Down Expand Up @@ -48,11 +48,11 @@ func CalculateInterestRate(principal float64, interestRate float64, termInYears

در این مثال، تمامی پارامترهای تابع با حروف کوچک، با CamelCase نام‌گذاری شده‌اند.

به طور کلی، هدف از این قوانین نام‌گذاری، رعایت استانداردهایی برای نام‌گذاری است تا کد بیشتری خوانا و قابل فهم باشد و همچنین بتواند قابلیت نگهداری و توسعه را بهتر ارائه دهد.
به طور کلی، هدف از این قوانین نام‌گذاری، رعایت استانداردهایی برای نام‌گذاری است تا کد خواناتر و قابل فهم باشد و همچنین قابلیت نگهداری و توسعه را بهتری داشته باشد.

### 4.20.1.5 نام پکیج

نام پکیج در Go باید با حرف کوچک شروع شود و نام پکیج باید شامل تنها حروف کوچک انگلیسی، اعداد و خط فاصله (-) باشد. همچنین در نام پکیج از حروف بزرگ استفاده نشود و اسم پکیج باید توصیفی از محتوای آن باشد. برای نام‌گذاری پکیج، معمولاً از نام اصلی محصول یا سرویسی که پُیاده‌سازی می‌شود، یا نام ماژول یا قسمتی از نرم‌افزار استفاده می‌شود.
نام پکیج در Go باید با حرف کوچک شروع شود و نام پکیج باید شامل تنها حروف کوچک انگلیسی، اعداد و خط فاصله (-) باشد. همچنین در نام پکیج از حروف بزرگ استفاده نشود، همچنین اسم پکیج باید توصیفی از محتوای آن باشد. برای نام‌گذاری پکیج، معمولاً از نام اصلی محصول یا سرویسی که پیاده‌سازی می‌شود، یا نام ماژول یا قسمتی از نرم‌افزار استفاده می‌شود.

مثلاً اگر یک پروژه برای پردازش تصویر داریم، نام پکیج می‌تواند "imageprocessing" باشد. همچنین اگر می‌خواهیم یک کتابخانه بخشی از پروژه خود را به اشتراک بگذاریم، می‌توانیم از نام پروژه یا نام ماژول استفاده کنیم.

Expand All @@ -66,8 +66,8 @@ func CalculateInterestRate(principal float64, interestRate float64, termInYears

- نام متغیر باید با حرف کوچک شروع شود.
- نام متغیر باید جهت نمایش نوع متغیر در نام آن و حاوی توضیح مختصر در مورد نام متغیر باشد.
- نام متغیر باید با CamelCase باشد.
- نام متغیر باید کاملاً توصیفی باشد و نیازی به توضیحات اضافی در مورد آن نداشته باشد.
- نام متغیر باید با camelCase باشد.
- نام متغیر باید کاملاً توصیفی باشد و نیازی به توضیحات اضافی در مورد آن نباشد.

برای مثال، به جای تعریف متغیر x برای نگهداری مقدار سن، می‌توان از نام age استفاده کرد:

Expand All @@ -80,7 +80,7 @@ var age int // تعریف متغیر برای سن شخص
- نام ثابت باید با حروف بزرگ شروع شود.
- نام ثابت باید جهت نمایش نوع ثابت در نام آن و حاوی توضیح مختصر در مورد مقدار ثابت باشد.
- نام ثابت باید با Snake_case باشد.
- نام ثابت باید کاملاً توصیفی باشد و نیازی به توضیحات اضافی در مورد آن نداشته باشد.
- نام ثابت باید کاملاً توصیفی باشد و نیازی به توضیحات اضافی در مورد آن نباشد.

برای مثال، برای تعریف ثابت مقدار پاییز در فصل های سال، می‌توانیم از نام SEASON_AUTUMN استفاده کنیم:

Expand Down

0 comments on commit 9ca6552

Please sign in to comment.