در این مطلب به شما آموزش میدهیم که چگونه کدهای خوانا و تمیزی بنویسید تا بهراحتی در حافظهها بمانند.
تمیز کد زدن در برنامهنویسی درست مانند خوشخط بودن است و باعث میشود تا دیگر توسعهدهندگان نیز منطقی که پشت کدهایتان وجود دارد را بهتر متوجه شوند. شاید بگویید که کدتان در هر صورت اجرا میشود و مشکلی در روند کلی برنامه ایجاد نمیکند اما تنها کافی است پس از مدتی سراغ کدهای قبلی خود بروید تا متوجه عمق فاجعه شوید.
در این صورت باید تمام پروژه را از اول بررسی کنید تا شاید متوجه روشی که در آن استفاده کردید شوید؛ بنابراین اگر دیگران بخواهند منطق پشت کدهای اینچنینی را بفهمند، زمان زیادی را از آنها میگیرد. کدنویسی غلط میتواند شامل استفاده از پاراگرافهای بسیار طولانی، متغیرهای بینام و نشان و تابعهای بسیار پیچیده شود که استفاده از آنها توسط هیچ برنامهنویس سطح بالایی توصیه نمیشود.
در ادامه با ای ام همراه باشید تا نکات مهمی را در مورد خلق کدهای تمیز که اتفاقاً کارایی بسیار بالایی هم دارند، با هم بررسی کنیم.
تا جای ممکن ساده بنویسید
یکی از قوانین اولیه برنامهنویسی این است که در تلاش برای زرنگ بودن یا خودنمایی کردن، هرگز خود را در یک بلوک پیچیده گرفتار نکنید. مثلاً اگر میتوانید اسکریپتی را در یک خط بنویسید لازم نیست که به هیچ روش دیگری آن را طولانیتر کنید. به تابع ساده زیر دقت کنید:
function addNumbers(num1, num2) { return num1 + num2;}
همانطور که دیدید خواندن و یادآوری تابع فوق آسان است، زیرا هم ساده نوشته شده و هم از اسم مناسب برای آن استفاده کردیم. در بسیاری از مصاحبههای استخدامی، اگر از شما بخواهند تا چند خط کد بنویسید، دقیقاً میخواهند سادهنویسی شما را بررسی کنند و شاید اهمیت این موضوع از اینکه زبان برنامهنویسی مورد نظر را کاملاً بلد باشید بیشتر باشد.
از تکرار بیهوده خودداری کنید
هنگام کدزنی با هر زبانی مسلماً راهها و دستورالعملهای مختلفی جهت جلوگیری از تکرارهای بیهوده در بلوکها وجود دارد. بهعنوان مثال به اسکریپت زیر دقت کنید:
function addNumberSequence(number){number = number + 1; number = number + 2; number = number + 3; number = number + 4; number = number + 5; return number;}
همانطور که مشاهده کردید سعی کنید بهجای تکرار جملات تقریباً مشابه، الگوریتمی را پیدا کنید که تمام جملات تکراری فوق را در قالب یک حلقه خلاصه کند. مطمئناً رفع باگ یا اشکالزدایی حلقهای که ۵۰ تکرار را مدیریت میکند بسیار آسانتر از ۵۰ بلوک کدی است که هرکدام دارای تکراری مشابه با دیگری است.
کدهایی بنویسید که قابلیت گسترش داشته باشند
فرض کنید که در حال کار روی بخشی از یک پروژه بزرگ در سرویس کنترل نسخهای مانند گیت هستید و قرار است بهزودی کد خود را در اختیار مدیر پروژه یا سایر برنامهنویسان قرار دهید.
برای اطلاعات بیشتر، گیت نرمافزاری برای مشاهده و ویرایش نسخههای مختلف یک پروژه است که میتوانید پروژههای تحت گیت را در سایت گیت هاب مشاهده و حتی روی آنها کار کنید.
پس از اینکه کد خود را در اختیار سایر اعضای تیم قرار دادید و اگر کد شما تنها برای نسخه فعلی مناسب باشد و قابلیت دریافت بروزرسانیهای آینده را نداشته باشد، بهزودی توسط کدهای جدید جایگزین میشود و شما نیز از تیم کنار گذاشته خواهید شد؛ بنابراین سعی کنید کدهایی را که خلق میکنید، با دورنمایی که از آپدیتهای بعدی پروژه انتظار دارید مقایسه کنید و پس از آن طوری کد بزنید که بهجای تغییر کلی، قابلیت گسترش و دریافت بهروزرسانیهای مختلف را داشته باشند.
توجه به رفتارهای فردی هر شی در برنامهنویسی شیگرا
مطالب مربوط به برنامهنویسی شیگرا شاید بیشازحد تخصصی و پیچیده باشند و حتی با توجه به پردرآمدترین زبان های برنامه نویسی که امروزه در دنیا وجود دارند، جایگاه قبلی خود را از دست داده باشند اما اگر در زبانهایی مانند پایتون یا جاوا مشغول کار با کتابخانههای شیگرا هستید، یادتان نرود که اصل ارثبری در برنامهنویسی شیگرا بیان میکند که اشیاء با رفتارهای پیچیده باید دارای نمونههایی از اشیاء با رفتارهای فردی باشند.
همانطور که در مثال ساده بالا میبینید، تمام اشیا نسبت به شیای که از آن ارثبری کردهاند دارای رفتار یا ویژگی فردی خود نیز هستند. اگر شما نیز هنگام کد زدن به چنین ویژگیای در خصوص اشیا موردنظر خود دقت کنید، نتیجه نهایی مؤثرتر خواهد بود و انعطافپذیری بیشتری خواهد داشت.
یک مسئولیت واحد برای هر کلاس
اصول کدنویسی همگی یک هدف مشترک دارند؛ کدهای بهتر نوشتهشده توسط برنامهنویسان آگاهتر. تعیین مسئولیت واحد یعنی هر کلاس یا ماژول در برنامه ما، باید فقط یک عملکرد خاص را ارائه دهد. همانطور که رابرت سی مارتین، مهندس نرمافزار آمریکایی میگوید: «یک کلاس باید تنها یک دلیل برای تغییر داشته باشد.» برای اطلاعات بیشتر، کلاس (Class) در برنامهنویسی تابعی است که وظیفه خاصی را برای آن مشخص میکنیم و در هنگام نیاز آن را صدا میزنیم. مثلاً یک کلاس بسیار ساده میتواند اعداد مختلفی را بگیرد و میانگین آنها را به ما تحویل دهد.
سعی کنید هنگام استفاده از کلاسها مسئولیتهای زیادی را به آنها اختصاص ندهید، زیرا در این صورت کلاس موردنظر بیشازحد پیچیده خواهد شد و حتی شاید خود شما را هم دچار سردرگمی کند. علاوهبر این اگر بعدها متوجه شوید که یکی از کلاسهای برنامه دارای باگ است، اگر وظیفه آن کلاس بسیار پیچیده و زیاد باشد، اشکالزدایی آن امری طاقتفرسا خواهد بود.
تفکیک مسئولیتها
در نکته قبلی در مورد وظایف اختصاصی هر کلاس صحبت کردیم اما اکنون میخواهیم همان تکفیک وظایف را در مورد ساختمان کلی برنامهای که در حال نوشتن آن هستیم بهکار ببریم.
بهعنوان مثال کدی که پایگاه داده یا دیتابیس را کنترل میکند نیازی به دانستن نحوه نمایش و مدیریت دادهها در مرورگر ندارد که درواقع تعریف درستی از جدا بودن برنامه نویسی فرانتاند و بکاند از یکدیگر است؛ بنابراین سعی کنید از ادغام کردن بیهوده کدها با هم خودداری کنید و بجای اینکه بلوکهای بسیار بزرگی خلق کنید، آنها را در چندین بلوک جداگانه با وظیفه مستقل تقسیم کنید.
به مشکلاتی که هنوز وجود ندارند فکر نکنید
هنگام نوشتن برنامههای مختلف درست مانند وقایعی که در زندگی اتفاق میافتد، نباید سعی کنید مشکلاتی را که هنوز وجود ندارند حل کنید. کد را بنویسید و اگر در ادامه کار خود به باگی برخورد کردید، بعد از پیدا کردن دلیل، سعی در رفع آن کنید. بسیاری از برنامهنویسان این کار را با کدنویسی قابلگسترش که پیشتر به آن اشاره کردیم اشتباه میگیرند؛ بنابراین باید فرق این دو اصل را از هم تشخیص دهید.
برنامهنویسان و توسعهدهندگان بیتجربه سعی میکنند سادهترین کدی که میتوانند را بنویسند و جنبههای مختلف کد یا تأثیری را که در بخشهای دیگر میگذارد، در نظر نمیگیرند. البته لازم نیست از از همین ابتدا کدهای شما در عالیترین سطح باشند بلکه بهمرور زمان و با تمرین زیاد، باید سطح کدنویسی خود را ارتقا دهید.
کامنتگذاری را فراموش نکنید
تا اینجا نکات زیادی را در مورد کدنویسی اصولی بررسی کردیم اما یکی مهمترین آنها کامنتگذاری است. این کار تأثیر زیادی روی خواننده کد و حتی توسعهدهندگان بعدی دارد و هرچه پروژه شما بزرگتر باشد، اهمیت کامنتگذاری نیز چند برابر میشود.
شما میتوانید نظرات (کامنت) خود را برای توضیح اشیاء، بهبود تعاریف متغیرها و حتی آسانتر کردن درک عملکردها در لابهلای کدها و هرجایی که نیاز است قرار دهید. هر زبان روش متفاوتی برای کامنتگذاری دارد اما مهم این است که همه از این قابلیت پشتیبانی میکنند. در ادامه بهعنوان مثال تابعی از زبان جاوا اسکریپت را آوردهایم و در میان خطها توضیحاتی را که نیاز است، نوشتهایم تا خواننده بعدی کد، راحتتر بتواند به منطق و مفاهیم بهکاررفته در برنامه ما مسلط شود.
// This function will add 5 to the input if odd, or return the number if even function evenOrOdd(number) { // Determine if the number is even if (number % 2 == 0) { return number; } // If the number is odd, this will add 5 and return else { return number + 5; } }
البته با توجه به ویرایشگر متنی که در حال استفاده از آن هستید، کامنتها میتوانند به زبان فارسی هم نوشته شوند اما معمولاً کمتر کسی در پروژههای بزرگ چنین کاری میکند. همچنین برای تمرین نیز میتوانید دو پروژه را در نظر بگیرید؛ یکی را کامنتگذاری کنید و در پروژه دیگر کامنتی نگذارید. ۶ ماه بعد به سراغ پروژههای خود بروید و ببینید که پیدا کردن منطق کدام برنامه راحتتر است.
همیشه کدها را بازبینی کنید
شاید پذیرش اینکه کد شما در اولین بار آنطور که باید کامل نیست کمی سخت باشد اما دقیقاً همینطور است. برای اینکه کدهایی که مینویسید بهینهتر باشند، سعی کنید پس از پایان کدنویسی، یک بار دیگر و با دستورالعملهای بهتری کد خود را ویرایش کنید تا به همان نتیجه کد قبلی برسید.
فرایندهای کدنویسی مداوم در حال تکامل هستند و از اصول برنامهنویسی این است که به یاد داشته باشید که بازدید مجدد، بازنویسی یا حتی طراحی مجدد کل تکههای کد، امری کاملاً طبیعی است و بدان معنا نیست که شما اولین باری که برنامه خود را نوشتید موفق نشدید، بلکه تنها سعی کردید با نگرش متفاوتی به کدهای خود نگاه کنید و آنها را با کیفیت بهتری بازنویسی کنید.
هیچ چیزی بهتر از کدنویسی تمیز نیست
جدا از تمام اصولی که تاکنون بررسی کردیم هیچچیز بهتر از تمیز نوشتن نیست. وقتی این را میگوییم، منظور از کدهایی است که بیشتر شبیه معما هستند تا راهحل. شما برای تحتتأثیر قرار دادن غریبهها برنامهنویسی نمیکنید بلکه در این حرفه دنبال حل مشکلات هستید.
سعی نکنید حجم زیادی از منطق را در یک خط جمع کنید، دستورالعملهای واضح را در نظرات و اسناد قرار دهید زیرا اگر کد شما به راحتی قابل خواندن باشد، معمولاً نگهداری از آن نیز آسان خواهد بود. اگر میخواهید برنامهنویس خوبی باشید، در صورت لزوم نظرات خود را بنویسید، به راهنماهای سبک پایبند باشید و تا حد امکان خود را جای فردی قرار دهید که میخواهد کدهای شما را بخواند.
یادگیری اینکه چگونه برنامهنویس خوب و ماهری باشید، زمان و تلاش زیادی میطلبد و درست مانند ابزارهای مورد نیاز برای شروع برنامه نویسی، نکات فوق نیز از اصول پایهای هستند که در فرایند آموزش و یادگیری حوزههای مختلف برنامه نویسی، باید توجه ویژهای به آنها داشته باشید.
دیدگاهتان را بنویسید