کتاب Clean Code
فصل 2 : نام های معنی دار
مقدمه
نام ها همیشه در نرم افزار وجود دارند. ما متغیرها، توابع، آرگومان ها، کلاس ها و پکیج ها را نام گذاری میکنیم. همچنین فایل های کد منبع و مسیرهایی که این فایل ها در آنجا قرار دارند را نیز نامگذاری میکنیم. ما فایل های jar وwarو ear نامگذاری می کنیم. نام گذاری میکنیم، نام گذاری می کنیم و نام گذاری می کنیم. ما این کار را به کرات انجام می دهیم. بهتر است این کار را انجام دهیم. قوانین ساده ای که برای ایجاد نام های خوب در ادامه آمده است را دنبال می کنیم
از نام های آگاهانه استفاده کنید
آسان است که بگوییم نام ها باید بیانگر نیت شما باشند. چیزی که ما می خواهیم این است که شما این موضوع را به خاطر بسپارید که ما در این موضوع جدی هستیم.
انتخاب نام های خوب زمان بر است،اما در آینده زمان بیشتری به نسبت وقتی که برای انتخاب نام ها صرف میکنید، برای شما ذخیره میکند. پس مراقب نام های انتخابی خود باشید و زمانی که نام های بهتری یافتید آنها را تغییر دهید. در این صورت هرکسی کد شما را می خواند (از جمله خود شما)، از خواندن آن حس خوبی میگیرد. نام یک متغیر، تابع و یا یک کلاس باید به تمام سوالات بزرگ پاسخ دهد. این نام باید به شما بگوید که چرا چنین چیزی وجود دارد. چه کاری انجام میدهد و چگونه باید از آن استفاده کرد. اگر یک نام نیاز به کامنت و توضیحات داشته باشد پس این نام به خوبی قصد و هدف را نشان نمیدهد.
نام متغیر d منظور و یا چیزی از زمان را برای ما نشان نمیدهد. ما باید نامی را انتخاب کنیم که نشان دهد بر اساس چه معیاری انتخاب شده است و این کار تحت عنوان چه واحدی بوده است.
انتخاب نام هایی که هدف را نشان میدهد باعث درک بهتر کد و تغییرات آن نیز میشود. به عنوان مثال هدف کد زیر چیست؟
چرا توضیح عملکرد این کد و اینکه بگوییم این کد چه کاری انجام میدهد سخت است؟ عبارت پیچیدهای وجود ندارد. فاصله انداختن منطقی است. تنها سه متغیر وجود دارد که دوتای آنهانیز ثابت تعریف شده اند. حتی هیچ کلاس و یا حتی متد چندریختی هم وجود ندارد و فقط لیستی از آرایه ها وجود دارد.
مشکل در سادگی کد نیست بلکه در میزان قابل فهم بودن کد است( در یک جمله ): چقدر از مفهوم و متن را نمی توانید در خود کد پیدا کنید. میزان قابل فهم بودن یک کد نیازمند این است که بدانیم به کدام یک از سوالات ما پاسخ میدهد. این سوالات عبارتند از:
- چه نوع هایی در theList وجود دارد؟
- اهمیت یک زیرمجموعه یک نمونه در theList چیست؟
- ارزش وجودی 4 چیست؟
- چگونه میتوان از یک لیست بازگشتی استفاده کرد؟
پاسخ به این سوال ها در کد نمونه وجود ندارد در صورتی که میتوانست وجود داشته باشد. ما در حال بازی کردن در یک بازی mine sweeper هستیم. ما board ای را پیدا کرده ایم که در آن لیستی از سلول ها وجود دارد و theList نامیده میشود. بیایید آن را به gameBoard تغییر نام دهیم. هر سلول در آن با یک آرایه ساده نشان داده میشود. علاوه بر این متوجه شدیم که زیرمجموعه نشانگر مکان مقادیر وضعیت[4] است که مثلا مقدار 4 نشان دهنده flag میباشد. فقط با نامگذاریِ این مفاهیم به این شکل میتوانیم کد را به طور قابل توجه ای بهبود دهیم.
البته توجه داشته باشید که سادگی کد، تغییری نکرده است. این کد هنوز دقیقا همان تعداد متغیر و ثابت را دارد. ولی کد خیلی واضح تر شده است.
ما میتوانیم جلوتر برویم و کلاسی ساده برای سلول ها به جای استفاده از آرایه های int بنویسیم و یا می توان یک تابع واضح با نام isFlagged نیز نوشت که اعداد جادویی را پنهان کند. خروجی زیر نتیجه یک نسخه جدید از تابع است:
با این تغییر نام ساده، درک آنچه که در حال انجام است، سخت نیست. این قدرت انتخاب نام های خوب است.
برای مطالعه قسمتی از فصل 4 : کامنت ها بر روی لینک کلیک کنید. ( لینک )