پویا
پویا
خواندن ۲ دقیقه·۴ سال پیش

اسامی تمیز . . .

اسامی در دنیای برنامه نویسی حضور بسیار فعال و پر رنگی دارند از ابتدای کار که میخواهید یک پروژه ایجاد کنید حضور دارند همچنین در اواسط کار برای تعریف متغیر ها , متدها و آرگومان ها و... و تا انتهای کار که نرم افزار کامل می شود. پس متناسب با حضور پر رنگ اسامی باید اهمیت خاصی برای تعریف آن ها قائل شویم.

نام های تعریف شده باید توصیف کننده هدفشان باشند.(یعنی توصیفی دقیق از اون چیزی که بخاطرش تعریف شده اند رو ارائه دهند). انتخاب نام درست ممکن است زمان زیادی از ما بگیرد اما در مقابل زمان زیادی رو برای ما ذخیره می کنند.(بخاطر فوایدی که این کار دارد باعث میشود که دچار دردسر های زمان بری در فهم کد نشویم.) پس هروقت نام بهتری به ذهنمان خطور کرد بهتره که با نام قبلی جایگزین کنیم اینجور لب هر خواننده ایی از خواندن کد ما خندان میشود. :-)

نام یک متغیر, تابع, متد, کلاس یا هرچیزی که تعریف کرده ایم باید پاسخ گوی تمامی سوالاتی باشد که در موردش داریم, سوالاتی مانند چرا وجود دارد؟, چه کاربردی دارد؟, چگونه از آن استفاده می شود؟ و سوالات مشابه دیگر در ضمن اگر نامی نیاز به کامنت نویسی دارد پس به درستی توصیف کننده هدفش نیست و نیاز به تعویض دارد.

int d; // elapsed time in days

نام d که برای متغیری با مفهوم زمان سپری شده در نظر گرفته اند به هیچ عنوان مفهومی در مورد زمان سپری شده و یا واحد سنجشش در اختیار ما قرار نمیدهد و همانطور که میبینید برای جبران ضعف از کامنت استفاده شده است. شیوه های پیشنهادی برای تعریف این متغیر با هدف و مفهوم زمان می تواند به شکل زیر باشد:

int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;

انتخاب نام درست باعث می شود که ما درک بهتری از کد های نوشته شده داشته باشیم که این امر کار رو برای اعمال تغییرات در کد ها آسان تر می کند, مفهوم کد زیر چیست؟

public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4)
list1.add(x);
return list1;
}


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

public List<int[]> getFlaggedCells() {
List<int[]> flaggedCells = new ArrayList<int[]>();
for (int[] cell : gameBoard)
if (cell[STATUS_VALUE] == FLAGGED)
flaggedCells.add(cell);
return flaggedCells;
}

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

موفق باشید

برداشتی از Clean Code

برنامه نویسیکد نویسیبرنامه نویسclean codeنرم افزار
یک برنامه نویس . . .
شاید از این پست‌ها خوشتان بیاید