
آموزش کدنویسی تمیز: نوشتن کد برای انسان ها
آموزشکدنویسی تمیز: نوشتن کد برای انسان ها یکی دیگر از آموزش های گروه آموزشی پرووید می باشد که در این قسمت آن را به شما معرفی می کنیم. این بسته ی آموزشی نیز یکی از دوره های آموزشی دیگر که در حوزه ی فارسی سازی آموزش های انگلیسی تنظیم شده است می باشد. عنوان این بسته ی آموزشی آموزش کدنویسی تمیز: نوشتن کد برای انسان ها است که با نام اصلی Clean Code: Writing Code for Humans از شرکت Pluralsight منتشر شده است.
کدنویسی تمیز(Clean Code) چیست؟
برای بهتر درک کردن تکنیک های کدنویسی تمیز بهتر است که در ابتدا در رابطه با کد تمیز صحبت کنیم. کد تمیز، کدی قابل فهم، شفاف و با قابلیت نگهداری بالا می باشد. کدهای غلط، کدهایی هستند که ایجاد کردن تغییر در آنها و یا فهمیدن عملکرد آنها نه تنها برای برنامه نویسی که آنها را نوشته است بلکه برای سایر برنامه نویسان که در آینده با آن کد روبرو خواهند شد نیز آسان نخواهد بود.
استفاده کردن از قوانین کدنویسی تمیز در برنامه نویسی کمک می کند تا سورس کد شما حالت ماژولار پیدا کرده و بنابراین فهمیدن و تست کردن آن ساده تر باشد. اگر کدهای نوشته شده برای یک نرمافزار را در قالب یک خانه در نظر بگیریم، اصول کدنویسی تمیز شبیه به شالوده آن خانه می باشند. در نوشتن کدهای تمیز سه قانون اساسی وجود دارد که اگر مرتباً آنها را در دستور کار قرار دهید، سورس کد نوشته شده تمیز خواهد ماند.

- قانون اول، این است که همواره ابزار مناسبی را برای کاری که می خواهید انجام بدهید استفاده کنید.
- قانون دوم، بهینه سازی کردن نرخ سیگنال به نویز و یا اصطلاحاً signal-to-noise ratio می باشند.
- نهایتاً قانون سوم، تلاش به نوشتن کد های خود مستند و یا self-documenting code می باشد.
برای نوشتن کد های تمیز، تکنیک های متفاوت و متنوعی معرفی شده اند که فارغ از هر زبان برنامه نویسی، می توانید از آنها استفاده کنید. در ادامه به صورت تیتروار به برخی از این تکنیک ها می پردازیم.
- استفاده کردن از convention ها و یا رسم و رسوم های کدنویسی: هر زبان برنامه نویسی موجود برای توسعه نرم افزار مورد نظرتان که از آن استفاده می کنید، مجموعه ای از convention ها و یا رسم و رسوم هایی که دیگر برنامه نویسان از آنها استفاده می کنند را تعریف می کند. با احترام گذاشتن به این رسم و رسوم ها و نوشتن کد براساس آنها می توانید کد های خود را به سمت تمیز شدن و تمیز ماندن سوق بدهید.
- انتخاب مناسب نام: نامگذاری مناسب متغیرها، متد ها، کلاس ها و پارامتر های مربوط به متد ها، نیز می توانند درک شما از کد نوشته شده را شدیداً بهبود ببخشند. سعی کنید از نام هایی استفاده کنید که توصیف گر ماهیت مربوط به آن متد و یا کلاس و یا پارامتر باشند.
- استفاده کردن مناسب از کامنت ها: نوشتن کامنت ها میتواند به مستند کردن کد کمک کند. اگر در استفاده کردن از کامنت ها زیاده روی کنید نرخ سیگنال به نویز را کاهش داده اید. اغلب کد هایی که نیاز به کامنت دارند کد هایی هستند که به اندازه کافی تمیز نوشته نشده اند. بنابراین برنامه نویسی که کد مورد نظر را نوشته است تلاش می کند با نوشتن کامنت به کد نوشته شده شفافیت بدهد. در چنین شرایطی، اگر به جای نوشتن کامنت به ریفکتور کردن کد و افزایش نرخ سیگنال به نویز فکر کنید کد شما تمیزتر خواهد شد.
تکنیک هایی که در این قسمت بررسی کردیم فقط چند مورد از مواردی هستند که می توانید با استفاده کردن از آنها، کد های خود را تمیزتر کنید. تکنیک های بی شمار دیگری وجود دارند که با درک کردن آنها و به کار بستن مرتب هرکدام از آنها می توانید کد هایی را تولید کنید که نه تنها در زمان نوشته شدن تمیز هستند، بلکه در آینده نیز تمیز خواهند ماند.
اصول نامگذاری متغیرها، متدها و کلاسها در C#
نامگذاری مناسب یکی از مهمترین بخشهای نوشتن کدی است که دیگران بتوانند آن را بهراحتی بخوانند و درک کنند. نام متغیر، متد یا کلاس باید تا حد امکان هدف و مسئولیت آن را مشخص کند، بدون اینکه خواننده مجبور باشد برای فهم معنای آن به بخشهای دیگر برنامه مراجعه کند. در پروژههای C#، انتخاب نامهای روشن و هماهنگ با قراردادهای رایج زبان به افزایش خوانایی کد کمک میکند و فهم ساختار برنامه را برای اعضای تیم آسانتر میسازد.
نامهای مبهم، بیش از حد کوتاه یا ناسازگار با مسئولیت واقعی یک بخش میتوانند هزینه نگهداری نرمافزار را افزایش دهند. برای مثال، نام یک متد بهتر است عملی را که انجام میدهد بهروشنی بیان کند و نام یک کلاس نیز نقش آن را در ساختار برنامه نشان دهد. استفاده از نامگذاری معنادار باعث میشود کد تا حد بیشتری خودش را توضیح دهد و نیاز به توضیحات اضافی کاهش پیدا کند. این اصل در پروژههای بزرگ که توسعهدهندگان متعددی روی یک کدبیس کار میکنند، اهمیت ویژهای دارد.
طراحی توابع و متدهای خوانا و قابل نگهداری
توابع و متدها از اجزای اصلی ساختار برنامه هستند و نحوه طراحی آنها تأثیر مستقیمی بر خوانایی کد دارد. متدی که مسئولیتهای متعدد و نامرتبط را بر عهده دارد، معمولاً دشوارتر فهمیده میشود و تغییر دادن آن میتواند بخشهای دیگر برنامه را تحت تأثیر قرار دهد. تقسیم منطق پیچیده به توابع کوچکتر با مسئولیت مشخص، به توسعهدهنده کمک میکند رفتار هر بخش را سریعتر درک کند و تغییرات موردنیاز را با دقت بیشتری انجام دهد.

در طراحی متدهای تمیز، نامگذاری مناسب، مشخص بودن ورودیها و خروجیها و محدود بودن مسئولیت هر تابع اهمیت دارد. همچنین، کاهش تکرار منطق در بخشهای مختلف برنامه میتواند از ناسازگاری رفتارها جلوگیری کند. هدف این نیست که تمام متدها صرفاً کوتاه باشند، بلکه هر متد باید وظیفهای روشن و قابل توضیح داشته باشد. رعایت این اصول در C# باعث میشود کد ساختارمندتر شود و بررسی، تست و توسعه قابلیتهای جدید در مراحل بعدی آسانتر انجام گیرد.
سادهسازی شرطها و ساختار کلاسها در کدنویسی تمیز
عبارتهای شرطی بخش مهمی از منطق برنامه را تشکیل میدهند، اما ترکیب شرطهای تو در تو و شاخههای متعدد میتواند درک جریان اجرای کد را دشوار کند. سادهسازی شرطها، انتخاب نامهای معنادار برای متغیرهای منطقی و مشخص کردن حالتهای مختلف اجرا به خوانایی برنامه کمک میکند. در C#، توسعهدهنده میتواند با بازنگری در ساختار شرطها، منطق پیچیده را به بخشهای قابل فهمتری تقسیم کند و احتمال اشتباه هنگام تغییر رفتار برنامه را کاهش دهد.
ساختار کلاسها نیز باید با توجه به مسئولیتهای آنها طراحی شود. کلاسی که وظایف نامرتبط زیادی را مدیریت میکند، معمولاً به تغییرات مختلف حساستر است و تست کردن آن دشوارتر میشود. تفکیک مسئولیتها و ایجاد مرزهای روشن میان اجزای برنامه به حفظ انسجام کد کمک میکند. زمانی که هر کلاس هدف مشخصی داشته باشد، توسعهدهندگان راحتتر میتوانند رفتار آن را بررسی کنند و تغییرات را بدون درگیر شدن با جزئیات نامرتبط انجام دهند. این اصول برای نگهداری کد در پروژههای بلندمدت بسیار کاربردی هستند.
نقش کامنتها و بازبینی مداوم در حفظ Clean Code
کامنتها زمانی مفید هستند که اطلاعاتی را توضیح دهند که از خود کد بهسادگی قابل برداشت نیست. توضیح دلیل یک تصمیم فنی، بیان یک محدودیت مهم یا روشن کردن یک رفتار غیرمعمول میتواند به درک بهتر برنامه کمک کند. در مقابل، کامنتهایی که فقط همان کاری را تکرار میکنند که نام متد یا عبارت کد نشان میدهد، معمولاً ارزش زیادی اضافه نمیکنند. نوشتن کد روشن و استفاده هدفمند از کامنتها باعث میشود خواننده بتواند منطق برنامه را با تلاش کمتری دنبال کند.
تمیز نگه داشتن کد به یک بار بازنویسی محدود نمیشود و نیازمند توجه مداوم هنگام توسعه قابلیتهای جدید است. با گذشت زمان، ممکن است نامها نامناسب شوند، توابع مسئولیتهای بیشتری بگیرند یا تکرارهای تازهای در کد ایجاد شود. بازبینی و Refactoring منظم کمک میکند این مشکلات پیش از پیچیده شدن ساختار برنامه شناسایی شوند. پایبندی به اصول Clean Code در کار روزمره باعث میشود کیفیت کد بهتدریج حفظ شود و تغییرات آینده با هزینه و پیچیدگی کمتری انجام گیرند.
سرفصل مطالب آموزش کدنویسی تمیز: نوشتن کد برای انسان ها
فصل اول: مقدمه- مقدمه
- کدنویسی تمیز چه اهمیتی دارد؟
- یک بنیاد
- ما نویسنده هستیم
- رسم و رسومات (Convention ها)
- منابع
- سه اصل هسته ای
- ابزار مناسب برای کار
- اهمیت مرزها: Native باقی بمانید
- شیطان بالقوه
- سیگنال نرخ Noise
- اصل DRY
- کدهای خود مستند شده
- جمع بندی
- مقدمه
- اهمیت نام گذاری
- کلاس ها
- متدها
- پدیده ی Rubber Ducking
- نشان های خطر
- عوارض
- اختصارها
- Boolean ها
- تقارن
- جمع بندی
- مقدمه
- مقایسه ی Boolean ها
- انتساب Boolean ها
- شرط های مثبت
- پدیده ی Ternary Elegance
- پدیده ی Stringly Typed
- پدیده ی Magic Numbers
- جملات شرطی پیچیده
- مقایسه ی Polymorphism و Enums
- Declarative عمل کنید
- متدهای مبتنی بر جدول
- جمع بندی
- مقدمه
- چه موقع یک تابع بنویسیم؟
- جلوگیری از تکرار کد
- حاشیه گذاری بیش از حد
- روش Extract Method
- روش Return Early
- روش Fail Fast
- مشخص کردن قصد تابع
- انجام دادن یک تک کار
- متغیرهای Mayfly
- پارامتر ها
- چقدر طولانی خیلی طولانی است؟
- استثناها
- جمع بندی
- مقدمه
- چه موقع یک کلاس بسازیم؟
- مبحث Cohesion
- یک کلاس چه موقع خیلی کوچک است؟
- پدیده ی Primitive Obession
- اصل Proximity
- قانون Outline
- جمع بندی
- مقدمه
- نیاز و کمک گرفتن
- افزونگی
- قصد
- عذرخواهی ها و اخطارها
- کدهای Zombie
- استفاده از Divider و Brace Tracker
- پدیده ی Bloated Header
- پدیده ی Defect Log
- کامنت های تمیز
- جمع بندی
- مقدمه
- نگاه کلی به Registration
- معیارهای کد (Code Metrics)
- مبحث Automated Test
- کامنت ها
- متغیرهای Mayfly
- Guard Clause ها
- مسائل مربوط به نام گذاری
- روش Return Early
- ریفکتورکردن پرچم های قرمز
- منسجم کردن Guard ها و روشن کردن قصد
- روش متدهای مبتنی بر چدول و Fail Fast
- قانون Outline
- تست های Regression
- فیکس کردن باگ ها
- نتایج معیارهای کد و جمع بندی
- زمان مناسب برای ریفکتور کردن
- پنجره های شکسته
- مرور کد و Pair Programming
- قانون Boy Scout
- جمع بندی






