شاید شما نیز گهگاهی به این مسأله فکر کرده باشید که بهترین راه کامنتگذاری در سورسکد چیست اما این چیزی است که بسیاری از دولوپرها در مورد آن به نتیجه نرسیدهاند! در پاسخ به این سؤال، برخی اعتقاد دارند که راه مشخصی برای این منظور وجود دارد و برخی هم با این دیدگاه مخالفند؛ همچنین افرادی هم هستند که عقیده دارند جواب این سؤال بستگی به مهارتهای برنامهنویسی دولوپر دارد.
در مورد کامنتگذاری، برنامهنویسها به دو دستهٔ کلی تقسیم میشوند:
- گروهی که معتقدند کد اصولی و حرفهای اساساً احتیاجی به کامنتگذاری ندارد.
- گروه دیگری هم بر این باورند که یکی از اصول حرفهای بودن، نوشتن کامنت است.
به عقیدهٔ گروه اول، اگر نیاز به نوشتن کامنت دارید، احتمالاً قسمتی از کدهایتان نیاز به ریفکتور و تغییر دارد اما اگر آن چیزی که نیاز به ریفکتور دارد تحت کنترل شما نیست، نوشتن کامنت بلامانع است. گروه دوم هم بر این باورند که اگر واقعاً اهمیت نوشتن کامنت را زیر سؤال میبرید، باید بگوییم شما جزو برنامهنویسهای تازهکار و غیرحرفهای محسوب میشوید زیرا نوشتن کامنت برای یک پروژهٔ نرمافزاری کاملاً حیاتی است.
کامنتگذاری یا نادیده گرفتن آن، مسئله این است!
هنگامی که دو طرف یک اختلافنظر سیاسی به مشکل برمیخورند، کار دیپلماتها این است که زمینههای مشترک را برای حل اختلافشان پیدا کرده و مشکل را به حداقل برسانند و به همین منوال هم در کامنتنویسی، توضیح چراها به درک این مطلب کمک میکند. برای روشنتر شدن این مسئله، به گزارهای از استک اورفلو اشاره میکنیم با این مضمون که برنامهنویسهای خوب کدهای خود را کامنتگذاری میکنند، برنامهنویسهای عالی به شما میگویند که چرا روش خاصی را انتخاب کردهاند و استادان برنامهنویسی به شما میگویند که چرا از روشهای دیگر استفاده نکردهاند! Jeff Atwood، همبنیانگذار استک اورفلو، در این باره اعتقاد دارد که:
وقتی کدهاتون رو اونقدر بازنویسی و ریفکتور کردهاید که برای همکاراتون خواناتر و قابلفهمتر باشن و دیگه راهی رو برای سادهتر کردن اونها سراغ ندارین ولی در عین حال حس میکنین درکش سخته، تنها در این صورته که میتونین طرز کار کدها رو با نوشتن کامنت توضیح بدین.
فقط دولوپرهای تازهکار هستن که به جای توضیح کار با کدهای خود، اون رو با کامنتهاشون توضیح میدن. با کمی سازش میشه به این نتیجه رسید که در هر دو سنگر، موارد مثبت و منفیای وجود داره.
آیا میدانستید که بزرگترین مشکل کامنتگذاری چیست؟
تا به اینجا، دیدگاههای مختلف را بررسی کردیم اما از این پس قصد داریم به منطق پشت پردهٔ این قضیه بپردازیم. کامنتها هدف مشخصی دارند و آن هم چیزی نیست جز ارتباط با مخاطب و روشن کردن مسألهای خاص ولی یک نکتهٔ منفی نیز در این باره وجود دارد و آن هم اینکه نوشتن کامنت زمانبر است. اگر مسأله میان زمان صرفشده برای کامنتنویسی و فواید آن بود، این مسئله به راحتی قابلحل بود ولی کامنتها یک ویژگی بَد دیگر نیز دارند و آن هم اینکه در طولانی مدت اغلب آنها به اصطلاح Out of Date شده و اطلاعات نادرستی را به دولوپرهای بعدی منتقل میکنند. به عنوان مثال:
//Returns x + y or, if x or y is less than zero, throws an exception
public int Add(int x, int y)
{
return x + y;
}
وقتی به مواردی شبیه به مثال بالا برخورد میکنید، میفهمید که قبلاً عبارتی در قسمت مورد نظر وجود داشته است و فردی آن را پاک کرده ولی به خود زحمت نداده تا کامنتی که دیگر بیربط به نظر میرسد را تغییر دهد! این نمونه، یکی از مشکلات اساسی و ریشهای در نوشتن کامنت است.
به طور کلی، کامنتنویسی باعث اضافه شدن هزینهٔ نگهداری آنها برای هر کسی است که در آینده قرار است در این کدها دست ببرد و از آنجا که هیچ چیزی باعث توجه افراد به آپدیت کردن کامنتها نمیشود، آنها چنین کاری را فراموش میکنند و در نهایت مجموع این اتفاقات باعث بازخورد منفی دربارهٔ کامنتنویسی میشود.
مسئلهٔ هزینهٔ نگهداری کامنتها
مخالفان کامنتنویسی معتقدند که این کار باعث ایجاد هزینهٔ نگهداری میشود و در ازای آن، ترجیح میدهند تا مسأله را واضحتر کنند؛ اما در مقابل، طرفداران کامنتنویسی معتقدند نگهداری از کدها شامل نگهداری از کامنتها نیز میشود اما مخالفان در پاسخ به چنین ادعایی میگویند که به جای این کار، باید سعی شود کدها را واضحتر بنویسیم تا نیازی به کامنت نباشد. به عبارتی، وقتی کامنتی نباشد، نیازی به نگهداری از آن نیست و همچنین دیگر اطلاعات اشتباهی از کامنتها دریافت نخواهد شد.
اینکه کدام گروه نظر درستی دارند را نمیتوان با قاطعیت بیان کرد. گفتن اینکه همهٔ دولوپرها موظفند قسمتهایی از کد را با کامنت توضیح دهند، مسئولیتی را به دوش ایشان اضافه خواهد کرد که مسلماً برخی افراد با آن موافق نخواهند بود. در واقع، با این کار افراد را موظف به انجام کاری میکنید که از آن متنفر هستند؛ آنها این کار را انجام نمیدهند و اگر هم انجام بدهند، با نارضایتی است و در نتیجه کیفیت پایینی خواهد داشت که دردی را هم دوا نخواهد کرد!
بنابراین بهترین راهی که میتوان پیشنهاد کرد این است که تا جای ممکن از نوشتن کامنتها خودداری کنید. توجه داشته باشید که هیچ تصمیمی را نباید به طور مطلق صحیح دانست و هدف این مقاله این نیست که فواید کامنتنویسی را زیر سؤال ببرد. بسته به شرایط، میتوان نتیجهگیریهای متفاوتی داشت به طوری که در اکثر مواقع نتیجهای که از نوشتن کامنتها به دست میآید در طولانی مدت منفی است و در نتیجه به حداقل رساندن نتایج منفی، استراتژی خوبی خواهد بود. اما در عین حال مد نظر داشته باشید که گاهی اوقات شرایطی به وجود میآید که نیاز به کامنتگذاری کاملاً حس میشود؛ مثلاً برخی سازمانها تعهداتی به عنوان کامنتهای قانونی و مربوط به کپیرایت در هر فایل دارند که در نتیجه باید این کامنتها را به کدهایتان اضافه کنید (برای این کار ممکن است نیاز به یک Generator یا چیزی داشته باشید که به طور خودکار این کار را برایتان انجام دهد تا از اتلاف وقت جلوگیری کنید.)
به علاوه اینکه ممکن است برای تهیهٔ مستندات نیاز به اضافه کردن کامنتهایی در بالای کلاسها یا متدهای مورد استفادهٔ خود داشته باشید؛ وقتی کدهایی را مینویسید که قرار است توسط افراد دیگری خوانده شود، با نوشتن کامنت در جاهای مناسب، در حقیقت برای سایر دولوپرها مستندسازی کردهاید که در این مواقع ارزش کامنتها از هزینهٔ نگهداری آنها پیشی میگیرد چرا که بهکارگیری کامنت، قابلیت استفاده از محصولتان را افزایش میدهد.
در نهایت اینکه گاهی اوقات ممکن است قسمتی از کدهای خود را سرهمبندی کرده باشید؛ گاهی هم آن را به دفعات ریفکتور و آپدیت کرده و تا جایی که امکان داشته، کارها را ساده کردهاید اما درمییابید که باز هم ممکن است سایر دولوپرها گمراه شوند که در این صورت شاید بخواهید با نوشتن چند کلمه به عنوان کامنت، کدهایتان را کامل کنید که در این صورت، هرچه میدانید لازم است را باید انجام دهید.
به طور کلی، به مرور که تجربهٔ دولوپرها در کدنویسی بیشتر میشود، با کاربرد کامنتها نیز بیشتر آشنا خواهند شد. نوشتن آنها باعث افزایش هزینهٔ نگهداری میشود و گاهی خروجی نامناسبی نیز به همراه دارند و از همین روی باید با احتیاط از آنها استفاده کرد و مواقعی که امکانش وجود دارد، گزینههای بهتر را به کار ببرید.
حال نوبت به نظرات شما میرسد. شما با کدام دیدگاه در مورد کامنتگذاری موافق هستید؟ نظرات، تجربیات و دیدگاههای خود را در این رابطه با سایر کاربران سکان آکادمی به اشتراک بگذارید.