آموزش جامع برنامه نویسی جاوا به زبان ساده – بخش پانزدهم: نوشتن کد صحیح


اینک شما به قدر کافی در مورد دستور زبان جاوا اطلاعات کسب کردهاید تا بتوانید برنامههای سادهای برای جاوا بنویسید. در ادامه این سلسله آموزشها چندین رویه مناسب که میتواند به نوشتن کدهای تمیزتر کمک کند و کد جاوای قابل نگهداری تولید کند؛ با هم مرور خواهیم کرد.
نوشتن صحیح کد در جاوا
کلاسها باید کوچک نگه داشته شوند
تاکنون چند کلاس ایجاد کردهایم. پس از ایجاد جفتهای getter/setter برای چند خصوصیت، کلاس Person 150 خط کد دارد. Person با این حساب یک کلاس کوچک محسوب میشود. دیدن کلاسهایی که 50 یا 100 متد و هزاران خط کد (متأسفانه) دارند چیز عجیبی نیست. برخی کلاسها ممکن است ضرورتاً به این بزرگی باشند اما اغلب آنها باید اصلاح شوند (refactored). Refactor کردن کد به تغییر دادن طراحی کد موجود بدون تغییر دادن نتایج گفته میشود. همواره توصیه میشود از بهترین رویههای کدنویسی استفاده شود.
بهطور کلی یک کلاس، نماینده یک نهاد مفهومی در برنامه است و اندازه کلاس باید نشاندهنده قابلیتهایی باشد که کد میتواند انجام دهد. باید همواره سعی شود که کلاس تنها تعداد معدودی وظایف داشته باشد و آن کارها را نیز بهخوبی انجام دهد.
تنها باید متدهایی را حفظ کنید که نیاز دارید. اگر به چند متد helper نیاز دارید که اساساً کار یکسانی انجام میدهند ولی پارامترهای متفاوتی میگیرند (مانند متد printAudit()) گزینه مناسبی محسوب میشود. اما مطمئن شوید که لیست متدها محدود به مواردی کردهاید که نیاز دارید و نه بیشتر.
انتخاب با دقت نامها
یک الگوی کدنویسی خوب در مورد نامهای متدها الگوی نامگذاری به نحوی است که نام متد کاری که انجام میدهد را نشان دهد. در این الگو درک کد بسیار سادهتر است. در نگاه نخست کدامیک از نامهای زیر برای یک متد رمزگشایی مناسب است؟
a()
computeInterest()
پاسخ بدیهی است اما به دلایلی برنامهنویسی تمایل دارند که به متدها (و البته متغیرها) نامهای کوتاه اختصاری بدهند. قطعاً یک نام بسیار بلند میتواند ناراحت باشد اما نامی که نشان دهد متد چه کار میکند لزومی ندارد که زیاد طولانی باشد. شش ماه پس از نوشتن یک کد ممکن است به خاطر نیاورید که یک متد به نام compInt() چه کار میکند اما بدیهی است که متدی به نام computeInterest() برای محاسبه بهره است.
متدها را کوچک نگهدارید
به دلایل مشابهی متدهای کوچک نیز به اندازه کلاسهای کوچک خوب هستند. یک استاندارد که خوب است رعایت شود این است که اندازه یک متد به اندازه یک صفحه حفظ شود تا بتوان از اول تا آخر در صفحه مشاهده کرد. این رویه باعث میشود کلاسهای برنامه بهتر نگهداری شوند.
اگر متدی از یک صفحه بیشتر شود بهتر است آن را refactor کنیم. ایکلیپس مجموعهای از ابزارهای refactor کردن دارد. معمولاً یک متد بلند شامل زیرگروههای کارکردی هستند که در یک جا جمع شدهاند. میتوان یک کارکرد ر انتخاب کرد و به متد دیگری برد و پارامترهای موردنیاز را به آن ارسال کرد.
هر متد باید منحصر به انجام یک کار باشد. بدین ترتیب این کد معمولاً بیش از 30 خط کد نخواهد بود.
Refactor کردن و توانایی نوشتن کدهای مخصوص تست مهمترین مهارتها برای برنامهنویسان جدید هستند. اگر کسی در این دو موضوع مهارت کسب کند میتواند این صنعت را متحول کند. اگر در هر دو این حوزهها مهارت کسب کنید درنهایت کدهای تمیزتر و برنامههای بهتری نسبت به همتایان خود ایجاد میکنید.
استفاده از توضیحات
لطفاً از توضیحات استفاده کنید. افرادی که بعد از شما کد را میخوانند (و احتمالاً خودتان هم پس از 6 ماه که کد را میخوانید) از خودتان تشکر میکنید. ممکن است این جمله را شنیده باشید که «کدی که خوب نوشته شده باشد، خود را توضیح میدهد پس چه نیازی به توضیحات است؟» به دو دلیل این جمله اشتباه است:
- اغلب کدها بهخوبی نوشته نشدهاند
- با بیشترین تلاش هم احتمالاً کد ما به آن اندازهای که فکر میکنیم خوب نخواهد بود.
پس لطفاً برای کد توضیحات بنویسید.
استفاده از سبک یکنواخت
سبک کدنویسی یک ترجیح شخصی است، اما توصیه میشود که از دستورزبان استاندارد جاوا برای آکولادها استفاده شود:
public static void main(String[] args) {
}
از این سبک نباید استفاده شود:
public static void main(String[] args)
{
}
دلیل این مسئله این است که این یک استاندارد است و اغلب کدهایی که اجرا میکنید (یعنی کدهایی که خودتان ننوشتهاید ولی به آن توجه میکنید) به احتمال زیاد به این روش نوشته شدهاند. ایکلیپس اجازه میدهد که سبکهای کد و قالببندی را در کد به ترتیبی که دوست دارید تعریف کنید. اما شما که در جاوا تازهکار هستید احتمالاً هنوز سبکی ندارید. بنابراین توصیه میشود که سبک استاندارد جاوا را برای شروع انتخاب کنید.
استفاده از گزارش دهی داخلی
تا پیش از اینکه جاوا 1.4 امکان گزارش دهی را معرفی کند روش اصلی برای یافتن کارهایی که برنامه انجام میدهد، نوشتن یک فراخوان سیستمی مانند مورد زیر بود:
public void someMethod() {
// Do some stuff...
// Now tell all about it
System.out.println("Telling you all about it:");
// Etc...
}
امکان گزارش دهی داخلی زبان جاوا (به بخش «نخستین کلاس جاوا» مراجعه کنید) جایگزین بهتری است. توصیه میشود هرگز از System.out.println() در کد خود استفاده نکنید. جایگزین دیگر استفاده از کتابخانه توصیهشده log4j است که بخشی از پروژه Apache umbrella است.
جمعبندی
در این آموزش در مورد برنامهنویسی شیءگرا توضیح دادیم، دستورزبان (syntax) جاوا را کشف کردیم تا از آن برای ایجاد اشیای مفید استفاده کنیم و با IDE ایکلیپس آشنا شدیم که به کنترل محیط توسعه کمک میکند. یاد گرفتیم که چگونه اشیای جاوا را اجرا کنیم که کارهای مختلف را انجام دهند. یاد گرفتیم که چگونه بسته به ورودیهای مختلف، خروجیهای مختلف بگیریم.
همچنین در مورد JAR کردن برنامهها برای استفاده توسعهدهندههای دیگر چیزهایی آموختیم. در این سلسله آموزشها برخی اصول ابتدایی رویههای برنامهنویسی جاوا را آموختیم.
سلام مشکل من اینه که تمام کد های من درست است ولی چرا اجرا نیمشه مثلا بقیه کد درست است ولی چرا ; 2 / = i این دستور رو زیرش خط قرمز کشید میشه و برنامه اجرا نمیشه خواهشا کمک کنید
دوست عزیز این خط کدی که شما نوشتهاید اشکال منطقی دارد. شما می خواهید حاصل تقسیم دو مقدار را به متغیر «i» انتساب دهید. ولی مشخص نکردهاید کدام عدد یا متغیر را می خواهید بر 2 تقسیم نمایید!