۱۰نکته مهم برای نوشتن کد بهتر و سادهتر
نوشتن کد تمیز و مرتب چیزی است مانند طراحی، آشپزی یا عکاسی. گرچه در نگاه اول ممکن است ساده به نظر بیاید؛ اما به هیچ وجه ساده نیست. شاید از خود بپرسید، اصلاً چرا باید خود را اذیت کنیم؟ دلیل ارزشمند بودن تلاش برای کدنویسی مرتب موارد زیر هستند:
حل مشکلات آسانتر میشود. زمانی که به کدهای مرتب نگاه میکنید، روش حل مسئله شما نیز تغییر مییابد. به جای این که کورکورانه به دنبال راهحل باشید، الگوریتمها و طراحی نرمافزار ظریفتر و آگاهانهتر میشود.
زمان کمتری صرف نگهداری کد میشود. کد مرتب، خوانایی و ادراک آسانتری دارد. از این رو زمان کمتری صرف درک بخشهای مختلف کد میشود و این زمان میتواند صرف اصلاح، بازبینی و گسترش کد شود.
ایدهها به راحتی انتقال مییابند. اگر مشغول همکاری با برنامهنویسهای دیگر باشید، کدنویسی مرتب باعث میشود که احتمال سوءبرداشت بین شما و دیگران کاهش یابد و در بلندمدت تعداد باگها را کاهش میدهد.
در ادامه برخی گامهای آغاز کدنویسی مرتب را معرفی کردهایم:
۱-اسامی و نام های گویا
برای متغیرها باید اسامی و نام هایی را انتخاب و تعیین نمایید؛ اما آنچه که باعث می شود تا کد نویسی بهتر و ساده تر داشته باشید استفاده از اسامی مشخص و مرتبط می باشد. فرض کنید یک اسم و نام بی معنا برای یک متغیر انتخاب نمایید. برای آنکه متوجه شوید و کد را درک کنید باید کل کد را مطالعه کنید تا اسم آن را نیز درک نمایید؛ اما اگر یک نام مرتبط با کد انتخاب کنید که مبهم نباشد می تواند در درک بهتر کد در زمان کمتر بسیار موثر باشد. این موضوع در کد نویسی بهتر و ساده تر بسیار حائز اهمیت است.
۲-هر کلاس/تابع باید یک هدف خاص داشته باشد
آیا تاکنون با تابعی مواجه شدهاید که در صدها یا حتی هزاران خط نوشته شده باشد؟ اگر چنین بوده است، در این صورت احتمالاً میدانید که گشتن درون چنین تابعی و درک و ویرایش آن تا چه حد رنجآور است. توضیحات درون تابع میتوانند کمک کنند؛ اما این کمک کاملاً محدود است.
کد مرتب را میتوان به قطعه کدهای منفرد تقسیم کرد. هر تابع باید با هدف انجام یک کار منفرد و هر کلاس با هدف نمایش یک مفهوم خاص نوشته شود. این همان سادهسازی امور است و هر جا که تردید داشتید، بدانید که کد شما هر چه سادهتر باشد، مرتبتر است.
۳-حذف کدهای غیر ضروری
از دیگر نکات برای نوشتن کد ساده تر که می توان ذکر کرد حذف کدهای غیر ضروری است. به طور مثال در برخی موارد شما یک کد را بازنویسی می کنید که کار کند و شما را به هدفی که می خواهید می رساند اما با این وجود کد قدیمی را نیز از بین نبرده اید و پاک نمی کنید. این کد قدیمی در حقیقت یک کد غیر ضروری می باشد. البته شاید به این فکر کنید که ممکن است زمانی این کد قدیمی نیز به کار شما بیاید اما اگر بخواهید که کد نویسی بهتر و ساده تر داشته باشید باید بدانید که از نوشتن و نگهداری هرگونه کد غیر ضروری باید بپرهیزید.
۴- از سبک کدنویسی یکنواختی استفاده کنید
در مورد رویههای برنامهنویسی صحیح، بسیار گفته شده است؛ اما یکی از معایب آن این است که افراد مبتدی طیف گستردهای از عادتهای بعضاً متناقض مییابند که به طور خاص برای حفظ سبک کدنویسی به کار میگیرند.
در این نوشته قصد نداریم بیان کنیم که کدام سبک کدنویسی بهتر از دیگری است. شما میتوانید هر نوع سبکی که دوست دارید را ادامه دهید. اگر ترجیح میدهید قبل از فراخوانیهای متد اسپیس بزنید مشکلی نیست. اما اگر Tab را به اسپیس ترجیح میدهید، نباید اجازه دهید دیگران شما را برخلاف آن متقاعد کنند.
اگر میخواهید از camelCaseNaming (نامگذاری شتری: در این روش اسامی مختلف به صوت چسبیده به هم نوشته میشوند و حرف ابتدای هر کلمه به صورت بزرگ استفاده میشود) برای متغیرها استفاده کنید، آن را با underscore_naming (نامگذاری با استفاده از زیرخط: در این روش کلمات مختلف با علامت _ از هم جدا میشوند.) مخلوط نکنید. اگر در یک جا از ()GetThisObject استفاده میکنید، در جای دیگر از ()FetchThatObject استفاده نکنید. همچنین تلاش کنید هرگز اسپیس و Tab را با هم مخلوط نکنید، چون در این صورت شایسته است که شما را از استفاده از کیبورد محروم کنند.
در مورد کاری که میخواهید انجام دهید از ابتداییترین مراحل تصمیمگیری کنید و گام به گام حرکت کنید. برخی زبانها مانند پایتون و #C راهنماهای سبک کدنویسی خاصی در سطح زبان دارند که بهتر است از آنها پیروی کنید.
۵- هوشمندی کدها
برای این کار می توانید در ابتدا چند خط کد را در یک خط خلاصه کرد که این موضوع تنها باعث کوتاه تر شدن و کمتر شدن کدها می شود اما لزوما به معنای ساده تر شدن آنها نیست؛ اما در هوشمند سازی کدها می توانید از میانبرهایی استفاده کنید.
استفاده از یک سبک مشخص و یکسان برای کدنویسی نیز از دیگر نکات مهم در کد نویسی ساده و بهتر است. این که کدام سبک را برای کد نویسی خود انتخاب می کنید بستگی به خودتان دارد اما بهتر است از آن سبک به طور یکنواخت استفاده کنید. استفاده از یک معماری مناسب برای پروژه ها نیز از دیگر نکات حائز اهمیت در کد نویسی بهتر و ساده تر می باشد. البته منظور از معماری مناسب بهترین معماری موجود نیست بلکه بهترین معماری که برای شما کد نویسی و پروژه مناسب است.
در هر زبان برنامه نویسی اصطلاحات مختلفی وجود دارد که اگر می خواهید کد نویسی بهتر و ساده تر داشته باشید باید به این اصطلاحات آشنایی داشته باشید. توجه به ضد الگوها نیز بسیار مهم است و باید از استفاده کردن آنها جلوگیری نمایید؛ زیرا در صورتی که از این ضد الگوها استفاده کنید کدهایی ناکارآمد به دست می آید.
۶-معماری صحیح را انتخاب کنید
پارادایمها و معماریهای مختلفی وجود دارند که میتوانید برای ایجاد پروژههای خود از آن استفاده کنید. توجه کنید که چگونه میتوانید یک معماری مناسب خود و نه لزوماً بهترین نوع موجود را انتخاب کنید، چون در این خصوص بهترین نوع وجود ندارد.
برای نمونه، الگوی مدل-چشمانداز-کنترلر (MVC) اینک در توسعه وب بسیار متداول است، زیرا به سازمانیافتگی کد کمک میکند و تلاشهای نگهداری کد را به کمترین مقدار میرساند.
به طور مشابه الگوی نهاد-مولفه-سیستم (ECS) نیز در توسعه بازی هم اینک بسیار رایج است، زیرا به ماژول سازی دادهها و منطق بازی به طریقی که نگهداری آن آسانتر باشد کمک میکند و کدی که بدین نحو تولید میشود، خوانایی بالاتری دارد.
۷-استفاده از تجارب دیگران
استفاده از تجارب دیگران می تواند شما را در کدنویسی بهتر و ساده تر بسیار کمک کند. از این جهت بهتر است کدنویسی کسانی که در این کار تبحر دارند را مطالعه نمایید. از دیگر نکاتی که برای کد نویسی ساده تر پیشنهاد می شود نوشتن توضیحاتی برای کدها می باشد. بازسازی کدها نیز از آخرین نکاتی است که برای کد نویسی بهتر و ساده تر می توانیم به آن اشاره نماییم. شاید این بخش برای شما دلپذیر نباشد اما اگر به آن توجه نداشته باشید ممکن است کدهایی تولید کنید که قابلیت نگهداری را برای شما نداشته باشند.
۸- یادگیری اصطلاحهای خاص هر زبان
یکی از دشواریهای کسب مهارت در یک زبان برنامهنویسی جدید، یادگیری تفاوتهای ظریفی است که آن را از دیگر زبانها متمایز میسازد. این تفاوتها میتوانند اختلاف بین کد زشت و درهم پیچیده با کد زیبا و با نگهداری آسان باشند.برای مثال پایتون، جاوا و جاوا اسکریپت را در نظر بگیرید. همه این زبانها از همدیگر متفاوت هستند تا حدی که بسته به این که از چه زبانی استفاده میکنید، روش اندیشیدن شما نیز متفاوت خواهد بود.
گرچه پایتون به طور کامل از روش کدنویسی فشرده و تایپ دهی اردکی (Duck Typing) بهره میگیرد؛ اما جاوا بیشتر از توضیحات طولانی و عبارتهای صریح استفاده میکند. هر زبانی اصطلاحهایی دارد (مانند list comprehensions در پایتون) که روش خاصی از کدنویسی را تشویق میکند. بهتر است این موارد را نیز بیاموزید.
همچنین ضد الگوهایی نیز وجود دارند که باید از آنها پرهیز کنید. این موارد در واقع الگوهای طراحی غیر بهینه هستند که موجب تولید کدهای ناکارآمد، غیر قابل اعتماد و یا بد میشود. سعی کنید همه ضد الگوهای مرتبط با زبان انتخابی خودتان را مطالعه کرده و از یادگیری آنها خودداری کنید.
۹-بازسازی
بازسازی کد (Refactor) همانند ویرایش، بخشی از فرایند نوشتن کد است. بیزاری برخی افراد از بازسازی کد در نهایت خیلی زود منجر به تولید کدی میشود که غیر قابل نگهداری است، بنابراین از هر جنبه که نگاه کنید، بازسازی یکی از مهمترین جنبههای کدنویسی است.
یکی از بهترین توصیههایی که میتوان کرد این است که «برای کد بد توضیح ننویسید؛ بلکه آن را بازسازی کنید.» همان طور که فاولر در نقل قول فوق توضیح داده است، اگر کدی به آن حد پیچیده بود که حس کردید به توضیح نیاز دارد، شاید در واقع بهتر باشد که آن را بازسازی کنید.به علاوه همچنان که بخشهای مختلف کد را ویرایش میکنید، به طور مداوم تلاش کنید کدی که پس از بازبینی بر جای میماند بهتر از کدی باشد که در ابتدا با آن مواجه شدید. شاید این کار نیازمند ایجاد تفاوتهای خیلی ظریفی باشد؛ اما در بلندمدت نتایج بسیار شگرفی ایجاد میکند و حتی میتواند از فرسودگی ذهنی نیز جلوگیری کند.
۱۰-نوشتن توضیحات خوب
نوشتن توضیحات مناسب، قدیمیترین توصیه در دنیای برنامهنویسی است. در واقع به محض این که مفهوم درج توضیح برای کد به برنامهنویسان مبتدی آموزش داده میشود، آنها کاملاً تشویق میشوند تا جایی که میتوانند از توضیحات بیشتری در کد خود استفاده نمایند.
اما در مواردی نیز این تأکید زیاد، اثر معکوسی دارد. برخی برنامهنویسهای تازهکار به طور خاص گرایش به توضیح بسیار در مورد مسائلی دارند که نیازی به توضیح ندارند و معنی یک توضیح خوب را به درستی متوجه نشدهاند.قاعده درست برای یک توضیح مناسب چنین است: دلیل وجودی توضیحات این است که بیان کند چرا یک کد نوشته شده است و نه این که چه کاری انجام میدهد. اگر کد به قدر کافی مرتب نوشته شده باشد، به اندازهای خود توصیف خواهد بود که بتوان حس زد چه کاری انجام میدهد. توضیح برای این درون کد درج میشود که نیت ناپیدای چرایی نگارش کد را بیان کند.