کد نویسی تمیز چیست؟ نوشتن کدهای تمیز، قابل فهم و قابل نگهداری مهارتی است که برای هر توسعه دهنده ای ضروری است که به آن مسلط شود. در این در این مطلب از وبلاگ آموزشگاه برنامه نویسی الکامکوبه مهم ترین اصول برای بهبود کیفیت کد می پردازیم.
کد نویسی تمیز چیست؟
Clean Code اصطلاح مهندسی نرم افزار است که از کتاب نامگذاری شده توسط رابرت سیسیل مارتین سرچشمه گرفته است. clean code یا کدنویسی تمیز یکی از مهمترین اصول آموزش برنامه نویسی است و اشاره به این دارد که اسناد، مفاهیم، قواعد و رویه ها بطور شهودی قابل فهم هستند و هر کسی می تواند آنها را با کمترین تحلیلی درک کند.
چرا باید کدنویسی تمیز انجام شود؟
- در صورتیکه می خواهید کدنویسی کنید و کدی بنویسید که علاوه بر کامپیوترها، انسان ها هم آن را خوب درک کنند، کد تمیز به شما کمک می کند تا کدهای شما به راحتی قابل فهم و قابل تغییر باشند.
- اگر کدنویسی تمیز انجام داده باشید و کدها را تحویل یک برنامه نویس دیگر بدهید به سادگی می تواند آن را تحلیل کند و عملیات رفع باگ و بروزرسانی را انجام دهد.
- نتیجه استفاده از اصول کدنویسی تمیز برنامه هایی با ثبات تر و با کارایی بیشتری هستند.
- زمان توسعه برای گسترش عملکرد و رفع اشکال کمتر می شود.
همچنین بخوانید » دوره آموزش کامل برنامه نویسی اندروید شامل دوره های حرفه ای برای ساخت اپلیکیشن ها از مبتدی تا پیشرفته
ویژگی های کدنویسی تمیز چیست؟
- کد تمیز براحتی توسط دیر قابل خواندن است.
- یک کد تمیز کدی است که کسی برای ساده و منظم نگه داشتن آن وقت نگذارد.
- تمام تست ها را اجرا می کند.
- موارد تکراری در آن به حداقل می رسد یا اصلا تکرار نمی شود.
- تعداد موجودیت هایی مانند کلاس ها، متدها، توابع و موارد مشابه به حداقل می رسد.
- کد تمیز به راحتی قابل تغییر است. با طراحی و معماری مناسب، گسترش کد شما بدون زمان و هزینه زیاد انجام می شود.
مطالعه و بازبینی کدنویسی تمیز مثل راه رفتن در یک اتاق مرتب و منظم است که هر چیزی سر جای خودش قرار گرفته و دسترسی به آنها براحتی و در کوتاه ترین زمان ممکن امکان پذیر است.
همچنین بخوانید» آموزش اندروید استودیو | آموزش نصب Android Studio | اندروید استودیو چیست؟
کدنویسی تمیز چگونه ابداع شد؟
ایدهی کدنویسی تمیز، توسط آقای رابرت سی مارتین (Robert C. Martin) که اصطلاحا عمو باب هم به ایشون گفته میشه، به وجود اومد. ایشون یه برنامهنویس با سابقهای هستند و طی سالها بررسی در کدهای مختلف، به این نتیجه میرسند که نوشتن کدهای قابل فهم و خوانا یه مساله و موضوع مهمی در حوزهی توسعه نرمافزار هستش، از این رو تصمیم به انتشار دانستههای خودشون میگیرین و کتابهای مختلفی در حوزهی توسعه نرمافزار تألیف میکنند که یکی از محبوبترین این کتابها، کتاب Clean Code هستش، که در اون به اصول کدنویسی تمیز پرداخته شده.
چرا باید از اصول کدنویسی تمیز پیروی کنیم؟
برای کامپیوتر فرقی نمیکند که کد شما تمیز است یا نه! برای کامپیوتر فقط یه سری قواعد منطقی و دستوری مثل سینتکس مهم است که رعایت شوند و کاری به این چیزها ندارد.
ممکن است کدی که شما نوشتید برای خودتان قابل فهم باشد. اما آیا به این هم فکر کردید که برای بقیه هم قابل فهم است یا خیر؟ این موضوع در پروژههای تیمی به شدت اهمیت پیدا میکند و اگر خوانایی کد شما پایین باشد مممکن است دردسرساز باشد و روند توسعه پروژه کند شود.
یا اصلا فرض میگیریم شما قرار نیست که به طور گروهی کار کنید و می خواهید پروژه خودتان را به صورت انفرادی توسعه دهید. در اوایل و زمانی که شما در حال کدزنی پروژه هستید، شاید متوجه بخشهای مختلف کدتان شوید و بتوانید باگ یابی کنید. اما اگر مدتها بعد، دوباره به سراغ کدتان بروید، ممکن است متوجه مبهم بودن برخی از قسمتها شوید، چون آنها را فراموش کردید و اگر با چنین مسالهای روبرو شدید به احتمال زیاد کد شما یه کد تمیزی نبوده و نیاز به اصلاح دارد.
“هر کسی می تواند کدی بنویسد که یک کامپیوتر بتواند آن را بفهمد. برنامه نویسان خوب کدهایی را می نویسند که انسان ها می توانند آن را بفهمند.” – مارتین فاولر
نمونه های کدنویسی تمیز کدامند؟
نمونه های زیادی از کدنویسی تمیز در دسترس است. برخی از نمونه ها عبارتند از:
- کتابخانه های استاندارد زبان: کتابخانه های استاندارد زبان اغلب دارای کد تمیز و قابل نگهداری هستند. به عنوان مثال، کتابخانه استاندارد زبان Python شامل کدی است که خوانا، قابل نگهداری و قابل توسعه است.
- پروژه های منبع باز: بسیاری از پروژه های منبع باز دارای کد تمیز هستند که می توانید از آن به عنوان نمونه استفاده کنید. به عنوان مثال، پروژه منبع باز Django شامل کدی است که خوانا، قابل نگهداری و قابل توسعه است.
- کد شخصی خود: می توانید کد شخصی خود را به عنوان نمونه استفاده کنید. با گذشت زمان و تجربه، می توانید کد خود را تمیزتر و قابل نگهداری تر کنید.
آشنایی با اصول کدنویسی تمیز
نحوه نامگذاری متغیرها
دلیلی وجود دارد که چرا از آدرس های حافظه استفاده نمی کنیم و به جای آن از نام ها استفاده می کنیم: چون یادآوری نام ها بسیار آسان تر است. و مهمتر از آن، آنها می توانند اطلاعات بیشتری در مورد متغیر به شما بدهند تا شخص دیگری بتواند اهمیت آن را درک کند.
پیدا کردن یک نام خوب ممکن است کمی طول بکشد، اما در آینده زمان بیشتری برای شما و تیمتان ذخیره میکند. چون تجریه ثابت کرده که اکثر کدنویسان بعد از فقط چند ماه که از کد خود بازدید می کنند، درک آنچه قبلا انجام داده اند برایشان مشکل است.
نحوه ایجاد نام های معنی دار
از کامنت ها برای توضیح اینکه چرا از یک متغیر استفاده شده است استفاده نکنید. اگر نامی نیاز به کامنت و توضیحات دارد، باید زمان خود را صرف تغییر نام آن متغیر به جای نوشتن کامنت کنید.
“یک نام گذاری خوب باید به شما بگوید که چرا وجود دارد، چه کار می کند، و چگونه استفاده می شود. اگر نامی نیاز به کامنت داشته باشد، آن نام هدف خود را نشان نمی دهد.
نامگذاری بد:
var d; // elapsed time in days
این مدل کد بارها دیده شده و این یک تصور غلط رایج است که شما باید با کامنت خود را پنهان کنید. از حروفی مانند x، y، a یا b به عنوان نام متغیرها استفاده نکنید، مگر اینکه دلیل خوبی وجود داشته باشد (متغیرهای loop از این استثنا هستند).
نام گذاری تمیز:
var elapsedTimeInDays;
var daysSinceCreation;
var daysSinceModification;
این نام گذاری خیلی بهتر به شما می گویند که چه چیزی اندازه گیری می شود و واحد اندازه گیری آن چیست.
از اطلاعات نادرست پرهیز کنید
مراقب کلماتی که معنی خاصی دارند باشید. به گروه بندی حساب ها به عنوان accountList اشاره نکنید مگر اینکه نوع آن در واقع یک لیست باشد. این کلمه معنای خاصی دارد و ممکن است به نتایج نادرستی منجر شود.
حتی اگر نوع یک لیست باشد، accounts نام سادهتر و بهتری است.
کد نویسی بد:
var accountList = [];
کد نویسی تمیز:
var accounts = []
از کلمات نویز استفاده نکنید
کلمات نویز کلماتی هستند که هیچ اطلاعات اضافی در مورد متغیر ارائه نمی دهند و در واقع اضافی هستند و باید حذف شوند.
برخی از کلمات نویز عبارتند از:
- The (prefix)
- Info
- Data
- Variable
- Object
- Manager
اگر کلاس شما UserInfo نام دارد، فقط می توانید اطلاعات را حذف کرده و آن را کاربر کنید. استفاده از BookData بهجای Book بهعنوان نام کلاس، کار سادهای نیست، زیرا به هر حال یک کلاس دادهها را ذخیره میکند.
از نام های قابل تلفظ استفاده کنید
اگر نمیتوانید اسمی را تلفظ کنید، بهتر است آن را در کدنویسی خود نگنجانید!
کدنویسی بد:
const yyyymmdstr = moment().format(“YYYY/MM/DD”);
کدنویسی تمیز:
const currentDate = moment().format(“YYYY/MM/DD”);
از نام های قابل جستجو استفاده کنید
از استفاده از اعداد جادویی در کد خود اجتناب کنید. ثابت های قابل جستجو و نامگذاری شده را انتخاب کنید. از نام های تک حرفی برای ثابت ها استفاده نکنید زیرا می توانند در بسیاری از جاها ظاهر شوند و بنابراین به راحتی قابل جستجو نیستند.
نام گذاری بد:
if (student.classes.length < 7) {
// Do something
}
نام گذاری تمیز:
if (student.classes.length < MAX_CLASSES_PER_STUDENT) {
// Do something
}
این گزینه بهتر است زیرا MAX_CLASSES_PER_STUDENT را می توان در بسیاری از مکان ها در کد استفاده کرد. اگر بخواهیم در آینده آن را به ۶ تغییر دهیم، فقط می توانیم ثابت را تغییر دهیم.
مثال بد در ذهن خواننده علامت سوال ایجاد می کند، مثلا اهمیت ۷ چیست؟
همچنین باید از قراردادهای نامگذاری و اعلان ثابت زبان خود مانند private static final در جاوا یا const در جاوا اسکریپت استفاده کنید.
توجه کنید:
برای هر قانون مفهومی یک کلمه را دنبال کنید. از fetch, retrieve, and get برای یک عملیات در کلاس های مختلف استفاده نکنید. یکی از آنها را انتخاب کنید و از آن در سراسر پروژه استفاده کنید تا افرادی که codebase یا API مشتریان شما را حفظ می کنند بتوانند به راحتی روش های مورد نظر خود را پیدا کنند.
همچنین بخوانید: برنامه Open Source چیست؟
نحوه نوشتن توابع برای داشتن کدنویسی تمیز
توابع را کوچک نگه دارید
توابع باید خیلی کوچک باشند. آنها حداکثر بهتر است ۲۰ خط داشته باشند. هر چه یک عملکرد طولانی تر شود، احتمال اینکه چندین کار را انجام دهد و عوارض جانبی داشته باشد، بیشتر می شود.
مطمئن شوید که توابع فقط یک کار را انجام می دهند
توابع باید فقط یک کار را ولی خوب و بدرستی انجام دهند. اگر از این قانون پیروی کنید، کوچک بودن آنها تضمین می شود. تنها کاری که تابع انجام می دهد باید در نام آن ذکر شود.
گاهی اوقات سخت است که به عملکرد نگاه کنید و ببینید که آیا چندین کار را انجام می دهد یا خیر. یک راه خوب برای بررسی این است که سعی کنید دیگر توابع را با نام متفاوتی اکسترکت کنید. اگر بتوانید آن را پیدا کنید، به این معنی است که باید عملکرد متفاوتی داشته باشد. کمی زمان می برد تا به آن عادت کنید. اما هنگامی که آن را به دست آورید، کد شما بسیار بهتر تر به نظر می رسد، و مطمئناً راحت تر، قابل درک تر و تست شده خواهد بود.
همچنین بخوانید: کراس پلتفرم چیست؟
کپسوله کردن شرایط در توابع
ریفکتورینگ شرط و قرار دادن آن در یک تابع نامگذاری شده، راه خوبی برای خوانایی بیشتر شرط های شما است.
آرگومان کمتر استفاده کنید
توابع باید دو یا کمتر آرگومان داشته باشند، هر چه کمتر بهتر. در صورت امکان از سه یا بیشتر اجتناب کنید.
آرگومان ها خواندن و درک تابع را سخت تر می کنند. آنها حتی از نقطه نظر آزمایش سخت تر هستند، زیرا نیاز به نوشتن موارد آزمایشی برای هر ترکیبی از آرگومان ها را ایجاد می کنند.
از آرگومان های Flag استفاده نکنید
آرگومان Flag یک آرگومان بولی است که به یک تابع ارسال می شود. بسته به ارزش این آرگومان دو اقدام متفاوت انجام می شود.
به عنوان مثال، فرض کنید یک تابع وجود دارد که مسئول رزرو بلیط یک کنسرت است و ۲ نوع کاربر وجود دارد: Premium و Regular. شما می توانید کدی مانند این داشته باشید:
public Booking book (Customer aCustomer, boolean isPremium) {
if(isPremium)
// logic for premium book
else
// logic for regular booking
}
آرگومان های Falg طبیعتاً با اصل single responsibility در تضاد هستند. وقتی آنها را می بینید، باید در نظر بگیرید که تابع را به دو قسمت تقسیم کنید.
همچنین بخوانید: گرفتن پروژه برنامه نویسی اندروید، وب و غیره چگونه است؟
از کدگذاری تکراری جلوگیری کنید
کدگذاریِ تکراری (Code repetition) ممکن است ریشه همه خرابی ها در نرم افزار باشد. کد تکراری (Duplicate code) به این معنی است که وقتی منطق تغییر می کند و مستعد خطا است، باید مواردی را در چندین مکان تغییر دهید. از ویژگی های ریفکتورینگ IDE خود استفاده کنید و هر زمان که با یک بخش کد تکراری مواجه شدید، روشی مناسب را استخراج کنید.
از گذاشتن کد در کامنت ها خودداری کنید
دلیل اینکه باید از گذاشتن کد در کامنت جلوگیری کنید این است که وقتی دیگران کد را می بینند می ترسند آن را حذف کنند زیرا نمی دانند به چه دلیلی وجود دارد یا خیر. آن کد کامنت گذاری شده برای مدت طولانی در آنجا باقی خواهد ماند. سپس وقتی نام متغیرها یا نام روش ها تغییر می کند، نامربوط می شود اما هنوز کسی آن را حذف نمی کند.
همچنین بخوانید: معرفی سایت های فریلسری برنامه نویسی ایرانی و خارجی
قوانین زبان خود را بدانید
شما باید قوانین زبان خود را از نظر فاصله، نظرات و نامگذاری موارد بدانید. راهنماهایی برای بسیاری از زبان ها در قوانین برنامه نویسی وجود دارد.
به عنوان مثال، شما باید از camelCase در جاوا و از snake_case در پایتون استفاده کنید. شما براکت های باز را روی یک خط جدید در سی شارپ قرار می دهید اما آنها را در جاوا و جاوا اسکریپت روی همان خط قرار می دهید. این چیزها از زبانی به زبان دیگر تغییر می کند و استاندارد جهانی وجود ندارد.
نتیجه گیری از آموزش کدنویسی تمیز یا Clean Code
کدنویسی تمیز بر عهده هر توسعه دهنده ای است و باید برای گرفتن نتیجه بهتر اصول کدنویسی تمیز را رعایت کند. صرف نظر از اینکه کدام مسیر را انتخاب می کنید، باید سعی کنید کدی بنویسید که کار کند و و برای دیگران و حتی خود شما در آینده قابل درک باشد.
نکته های خوبی درباره کدنویسی تمیز بود
مرسی از شما
کد نویسی تمیز خیلی روی نتیجه کار بصورت غیرمستقیم تاثیر داره
درسته