Mahdi Azadbar
Mahdi Azadbar
خواندن ۶ دقیقه·۶ سال پیش

کد عالی = کد تمیز و کد زیبا


کد عالی = کد تمیز و کد زیبا
کد عالی = کد تمیز و کد زیبا


یکی از کامل ترین تعریف ها در رابطه با کیفیت کد را رابرت مارتین(عمو باب) در جمله زیر ارایه میدهد:

تنها واحد اندازه گیری دقیق کیفیت کد لعنت بهش(what the fuck) / دقیقه هست.

اجازه بدین مقداری بیشتر توضیح بدم.

  • لعنت بهش (در حالت انزجار) - این کد بدرد ما نمیخوره
  • لعنت بهش (در حالت تحسین) - کسی که این کد رو زده باهوش بوده
  • لعنت بهش ( در حالت ناراحتی) - این مزخرفات رو نمیفهمم

پس چه چیزهایی درنگاه اول با دیدن کد ما را تحت تاثیر خودش قرار میدهد؟

در پاسخ میتوان گفت که یک کد تمیز و زیبا هست که ما رو تحت تاثیر خود قرار میدهد. و نوشتن یک کد تمیز و زیبا نشانِ حرفه ای بودن یک مهندس نرم افزار هست.

برای یادگیری این مهارت مهندسی و ساختاری دو عامل وجود دارد : دانش و کار. دانش به شما کمک می‌کند تا الگوها، قواعد، شیوه ها و چیزهای جدید را یاد بگیرید تا چطور در حرفه خود بهتر باشید. اما کار و تلاش همراه با تمرین زیاد باعث می‌شود که این دانش با انگشتان، چشمها، و طرز تفکرتان اجین شود.

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

در اینجا راههایی وجود دارد تا از نوشتن کد زیبا و تمیز لذت ببرید.


چه چیزهایی را باید در نامگذاری رعایت کنیم.

کنریک لامار (خواننده آمریکایی) یه جمله خوبی در این رابطه داره!

وقتی من بخوام یک داستان واقعی رو بگم. اون رو با نام خودم شروع میکنم.

در نرم افزار نامگذاری همه جا هستش. ما توابع، کلاس ها، آرگومانها، پکیج ها و همه چیز رو نامگذاری میکنیم. ما فایل‌ها، پوشه‌ها، و هر چیزی که مربوط به اون باشه رو نامگذاری میکنیم. ما همیشه در حال نامگذاری هستیم و این مهمترین بخش در تولید یک کد تمیز هست.

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

همیشه به یاد داشته باشید که نام متغییر، توابع و کلاس ها باید سه سوال رو پاسخ بده:

دلیل وجودش، کارش چیه، و چطور استفاده میشه؟


توابع باید فقط یک کار را انجام دهند.

تمیز نوشتن توابع ماهیت یک کد تمیز می باشد. در اینجا دو نقش طلایی برای نوشتن توابع تمیز وجود دارد:

آنها باید کوچک باشند.

آنها باید فقط یک کار و آن را هم بدرستی انجام دهد.

بنابراین این بدان معناست که توابع شما نباید بزرگ باشد تا بتواند ساختارهای توجیه شده را نگه دارد. بنابراین، سطح تورفتگی(دندانه کذاری) یک تابع نباید بیشتر از یک یا دو باشد. این روش باعث می شود خواندن، درک و هضم کد آسان تر شود.

یک برنامه نویس خوب از امکانات زبان برنامه نویسی انتخابی خود برای ساخت کدهای غنی تر، واضح تر و تمیزتر استفاده می کند که تا بتواند به عنوان یک قصه گو کامل عمل کنند.


توضیحات برای کدهای بد نیست

ونوس ویلیام (تنیسور آمریکایی) میگه:

هرکسی نظر خودش رو مینویسه. منتها از این نظرات هست که شایعات شروع می‌شوند

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

بنابراین به طور خلاصه، توضیحات برای کدها مضر هستند اما می توانند ضرروی باشند. نگهداری نظرات قدیمی سخت است و بیشتر برنامه نویس ها برای اینکه توضیحات را با کدهای خود تغییر نمی‌دهند، معروف هستند.

کدها جابهجا میشوند و تکامل پیدا میکنند. بخش های مختلف یک کد در جاهای مختلف قرارداده می شود. ولی توضیحات این خصوصیت را ندارند و این مشکل ساز می‌شود.

همیشه به یاد داشته باشید که کد تمیز و واضح با توضیحات مختصر به مراتب بهتر از کد های پیچیده و مقدار زیادی توضیحات است. وقت خود را با توضیح برای کدهای آشفته تلف نکنید این زمان را برای از بین بردن آشفتگی صرف کنید.


قالب بندی کدها(نوع برنامه نویسی شما) همیشه در اولویت است.

رابرت مارتین به صورت دقیق توضیح میده که:

قالب کد در رابطه با ارتباط شما با دیگران برنامه نویسان است. و ارتباط با دیگر برنامه نویسان اولین قدم برای بهبود روابط کاری یک توسعه دهنده ی حرفه ای می‌باشد.

جمله بالا را نباید دست کم گرفت به دلیل اینکه یکی از مهمترین ویژگی های یک توسعه دهنده واقعا بزرگ است.

قالب بندی کدها یک پنجره برای ذهن شماست. ما می خواهیم مردم تحت تاثیر نظم، توجه به جزئیات و شفافیت تفکر شما قرار گیرند. اما وقتی که به کد نگاه کنیم، اگر آنها یک املت یا آش درهم ریخته باشند و سر و ته آنها مشخص نباشد، بدون هیچ شک و تردیدی از اعتبار شما کاسته خواهد شد.

همیشه به یاد داشته باشید که شما برای سبک و نظم استفاده شده به خاطر سپرده خواهید شد نه صرفا به خاطر کدتان . بنابراین شما باید مراقب باشید که کد شما به سادگی قالب بندی شده است و توسط قوانین ساده قابل درک توسط تمام اعضای تیم اداره می شود.


بررسی خطاها

جورج کانگییم(پروفسور دانشگاه MIT) به درستی گفت.

اشتباه برای انسان است، اما وقتی در خطا باقی بماند شیطانی است.

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

بسیاری از کدها اصلی در کدهای بررسی گم می‌شوند. و باعث جدا شدن هدف و منطق کدها از هم می‌شود. وقتی این اتفاق می افتد یعنی ما دچار اشتباه است.کد باید پاک و قوی باشد و خطاها را در ظرافت و سبک مشخصی بررسی کند. این علامت یک هنرمند نرم افزاری عالی است.

همیشه به یاد داشته باشید که هر استثنایی(exception) که پرتاب(throw) می‌کنید باید متناسب با اطلاعات کافی در مورد منبع و موقعیت را داشته باشد.


همه اینها باهم استفاده کنید.

اگر بخواهیم همه این موارد را در یک جمله جمع اوری کنیم چه باید گفت؟

اینطور می‌توان بیان کرد که حسی که کد به ما می دهد؛ نرم افزار حاصل حس مشترک است.

به گفته رابرت مارتین، "نوشتن کد تمیز نیاز به استفاده منظم و اعمال تکنیک های کوچک دارد که تکنیک ها حاصل تجربه های ناخوشایند خودتان و دیگران است. این تکنیک های کوچک به طور کلی به نام حسِ کد شناخته می شود."

برخی از ما با آن متولد می‌شویم و بعضی ازما از طریق تمرین، سماجت و پشتکار آن را کسب می کنیم. این حسِ کد نه تنها به ما کمک می کند تا بین کد خوب و کد بد تفاوت را تشخیص دهیم، بلکه به ما در ایجاد استراتژی هایی برای تبدیل کد بد به کد خوب کمک می کند.

این حسِ کد به برنامه نویس کمک می کند تا بهترین تغییرات و بهترین ابزار را برای هدایت او در تلاش برای ایجاد یک کد تمیز و زیبای کمک کند.

به طور خلاصه، یک برنامه نویس با حس کد، یک نقاش است که می تواند یک صفحه خالی را به یک کار هنری زیبا تبدیل کند که در سالهای آینده به یاد می آید.

همانطور که هارولد آابلسون به درستی خلاصه کرده است.

برنامه ها باید برای افرادی که میخواهند بخوانند نوشته شود و فقط توسط ماشینها اجرا می‌شوند.


منابع:

“A handbook of Agile Software Craftsmanship” — Robert Martin.

“A handbook of Agile estimation” — Mike Cohn

https://medium.com/swlh/excellent-code-clean-and-beautiful-code-b541ca4b5a39




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