با ما همراه باشید

منتشر شده

در

جاوا 10 و Local Variable Type inference
5 (100%) 7

جاوا 10 تاریخ دقیق انتشار این نسخه 20 مارس 2018 است. در حقیقت این نسخه کوتاه مدت بوده و باید خودمان را برای نسخه ی بلند مدت آن یعنی جاوا 11 آماده کنیم. این نسخه بیشتر شامل بهینه سازی هایی است که تاثیری روی کدنویسی ما ندارند. با این وجود قابلیت جالبی در بین تغییرات دیده می شود، به نام Local Variable Type Interface که هم در کدها تغییر ایجاد می کند و هم این مقاله را به  آن اختصاص داده ایم.

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

حال اگر بخواهیم از این قابلیت جدید استفاده کنیم کافیست بجای List ( در اینجا نوع متغییر است)  var را جایگزین کنیم. پس کد بالا به صورت زیر تغییر خواهد کرد :

var  چیست ؟

var نه کلمه ی کلیدی جدیدی است و  نه هیچ بایت کد جدیدی برای آن تعریف شده است. براساس مقداری که به متغییر می دهیم تفسیر می شود. با اجرای کد زیر می توانیم نوع var را در خروجی ببینیم :

کاربرد ها :

بجز محدودیت هایی که در ادامه ی متن به آن ها اشاره کرده ایم، استفاده ای مشابه با متغییر عادی دارد. به دو مورد از این کاربردها به عنوان نمونه اشاره می کنیم :

استفاده در  loop ها :

در همه ی انواع loop قابل به کارگیری است. صد البته استفاده از آن در کدهایی مشابه مثال پایین باعث خلاصه تر شدن کد می شود :

 

 پاس دادن به تابع :

در پایین نمونه کدی برای این کاربرد می بینید :

 

محدودیت ها :

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

امکان تعریف  چندتایی وجود ندارد :

 

به عنوان  نوع ورودی یا خروجی تابع قابل استفاده نیست :

 

به عنوان متغییر کلاس قابل استفاده نیست :

 

به عنوان متغییر بخش catch قابل استفاده نیست :

 

محدودیت های  زمان تعریف و مقدار دهی  :

تمام موارد زیر مشکل با خطا همراه هستند :
1. در لحظه ی تعریف مقدار دهی نشود.
2. با مقدار null، مقدار دهی شود.
3. با Lambda مقدار دهی شود.
4. با Method Refrence مقدار دهی شود.

 

امکان مقدار دهی مجدد با مقداری از نوع دیگر وجود ندارد :

فرض کنید بار اول متغییر را با مقداری از نوع int  مقدار دهی کرده اید. کامپایلر این متغییر رو از نوع int میشناسد و دیگر مقدار String نمی پذیرد :

 

نکته ی آخر :

زمان تعریف آرایه اشتباه نکنید.تنها خط 2  روش درستی برای تعریف آرایه است.

برای بررسی بیشتر جزئیات مراجعه به این لینک  مفید خواهد بود.

نویسنده:محبوبه شیدایی