(برنامه نویسی java) عملگرهای منطقی مدار کوتاه و اعلان نمودن اشیائ جاوا (رباتیک _ الکترونیک)

پژوهشگر و نویسنده: (  افشین رشید )

نکته: جاوا دو عملگر بولی بسیار جالب دارد که در اکثر زبانهای دیگر برنامه نویسی وجود ندارند . این ها روایت ثانویه عملگرهـایAND وOR و بولی هستند و بعنوان عملگرهای منطقی مدار کوتاه معرفی شده اند. در جدول قبلی می بینید که عملگر OR هرگاه که A معادل true باشد، منجر به true می شود، صرفنظراز اینکه B چه باشد. 

بطور مشابه ،عملگر AND هرگاه A معادل false باشد منجر به false می شود. صرفنظر از اینکه B چه باشد . اگراز اشکال ||و&& و بجای |و& و استفاده کنید، هنگامیکه حاصل یک عبارت مـیتواند توسط عملوند چپ به تنهایی تعیین شود ، جاوا دیگر به ارزیابی عملوند راست نخواهـد پرداخـت . ایـن حالـت بسـیار سـودمند اسـت بخصوص وقتی که عملوند سمت راست بستگی به عملوند سمت چپ وtrue یـاfalse ا بـودن آن بـرای درسـت عمـل کـردن داشـته باشد . بعنوان مثال ، کد قطعه ای زیر به شما نشان می دهد چگونه می توانید مزایای ارزیابی منطقی مدار کوتاه را استفاده نموده تا مطمئن شوید که عملیات تقسیم قبل از ارزیابی آن معتبراست . 

 if(denom != 0 && num / denom > 10) 

از آنجایی که شکل مدار کوتاه AND یعنی && استفاده شده است ، هنگامیکه denom صفر باشد ، خطر ایجـاد یـک اسـتثنائ حـین اجرا منتفی است . اگر همین خط از کد را با اسـتفاده از رایـت تکـی AND یعنـی & بنویسـیم ، هـر دو عملونـد بایـد مـورد ارزیـابی قرار گیرند و هنگامیکه denom صفر باشد یک استثنائ حین اجرا بوجود می آید . در حالتهایی که شامل منطق بولی باشند : اسـتفاده از ارزیابیهای مدار کوتاهAND وOR و یک روش استاندارد است که روایتهای تک کـاراکتری عملگرهـا را منحصـرا "بـرای عملیـات رفتار بیتی قرار می دهد . اما استثنائاتی بر این قوانین وجود دارند . بعنوان مثال ، دستور زیررا در نظر بگیرید : 

 if(c==1 & e++ < 100 ) d = 100; 

در اینجا استفاده از یک علامت & تکی اطمینان می دهد که عملیات افزایشی بهe 


اعلان نمودن اشیائ

بدست آوردن اشیائ از یک کلاس ، نوعی پردازش دو مرحله ای است . اول ، باید یک متغیر از نوع همـان کـلاس اعـلان نماییـد . ایـن متغیر یک شی  را تعریف نمی کند . در عوض ، متغیری است که می تواند به یک شی ئ ارجاع نماید .دوم ، باید یک کپی فیزیکـی واقعی از شئ بدست آورده و به آن متغیر منتسب کنید . می توانید اینکار را با استفاده از عملگر new انجام دهید . عملگر new بطور پویا ( یعنی در حـین اجـرا ) حافظـه را بـرای یـک شـئ تخصـیص داده و یـک ارجـاع بـه آن را برمـی گردانـد . ایـن ارجـاع (reference) کما بیش آدرس آن شئ در حافظه است که توسط new تخصیص یافته است . سپس این ارجـاع در متغیـر ذخیـره می شود. بدین ترتیب ، در جاوا، کلیه اشیائ کـلاس دار بایـد بصـورت پویـا تخصـیص یابنـد. اجـازه دهیـد کـه بـه جزئیـات ایـن روال دقت نماییم . در مثال قبلی ، یک خط مشابه خط زیر برای اعلان یک شئ ازنوع Box استفاده شده است.

 Box mybox = new Box(); 

این دستور دو مرحله گفته شده را با یکدیگرترکیب نموده است . برای اینکه هر یک از مراحل را روشن تردرک کنید، میتوان آن دستور را بصورت زیر بازنویسی نمود :

 Box mybox; // declare reference to object 

 mybox = new Box(); // allocate a Box object 

خط اول ، myBox را بعنوان یک ارجاع به شئ از نوع Box اعلان می کنـد . پـس از اجـرای ایـن خـط ، mybox محتـوی تهـی (null) خواهد داشت که نشانگر آن است که هنوز شئ بطور واقعی بوجود نیامده است . هـر تلاشـی بـرای اسـتفاده از mybox در این مرحله سبب بروز خطای زمان کامپایل (error time-compile)خواهد شد . خط بعدی یک شئ واقعـی را تخصـیص داده و یک ارجاع از آن به mybox انجام می دهد . پس از اجرای خط دوم ، می توانید از mybox بعنـوان یـک شـئ Box اسـتفاده نماییــد . امــا در واقعیــت mybox خیلــی ســاده آدرس حافظــه شــئ واقعــی Box را نگهــداری مــی کنــد.

نویسنده:  (افشین رشید )