اگر از یک برنامه نویس بخواهید کدی طولانی برای بخشی از یک پروژه بزند احتمالا از پیشنهاد شما استقبال کند. اما اگر به او بگویید که این کد آماده است و او باید آن را دستکاری کند، احتمالا تمایلی نشان ندهد و یا با اکراه آن را بپذیرد. دلیل این امر این است که بسیاری از ما به گونه ای که عادت داریم برنامه نویسی میکنیم درحالیکه ممکن است فهم و اصلاح آن برای دیگران سخت باشد. در این مطلب بررسی میکنیم که کدنویسی تمیز یا clean code چیست و درباره اصول آن صحبت میکنیم.
clean code چیست؟
کدنویسی تمیز (Clean Code) مجموعه اصولی است که به شما کمک میکند کدی بنویسید، که فهم و اصلاح آن توسط دیگران و یا بعد از مدتهای طولانی برای خودتان سخت نباشد. این اصول استانداردهایی هستند که اگر رعایت شوند، شما را تبدیل به یک برنامه نویس حرفه ای میکنند. کدنویسی تمیز در کار گروهی اهمیت بسیار زیادی دارد.
در متدولوژی هایی مانند چابک (Agile) کدنویسی تمیز ضروری به نظر میرسد زیرا اعضای تیم، در بسیاری از موارد ناچار به تکمیل و اصلاح کدهای یکدیگر هستند. کد کثیف (Dirty Code) اصطلاحی است که در برابر کدنویسی تمیز وجود دارد. عدم رعایت اصول کدنویسی تمیز، بی نظمی و استفاده از رویههای تکراری کد شما را به Dirty Code تبدیل میکند.
کدنویسی تمیز اهمیت زیادی در هزینه زمانی و نیروی انسانی تیمهای فنی دارد. طبق تحقیقاتی که انجام شده معمولا توسعه دهندگان 30 تا 40 درصد زمان خود را صرف نوشتن کدهای جدید میکنند. این در حالی است که حدود 60 درصد از زمان آنها صرف نگهداری و اصلاح (Debug) کدها میشود.
اصول کدنویسی تمیز چیست؟
سادگی کدها (KISS) :Keep It Simple Stupid یکی از اولین اصول در کدنویسی تمیز و به این معنی است که از پیچیدگی بیش از حد کدها بپرهیزیم و در سادهترین شکل ممکن برنامه نویسی کنیم. بنابراین سعی کنید توابع را در سادهترین شکل ممکن بنویسید و تاحد ممکن از اضافه کردن پیچیدگیهای بی مورد دوری کنید.
خوانایی و قابل فهم بودن کدها : هرچه میزان خوانایی و فهم کدها راحتتر باشد، زمان کمتری برای اصلاح آنها لازم است.
نام گذاری مناسب : برای کلاسها و توابع مختلف، نام گذاری مناسب انجام دهید. این کار به ترتیب روند کار و راحتی در جستجوی بخشهای مختلف کمک زیادی خواهد کرد. نام یک کلاس یا تابع باید متناسب با عملکرد آن باشد
مدیریت آرگومان ها: بهتر است توابع آرگومانهای زیادی نداشته باشند. همچنین بدنه هر تابع را تا جایی که ممکن است به قسممتهای مختلف شکسته و در توابع مختلف قرار دهید.
عدم کامنت گذاری : اگر در کد خود کامنتهای زیادی میگذارید احتمالا اشتباهی در کار است. کد شما باید به قدری واضح باشد که نیازی به توضیحات اضافه نداشته باشد.
انتخاب زبان مناسب : ممکن است برخی زبانهای برنامه نویسی برای پیاده سازی گروهی از مسائل سادهتر و بهتر باشند. به عنوان مثال اگر به هر دو زبان جاوا و پایتون مسلط هستید، شاید استفاده از پایتون بهینهتر باشد.
بازبینی کدها : کد خود را چندین بار بازبینی کنید. با این کار دیگر نیاز نیست افراد بعدی که کد شما را میخوانند زمان زیادی را صرف ویرایشهای اولیه کنند.
کاهش وابستگیها : بهتر است وابستگیها (Dependencies) درپروژه کم باشد تا نگهداری و تغییر دادن آن در آینده راحت باشد.
تست پذیری : کدهایی که مینویسید باید از همه جنبههای فنی قابل تست باشند. کدی که قابل تست نباشد، عملا یک کد تمیز محسوب نمیشود.
کاهش حجم توابع : سعی کنید تا جای ممکن توابع را کوتاه و مختصر بنویسید. ممکن است بعضی از حلقهها و رویههای تکراری در بخشهای مختلفی از کد به کار برده شوند. با تعریف چنین رویه هایی در یک تابع جداگانه از افزایش خطوط توابع جلوگیری میشود.
یکی از مهمترین مسائل در فرایند برنامه نویسی داشتن منطق درست برای پیاده سازی بهینه صورت پروژه است. وقتی تفکر طراحی و الگوریتمی پیدا کنید، طراحی مسیری برای پیاده سازی صحیح سادهتر به نطر میرسد. آشنایی و مطالعه در برخی زمینههای مرتبط میتواند به شما در شکل گیری این ذهنیت کمک کند.
مطالعه الگوریتمهای طراحی
الگوریتمها (Algorithm) تعیین میکنند که یک مسئله را چگونه باید حل کنید. بنابراین برنامه نویسانی که دراستفاده از الگوریتمها و نوشتن الگوریتمهای جدید مهارت داشته باشند، در مرحله پیاده سازی نیز موفقتر خواهند بود. البته که یادگیری آنها نیازمند صرف زمانی برای مطالعه دقیق و توانمندیهای ریاضیاتی است. اگر در کنار مهاترهای فنی این مرحله را نیز پشت سر بگذارید ، به احتمال زیاد میتوانید تبدیل به یک برنامه نویس ارشد در حوزه کاری خود شوید.
ساختمان دادهها یکی از مهمترین مباحث در دانش برنامه نویسی محسوب میشوند و در ترکیب با الگوریتمهای طراحی، اساس منطق برنامه نویسی را تشکیل میدهند. ساختمان دادههای مختلف تاثیر زیادی در سرعت اجرای برنامهها دارن و مزایای مختلفی را برای کار با دادهها در اختیار برنامه نویسان قرار میدهند.
اهمیت مطالعه الگوهای طراحی در clean code چیست؟
الگوهای طراحی (Design Patterns) راه حلهای ثابتی برای مشکلات رایج برنامه نویسی دراختیار شما قرار میدهند و به شما امکان استفاده از یک معماری قابل اطمینان را میدهند. تسلط داشتن بر دیزاین پترنهای مختلف میتواند بسیاری از باگهای احتمالی را در برنامه نویسی کاهش دهد و باعث ارتقا سطح فنی کدها شود.
اگر به مفاهیم برنامه نویسی علاقه مندید ولی مسیر یادگیری آن برایتان مشخص نیست پیشنهاد میکنیم در دوره آموزش برنامه نویسی سون لرن شرکت کنید تا مسیر یادگیری برنامه نویسی برایتان روشن شود.
جمع بندی
نکته مهم این است که در فرایند کدنویسی تمیز اساسیترین بخش، طراحی مسیر و نقشه ذهنی پیش از آغاز فرایند برنامه نویسی است. بهتر است قبل از شروع الگوریتمهای کلی، بدانید که چه راهی برای پیاده سازی مسئله پیش رو راحتتر است. سپس با تکیه بر اصول Clean Code کدهای خود به تمیزترین شکل ممکن پیاده سازی کرده و در اختیار مدیر پروژه قرار دهید. تفاوت Clean Code و Dirty Code در پروژه هایی با تعداد خطوط کد بالا بسیار واضح است. برخی از کتابهای کاربردی در حوزه کدنویسی تمیز و برنامه نویسی در این مقالهبرای شما جمع آوری شده اند.
۱۱ دیدگاه
علی۱۵ آذر ۱۴۰۲، ۰۴:۱۶
سلام. ممنون میشویم در آینده چند نمونه کد هم عنایت بفرمائین . . .
نازنین کریمی مقدم۱۸ آذر ۱۴۰۲، ۱۳:۲۰
درود
درخواست تون در تیم تولید محتوا بررسی میشه. ممنون که با ما همراه هستید.
samira padidar۰۹ آذر ۱۴۰۰، ۱۰:۱۶
سلام
منظور از برنامه نویسی ماژولار اینه که کدها ی هر بخشی که میخایم ماژول بشه تو یه فایل جدا بزنیم ؟ درست متوجه شدم؟
Nazanin KarimiMoghaddam۱۰ آذر ۱۴۰۰، ۰۹:۱۴
سلام
1. برنامه نویسی ماژولار یعنی شما بخشهای پرتکرار (مثل دیالوگ حذف) در برنامه رو یک کلاس یا کامپوننت یا ماژول کنید و صد دفعه جاهای مختلف برنامه از نو کدشو ننویسید.
2. از لحاظ اصولی بهتر هست که این ماژول در یک فایل جدا باشه همونطور که فرمودید و به تمیزی و خوانایی کد کمک میکنه
۲۲ اردیبهشت ۱۴۰۱، ۱۶:۲۹
نه اگر دیده باشید
برنامه نویسان در برنامه نویسی خود ، از کدی (در برخی از زبان هــا ) به نام Procedures ( پراسیژرز )
استـفاده میکـنند ، که از جلوگیری نوشتن کدهای تکراری در بخشهای مختلف خود داری میشود ; که همین موضوع ، بـاعـــث ســبک تـر شــدن برنامه و ، جلوگیری از گرفتم حجم زیاد میشود
۲۲ اردیبهشت ۱۴۰۱، ۱۶:۳۳
یا به زبانی دیگر
برای مثال در زبان برنامه نویسی اسکرچ (Scratch ) ما در برنامه نیاز به تکرار کد هایی هستیم ولی ،
یک حلقه برمیداریم و اسم اون رو مثلا عملیات پرش گربه (Jump Process) میگزاریم و بعد ، داخل حلقه تمام کد هایی که نیاز به تکرار دارند رو میزاریم !
اینبار بجای اینکه تمام کدهای عملیات رو در بخش هایی از کدها بنویسیم ، Name Tag ( بلوک )
عملیات پرش گربه رو بمیداریم و در انجا میگزاریم ، حال با نوشتن یک کد ، تمام کدها اجرا میشوند :)
AMD۰۵ اردیبهشت ۱۴۰۰، ۱۶:۲۲
بسیار عالی و مفید بود
با تشکر از زحمتی که کشیدید.
amir hossein۲۳ خرداد ۱۳۹۹، ۰۹:۳۲
در مقاله بالا نوشتید که عدم کامنت گذاری اما خود کامنت نوشتن برای کدها جزء کد نویسی تمیزه
نازنین کریمی مقدم۳۰ شهریور ۱۳۹۹، ۲۰:۲۵
خیر. در توضیح آورده ایم که:
عدم کامنت گذاری : اگر در کد خود کامنتهای <strong>زیادی</strong> میگذارید احتمالا اشتباهی در کار است. کد شما باید به قدری واضح باشد که نیازی به توضیحات اضافه نداشته باشد.
خلاصه اینکه هرکاری به اندازه اش :)
Babak Sorkhpour۲۰ آبان ۱۳۹۸، ۱۲:۱۳
با سپاس بسیار شیوا و ارزشمند بود ولی بهتر بود همراه مثال و اطلاعات بیشتر عرضه میگردید
با احترام
دکتر بابک سرخپور
زیگن، آلمان
ریحانه یزدانی۲۲ آبان ۱۳۹۸، ۱۱:۵۶
سلام
سپاس از توجه شما
درست میفرمایید. قصد ما آشنایی مفاهیم اولیه بود و سعی میکنیم در آینده نزدیک پست کاملتری همراه با مثال آماده کنیم.