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


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

اولین کسی باشید که به این سؤال پاسخ می‌دهید

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

- این عنصر چرا باید وجود داشته باشد؟
- چه کاری انجام می‌دهد؟
- و کجا به کار می‌آید؟ 

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

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

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

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

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

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

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

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

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

زمانی که شما اسکریپت مد نظر را در بلوک try اجرا می‌کنید، به مفسر این دستور را می‌دهید که اجرای دستور مد نظر در هر نقطه‌ای از Run Time که متوقف شد وارد بلوک catch شده و به عبارتی استفاده از این ساختار این تضمین را ایجاد می‌کند که حتی اگر اسکریپتی که در try اجرا می‌شود با مشکل مواجه شد، کاربر با اکسپشن مواجه نشده بلکه به راحتی می‌توان پیام خطای مناسبی در معرض دیدش قرار دهیم.

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

جمع‌بندی
اصطلاح Common Sense به فارسی به «عقلِ سلیم» ترجمه می‌شود که عبارت است از داشتن تواناییِ درک موضوعات پیرامون‌مان به گونه‌ای که اکثر آدم‌ها به طور منطقی آن را انجام می‌دهند. حال با این تفاسیر می‌توانیم اصطلاحی همچون Code Sense بسازیم با این مفهوم که با برخورداری از یکسری تکنیک‌ها و روش‌ها به گونه‌ای کدنویسی کنیم که سورس‌کدمان تا حد ممکن به سادگی هم توسط خودمان و هم سایرین قابل‌درک باشد.

زمانی که دولوپرها از Code Sense برخوردار باشند، نه تنها می‌توانند کدی زیبا، تمیز و کاربردی بنویسند بلکه خواهند توانست با استراتژی‌هایی که بلد هستند کدهای سایرین را نیز بهبود ببخشند و به تعبیری می‌توان این دست برنامه‌نویسان را به نقاشی تشبیه کرد که قادرند یک بوم سفید را به یک اثر هنری ارزشمند که همواره مورد تحسین همگان قرار خواهد گرفت مبدل سازند تا جایی که Hal Abelson، دانشمند علوم کامپیوتر، معتقد است «برنامه‌ها باید به گونه‌ای نوشته شوند که آدم‌ها بتوانند آن‌ها را بخوانند و سیستم‌های کامپیوتری هم آن‌ها را اجرا کنند.»

منبع


رائفه خلیلی