ویژگی های جدید زبان برنامه نویسی جاوا اسکریپت در سال 2019

در سال 2019 برخی از ویژگی های جدید به جاوا اسکریپت اضافه خواهد شد. در این مطلب ویژگی های جدید جاوا اسکریپت در سال 2019 را بررسی می کنیم.

 ویژگی های جدید زبان برنامه نویسی جاوا اسکریپت در سال 2019

در چند سال گذشته جاوا اسکریپت با اضافه کردن ویژگی های جدید و فوق العاده پیشرفت بسیار زیادی کرده و تبدیل به یک زبان تکامل یافته شده است. اگر شما نیز جزء آن دسته از افرادی هستید که علاقه مندید که درباره نسخه جدید زبان برنامه نویسی جاوا اسکریپت اطلاعاتی را بدست بیاورید، این مطلب می تواند برای شما مفید باشد. قبل از آن که بخواهیم درباره آخرین ویژگی های زبان برنامه نویسی جاوا اسکریپت صحبت کنیم بهتر است بدانیم که ایده های جدید چگونه تبدیل به بخشی از این زبان برنامه نویسی می شوند.

پروسه ویژگی های جدید زبان برنامه نویسی جاوا اسکریپت

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

مرحله 0: ایده ها

مرحله 1: پیشنهادات رسمی

مرحله 2: پیش نویس

مرحله 3: نامزدها و گزینه های انتخاب شده

مرحله 4: تایید شده ها

تا زمانی که یک ویژگی جدید زبان به مرحله 4 برسد هیچ تضمینی وجود ندارد که تبدیل به یکی از مشخصات رسمی ECMAScript شود. با این حال  موتورهای جاوا اسکریپت مانند V8 (که توسط مرورگر کروم و NodeJs مورد استفاده قرار می گیرد) و SpiderMonkey مرورگر فایرفاکس این تنظیمات را پیاده سازی می کنند تا برنامه نویسان از آن ها استفاده کنند و بازخورد آن ها را مورد آزمایش و خطا قرار می دهند.

کاندیداهای رایج ES2019

در زمان نوشته شدن این مقاله پیشنهادات جدیدی در TC39 در مرحله 4 وجود ندارد ولی با این حال برخی از نامزدها در مرحله  3 قرار دارند. نکته ای که باید حتما به آن توجه ویژه ای داشته باشید این است که از آن جایی که این نامزدها در مرحله 3 قرار دارند ممکن است تمامی این پیشنهادات مورد قبول واقع نشوند. در واقع بسیاری از این پیشنهادات برای سالیان دراز مورد توجه قرار گرفته اند ولی پیاده سازی آن ها ممکن است زمان بر بوده و امسال نتواند وارد مرحله 4 شود.

تغییرات در کلاس های جاوا اسکریپت

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

class Truck extends Automobile {
  model = "Heavy Duty"; // public field declaration
  #numberOfSeats = 5; // private field declaration
  #isCrewCab = true;
  static #name = "Truck"; // static private field declaration

  // static method
  static formattedName() {
    // Notice that the Truck class name is used
    // to access the static field instead of "this"
    return `This vehicle is a ${ Truck.#name }.`;
  }

  constructor( model, seats = 2 ) {
    super();
    this.seats = seats;
  }

  // Private method
  #getBodyType() {
    return this.#isCrewCab ? "Crew Cab" : "Standard Cab";
  }

  bodyType() {
    return `${ this.#numberOfSeats }-passenger ${ this.model } ${ this.#getBodyType() }`;
  }

  get seats() { return this.#numberOfSeats; }
  set seats( value ) {
    if ( value >= 1 && value < 7 ) {
      this.#numberOfSeats = value;
      this.#isCrewCab = value > 3;
    }
  }
}
شخصا نحوه استفاده از # برای ممبرهای شخصی را دوست ندارم.

متدهای trimStart() و trimEnd در رشته ها

نوع داده ای رشته دارای یک متد trim() می باشد که اسپیس ها را از ابتدا و انتهای یک رشته حذف می کند، یک متد پیشنهاد شده در جاوا اسکریپت این است که از متدهای trimStart() و trimEnd استفاده کنیم تا به صورت اختیاری از ابتدا و انتخاب رشته اسپیس ها را حذف کنیم.

const one = "      hello and let ";
const two = "us begin.        ";
console.log( one.trimStart() + two.trimEnd() ) // "hello and let us begin."
چیزهای بسیار جالبی درباره این ویژگی زبان برنامه نویسی جاوا اسکریپت وجود دارد که قبلا برخی از آن ها بر روی موتورهای این زبان اجرا شده است. این ویژگی یکی از مواردی است که باعث می شود تا مرورگرها رو به جلو حرکت کنند.

استفاده از اعداد بزرگ به کمک BigInt

ممکن است بسیاری از ما اعداد بزرگ را مشاهده کرده باشیم که برای اعداد بزرگ تر از int و double مورد استفاده قرار می گیرند، یک BigInt را می توان با استفاده از روش های مختلفی تعریف کرد.

// for reference
const theBiggestIntegerToday = Number.MAX_SAFE_INTEGER; // 9007199254740991

// use the 'n' syntax to declare a BigInt
const ABiggerInteger = 9100000000000001n;

// use the BigInt() constructor
const EvenBigger = BigInt( 9100000000000002 ); // 9100000000000002n

// use the BigInt() constructor with a string
const SuchBigWow = BigInt( "9100000000000003" ); // 9100000000000003n

آرایه های یک بعدی با استفاده از flat() و flatMap

اگر شما برنامه نویسی فانکشنال را در زبان برنامه نویسی جاوا اسکریپت مطالعه کرده باشید ممکن است با تفاوت flat() و flatMap() آشنا باشید، flat() برای ایجاد یک آرایه از مقادیر که برخی از این مقادیر ممکن است دارای چند آرایه باشند و یا یک آرایه یک بعدی را بازگردانند مورد استفاده قرار می گیرد.

const nestedArraysOhMy = [ "a", ["b", "c"], ["d", ["e", "f"]]];
// .flat() takes an optional depth argument
const ahhThatsBetter = nestedArraysOhMy.flat( 2 );
console.log( ahhThatsBetter ); // [ "a", "b", "c", "d", "e", "f" ]

flatMap() شباهت زیادی به map() دارد، اما متد کال بک آن می تواند یک آرایه را بازگرداند که نتیجه ای که بازگشت داده شده است می تواند یک آرایه یک بعدی باشد که آرایه های تو در توی دیگری را نیز در خود دارد.

const scattered = [ "my favorite", "hamburger", "is a", "chicken sandwich" ];

// regular map() results in nested arrays
const huh = scattered.map( chunk => chunk.split( " " ) );
console.log( huh ); // [ [ "my", "favorite" ], [ "hamburger" ], [ "is", "a" ], [ "chicken", "sandwich" ] ]

// flatMap() concatenates the returned arrays together
const better = scattered.flatMap( chunk => chunk.split( " " ) );
console.log( better ); // [ "my", "favorite", "hamburger", "is", "a", "chicken", "sandwich" ]

نامزدهای پیشنهاد شده بیشتر برای ES2019

در این جا لیستی از کاندیداهای اضافی را مشاهده می کنید که در مرحله 3 قرار دارند که ما آن ها را نام می بریم:

شی جهانی استاندارد this

Import() داینامیک

ویژگی  Legacy RegExp

Import.meta

رشته matchAll()

استفاده مناسب تر از JSON.stringify

چه زمانی منتظر انتشار ES2019 باشیم؟

در چند سال گذشته TC39 به صورت مداوم نسخه های جدید مشخصه های زبان ECMA-262 را در ماه ژوئن منتشر کرد. به احتمال زیاد این مشخصات ES2019 نیز در ماه ژوئن امسال منتشر خواهد شد.

ویژگی های Es2019 را همین امروز امتحان کنید!

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

آخرین ورژن از NodeJs را امتحان کنید!

Node.Js از موتور جاوا اسکریپت v8 استفاده می کند، برخی از کاندیداهای مشخصات زبان را می توانید در آخرین نسخه از NodeJs استفاده کنید چرا که NodeJs نیز از همان موتور V8 استفاده کرده و آن را پشتیبانی می کند. می توانید سایر ویژگی های زبان جاوا اسکریپت را نیز با استفاده از دستورات خط فرمان فعال کرده و از آن ها استفاده کنید.