اپراتور ternary operator در جاواسکریپت چیست و چگونه کار میکند؟

646 بازدید 2 سال قبل 0 دیدگاه

خب همه تون بلدید با if و else کار کنید درسته؟ ولی یه زمان هایی هست که میخوای این عبارت شرطی رو خلاصه تر بنویسی. مخصوا وقتی که میخوای با استفاده از این شرط ها، مقدار یک متغییر رو تعیین کنی.

بذار مثال بزنم واست:

let i = rand(1, 10);
let message = null;
if (i > 5 ) {
    message = 'number is greater than 5';
} else {
    message = 'number is less than or equal to 5';
}

دقیقا در همچین جاهایی، اپراتور ternary میتونه توی خلاصه نوشتن کدها به ما کمک کنه. من میتونم کد بالا رو به این صورت بنویسم:

let i = rand(1, 10);
let message = (i > 5) ? 'number is greater than 5' : 'number is less than or equal to 5';

در واقع ternary operator در جاوااسکریپت از سه بخش تشکیل میشه:

1) شرط: که در کد بالا همون قسمت داخل پرانتز هست. دقیت کنید که نیاز نیست شرط داخل پرانتز باشه. من صرفا برای خوانایی راحت تر اون رو داخل پرانتز قرار دادم

2) کال بک درست بودن شرط: بعد از عبارت شرطی، یک علامت سوال ؟ قرار میگیره و بعد از اون کدی که قراره در صورت درست بودن شرط اجرا بشه، قرار میگیره. در این قسمت میتونی حتی یک تابع هم صدا بزنی ولی در هر صورت نتیجه اون به صورت پیش فرض return میشه.

2) کال بک برقرار نبودن شرط: خب بعد از کال بک شرط، یک علامت : قرار میگیره و بعد از اون هم، همون بخش else کدهای ما قرار داده میشه. اینجا هم باید کدی داشته باشید که یک مقداری رو return کنه

حالا چند تا نکته در مورد ternary operator بهتون بگم:

اول از همه اینکه توی این اپراتور شما قسمت else رو نمیتونی حذف کنی. بنابراین قسمت دوم همیشه باید وجود داشته باشه. ولی خیلی وقت ها از اون برای null یا false کردن مقادیر هم استفاده میشه. مثلا در همون کد بالا اگر بخوایم فقط زمانی که i بزرگتر از 5 بود یک پیغام در متغیر ذخیره کنیم میتونیم به این حالت بنویسیم:

let message = (i > 5) ? 'number is greater than 5' : null;

دوم اینکه همیشه مقدار نهایی عباراتی که برای صحت یا عدم صحت شرط مینویسید،  return میشن. بنابر این فقط میتونید از عباراتی استفاده کنید که مقادیری رو return میکن و نمیتونید مثلا عباراتی مثل if و ... رو در اونها استفاده کنید. نتیجه عبارت رو هم میتونی مثل کد بالا در یک متغیر ذخیره کنی یا توی فانکشن، return کنی.

و آخرین نکته هم این که ternary operator قابلیت زنجیره وار شدن (chaining) رو داره. یعنی میتونی در کال بک ها، مجدد اون رو تکرار کنی. مثلا اگر همچین چیزی داشته باشی:

let number = 1;
let text;
if (number === 1) { 
    text = 'one'
}else if (number === 2) {
    text = 'two'
}else if (number === 3) {
    text = 'three'
}else{
    number = 'unknown'
}

میتونی با اپراتور ternary به این صورت بنویسی:

let number = 1;
let text =
  number === 1
    ? 'one'
    : number === 2
    ? 'two'
    : number === 3
    ? 'three'
    : 'unknown';

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

اگر این مطلب برات مفید بود، ممنون میشم نظرت رو در بخش دیدگاه ها ارسال کنی

0 دیدگاه   (ارسال دیدگاه)