خیلی وقت ها فرق expression و statement برای ما مهم نیست و معمولا توی محاوره به جای همدیگه ازشون استفاده میکنیم( مثل آرگومان و پارامتر ) اما اگر بخواهیم دقیق تر به این موضوع نگاه کنیم میبینیم که بین این دو گذاره تفاوت زیادی وجود داره. توی این نوشته با کمک جاواسکریپت در مورد تفاوت مفهومی این دو گذاره صحبت میکنیم.
وقتی داریم از بک تیک به عنوان template literal استفاده میکنیم فقط مجاز به استفاده از expression هستیم و اگر statement استفاده کنیم با خطا مواجه میشیم. (یکی از راه هایی که میشه باهاش وضعیت statement و expression رو چک کرد)
همه عبارت های بالا expression هستند. حالا بیایم یک statement رو توی template literal استفاده کنیم و نتیجه رو ببینم:
همون طور که انتظار داشتیم خطا رخ داده و دلیلش هم این هست که تعریف متغیرها statement هست.
تعریف تابع هم expression هست. چرا ؟ چون تابع هم مثل آبجکت first citizen جاواسکریپت هست. arrow function هم همین طور. پس میشه نتیجه گرفت که تعریف array و object هم expression هستند.
⚠️ دقت کنید ⚠️
تعریف تابع از نوع expression هست و در صورتی که خروجی یک تابع رو بخواهید استفاده کنید و یا از immediate invoke function expression استفاده کنید دیگه expression نیست.
خوب احتمالا تا اینجا حدودی متوجه شده باشید که چه چیزایی statement هستند. راستی if و for هم statement هستند.
? نکته ری اکتی :
توی render کامپوننت های ری اکت باید از expression استفاده کرد. برای همین نمیشه if نوشت و به جاش از ternary operator استفاده میشه. همین نکته به ظاهر ساده باعث دردسر خیلی از توسعه دهندگان میشه.
یادم میاد خودم که ری اکت رو شروع کرده بودم، همین موضوع برام سوال بود که چرا if نمیتونیم استفاده کنیم؟
و یادم میاد از چند نفری که استاد بودند پرسیدم گفتند که نمیشه دیگه باید ternary استفاده کنی ?
میدونیم که جاواسکریپت چیزی به اسم کلاس نداره و under the hood یه سری function هستند که دارند تعریف کلمه کلاس رو میسر میکنن. پس تعریف کلاس هم expression هست (تابع هستند).
این که چه عبارتی statement هست و یا expression دغدغه نیست که روزانه باهاش درگیر باشیم اما مثل نکته ری اکتی که گفتم ، اگه یه جا با همچین خطایی روبرو شدید که گفته expression توقع داشته و شما بهش statement دادین، میدونید که مشکل از کجاست و سریع اون رو حل میکنید.
سایر نوشته های من در ویرگول:
Follow me on social media
Telegram
Virgool