├── .github
└── FUNDING.yml
├── naming-cheatsheet.png
├── LICENSE.md
└── README.md
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | custom: ["https://ashokri.com/blog/donate/"]
2 |
--------------------------------------------------------------------------------
/naming-cheatsheet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/amirshnll/naming-cheatsheet/HEAD/naming-cheatsheet.png
--------------------------------------------------------------------------------
/LICENSE.md:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2018—preset Artem Zakharchenko
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
8 |
9 | # قواعد نام گذاری توابع و متغیرها
10 |
11 | - [از زبان انگلیسی استفاده کنید](#english-language)
12 | - [قاعده نام گذاری مشخص داشته باشید](#naming-convention)
13 | - [از قانون S-I-D پیروی کنید](#s-i-d)
14 | - [خلاصه نکنید](#avoid-contractions)
15 | - [از تکرار دوری کنید](#avoid-context-duplication)
16 | - [از طریق نام نتیجه را معلوم کنید](#reflect-the-expected-result)
17 | - [نام گذاری توابع](#naming-functions)
18 | - [الگوی A / HC / LC](#ahclc-pattern)
19 | - [در نام از فعل استفاده کنید](#actions)
20 | - [نام باید عملکرد را مشخص کند](#context)
21 | - [پیشوندها](#prefixes)
22 | - [از کلمات مفرد و جمع در نام استفاده کنید](#singular-and-plurals)
23 |
24 | ---
25 |
26 | انتخاب نام کار پیچیده ای است و این راهنما قرار است کار را ساده تر کند.
27 |
28 | دقت کنید ممکن است در زبان های مختلف این موضوع متفاوت باشد اما در این صفحه مثال ها با جاوااسکریپت نمایش داده شده است.
29 |
30 |
31 | ## از زبان انگلیسی استفاده کنید
32 |
33 | از زبان انگلیسی برای نام گذاری متغیرها و تابع ها استفاده کنید.
34 |
35 |
48 |
49 | > چه بخواهیم و چه نخواهیم ، انگلیسی زبان غالب در برنامه نویسی است: نحو تمام زبان های برنامه نویسی به انگلیسی ، و همچنین مستندات و مطالب آموزشی بی شماری با این زبان نوشته شده است. با نوشتن کد خود به انگلیسی ، انسجام آن را به طرز چشمگیری افزایش می دهید.
50 |
51 |
52 | ## قاعده نام گذاری مشخص داشته باشید
53 |
54 | یگی از قواعد نام گذاری را برای خود انتخاب کنید و طبق آن پیش بروید. از بین قواعدی مثل `camelCase`, `PascalCase`, `snake_case` و ... یکی را انتخاب کنید.
55 |
56 |
73 |
74 | ## از قانون S-I-D پیروی کنید
75 |
76 | یک نام باید کوتاه، بصری و توصیفی باشد:
77 |
78 | - **کوتاه یا Short**. نام باید کوتاه باشد تا در طولانی مدت به خاطر بماند
79 | - **بصری یا Intuitive**. یک نام باید به صورت طبیعی قابل خواندن باشد و این موضوع باید برای همه این طور باشد
80 | - **توصیفی یا Descriptive**. یک نام باید به کارآمد ترین روش با کاری که انجام می دهد مشخص شده باشد
81 |
82 |
83 |
84 | ```js
85 | /* Bad */
86 | const a = 5 // "a" could mean anything
87 | const isPaginatable = a > 10 // "Paginatable" sounds extremely unnatural
88 | const shouldPaginatize = a > 10 // Made up verbs are so much fun!
89 |
90 | /* Good */
91 | const postCount = 5
92 | const hasPagination = postCount > 10
93 | const shouldPaginate = postCount > 10 // alternatively
94 | ```
95 |
96 |
97 |
98 | ## خلاصه نکنید
99 |
100 | از خلاصه کردن پرهیز کنید دلیل این موضوع هم این است که خلاصه کردن باعث کاهش خوانایی متن خواهد شد پس حتما در ارتباط با این موضوع پرهیز کنید.
101 |
102 |
113 |
114 | ## از تکرار دوری کنید
115 |
116 | از تکرار جلوگیری کنید. مثلا مثل مثال زیر نام کلاس را در نام اعضا آن کلاس نبرید و استفاده نکنید.
117 |
118 |
179 |
180 | > **یادداشت:**
181 | > ترتیب انجام کارها بسیار مهم است مثلا `shouldUpdateComponent` در جایی استفاده می شود که به صورت دائمی آپدیت می شود ولی `shouldComponentUpdate` در جایی استفاده می شود که باید آپدیت کنید و این آپدیت توسط شما باید انجام شود.
182 | > همیشه High context بر معنی نام یک متغیر تاثیر می گذارد.
183 |
184 | ---
185 |
186 | ## در نام از فعل استفاده کنید
187 |
188 | مهم ترین بخشی را که تابع انجام می دهد را به عنوان فعل به کار ببرید و نام آن را نام تابع استفاده کنید.
189 |
190 | ### `get`
191 |
192 | داده هایی که در همان لحظه خروجی خواهید گرفت.
193 |
194 |
246 |
247 | ### `fetch`
248 |
249 | درخواست برای برخی از داده هایی، که یک مدتی طول می کشد تا پاسخ داده شود (به عنوان مثال درخواست همگام سازی یا sync کردن).
250 |
251 |
260 |
261 | ### `remove`
262 |
263 | چیزی را از جایی حذف می کند.
264 |
265 | به عنوان مثال ، اگر مجموعه ای از فیلترهای انتخاب شده در صفحه جستجو داشته باشید ، حذف یکی از این مجموعه ها با "removeFilter" است و "deleteFilter" اتفاق نمی افتد
266 |
267 |
279 |
280 | > همچنین [delete](#delete) را مشاهده کنید.
281 |
282 | ### `delete`
283 |
284 | چیزی که می خواهید کاملا پاک کنید.
285 |
286 | فکر کنید یک سیستم مدیریت محتوا دارید وقتی روی کلید حذف پست می زنید عملیات `deletePost` انجام می شود و از `removePost` استفاده نمی شود.
287 |
288 |
297 |
298 | > همچنین [remove](#remove) را مشاهده کنید.
299 |
300 | ### `compose`
301 |
302 | داده های جدیدی را از داده های موجود ایجاد می کند. بیشتر در رشته ها، شی ها یا تابع ها کاربرد دارد.
303 |
304 |
313 |
314 | > همچنین [get](#get) را مشاهده کنید.
315 |
316 | ### `handle`
317 |
318 | Handles برای عمل ها به کار می رود. اغلب هنگام نام گذاری برای یک روش پاسخ گویی قابل استفاده است.
319 |
320 |
333 |
334 | ## نام باید عملکرد را مشخص کند
335 |
336 | نام یک تابع باید کار آن تابع را مشخص کند یا حداقل کاری را که قرار است انجام دهد را مشخص کند.
337 |
338 |
339 |
340 | ```js
341 | /* A pure function operating with primitives */
342 | function filter(list, predicate) {
343 | return list.filter(predicate)
344 | }
345 |
346 | /* Function operating exactly on posts */
347 | function getRecentPosts(posts) {
348 | return filter(posts, (post) => post.date === Date.now())
349 | }
350 | ```
351 |
352 |
353 |
354 | > برخی از موارد در زبان های مختلف متفاوت است مثلا در جاوااسکریپت اپراتور filter روی آرایه ها عمل می کنند و نیازی به اضافه کردن fitlterArray ندارید.
355 |
356 | --
357 |
358 | ## پیشوندها
359 |
360 | پیشوندها به نام متغیرها معنای بهتری می دهند و معمولا در نام توابع استفاده نخواهند شد
361 |
362 | ### `is`
363 |
364 | مشخصه یا حالتی از زمینه فعلی را توصیف می کند (معمولاً به صورت بولین).
365 |
366 |
447 |
448 | ## از کلمات مفرد و جمع در نام استفاده کنید
449 |
450 | مانند پیشوندها نام متغیرها بسته به اینکه یک متغیر باشند و یک داده را بگیرند یا آرایه باشند و چندین داده را بگیرند باید جمع یا مفرد استفاده شود
451 |
452 |