در مطلب قبلی درباره مضرات کد کثیف صحبت کردم هر چند که اگر کسی که کدنویسی کرده باشد می داند کد کثیف چیست ولی در این مطلب این موضوع را بیشتر بررسی می کنیم. برای درک بهتر کد کثیف، در ابتدا با تعریف کد تمیز از منظر اساتید برنامه نویسی آشنا می شویم.
Bjarne Stroustrup (خالق ++C) :
- کد تمیز، باید چشم نواز و کارا باشد.
- منطق آن آنقدر سرراست و ساده باشد که امکان بروز باگ به حداقل برسد.
- کد تمیز، فقط یک کار را انجام می دهد و همان یک کار را هم خوب انجام می دهد
Grady Booch (استاد اعظم) :
- کد تمیز باید ساده و مستقیم باشد.
- مانند یک نثر خوب نوشته شده است.
- اهداف نویسنده کد باید باخواندن متن کد مشخص شود.
- ابهام کد به حداقل رسیده باشد
Dave Thomas (نویسنده و یکی از امضا کنندگان مانیفست اجایل):
- کد تمیز این خاصیت را دارد که افرادی غیر از نویسنده اصلی آن کد، براحتی می توانند آن را بخوانند، بفهمند و تغییر دهند.
- کد باید با تست های واحد (unit test) هایش همراه باشد.
- وابستگی ها به حداقل رسیده باشد
Ward Cunningham(یکی از پدیدآورندگان XP) :
- وقتی یک کد تمیز را می خوانید، هر قطعه کدی را که می خوانید دقیقا همان چیزی خواهد بود که انتظارش را دارید.
- هیچ ابهام و تعجبی پیش نمی آید.
- همه چیز ساده و قابل درک است.
مارتین فولر نیز جمله جالبی دارد که می گوید :
“هر احمقی میتواند کدی بنویسد که کامپیوتر درک کند. برنامهنویسان خوب کدی مینویسند که انسانها قادر به درک آن باشند.”
حال که با کد تمیز آشنا شدیم اگر بخواهم سریع و کوتاه کد کثیف را معرفی کنم می گویم کد کثیف کدی می باشد که :
- هزینه نگهداری آن زیاد باشد
- تغییر و توسعه آن سخت باشد
روش شناسایی کدهای کثیف
· کد وابسته، سفت و سخت
هنگامی که می خواهید یک بخشی از کد را ویرایش کنید. باید حواستان به کد سایر جاهای دیگر نیز باشد. باید آنها را نیز ویرایش کنید. در حالی که آنها ربطی به تغییر شما ندارند. کد وابسته کدی است که وابستگی بین بخش های کد به هم بسیار می باشد. در این نوع کدها شما نمی توانید یک تغییر ایزوله ایجاد کنید.
· کد شکننده
کد شکننده بسیار بدتر از کد وابسته می باشد. حداقل در کد وابسته هنگام کامپایل به خطا برمی خوریم. در کد شکننده ، اگر شما یک قطعه کوچک از کد را در یک ماژول تغییر دهید، یک ویژگی کاملاً متفاوت را در یک ماژول کاملاً متفاوت دچار مشکل می شود. و هیچ راه آسانی برای یافتن این خطاها در طول توسعه وجود ندارد.
· کد غیر قابل استفاده مجدد
به عنوان مثال، وقتی شما بخواهید یک ویژگی جدید را در پروژه خود پیاده کنید که همان کاری است که همکار شما برای یک پروژه متفاوت انجام داده است. اما شما به راحتی نمی توانید از کد همکارتان در پروژه خودتان استفاده مجدد کنید زیرا این کد به برخی دیگر از ویژگی های نامربوط پروژه آنها بستگی دارد که به نوبه خود به سیستم زیرساختی و یا پایگاه داده ای که در پروژه خود ندارید هم بستگی دارد. و بهتر است که پیاده سازی خود را برای آن ویژگی بنویسید.
این مشکل معروف به “گوریل و موز” است:
“شما یک موز می خواستید اما آنچه که گرفته اید یک موز در دست یک گوریل همراه با کل چنگل می باشد.”
در انتها یک جمله را یادآور شوم و آن اینست که :
کد تمیز کدی است که توسط کسی که به آن اهمیت می دهد نوشته شده است.
در مطلب بعدی از سری “کد تمیز” منابعی مفیدی برای یادگیری کد تمیز را معرفی خواهم کرد.
نظر شما درباره تعریف کد تمیز و کد کثیف چیست؟ شما روش های دیگری را برای شناسایی کد کثیف دارید؟ لطفا در بخش نظرات تجربیات خود را با ما درمیان بگذارید.
بنده یک فریمورک مبتنی بر استور پروسیجر ایجاد کرده ام که به لحاظ ایزوله کدنویسی بسیار به تعریف کدنویسی تمیز شباهت دارد
SP-Based.com