برنامه نویسیجاوامیم تک 11نرم افزارنرم افزار کامپیوتر

جاوا 10 و قابلیت جدید به نام Local Variable Type Inference

جاوا 10 و قابلیت جدید به نام Local Variable Type Inference

انتشار جاوا 10 :

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

قابلیت Local Variable Type Inference در جاوا 10 :

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

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

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

Var چیست ؟

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

کاربرد های Var :

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

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

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

 پاس دادن به تابع با استفاده از Var :

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

محدودیت های Var :

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

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

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

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

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

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

تمام موارد زیر مشکل با خطا همراه هستند :

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

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

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

نکته ی آخر :

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

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

ارسال پاسخ