Nima Mohamadian
Nima Mohamadian
خواندن ۲ دقیقه·۵ سال پیش

فرق expression و statement

خیلی وقت ها فرق expression و statement برای ما مهم نیست و معمولا توی محاوره به جای همدیگه ازشون استفاده می‌کنیم( مثل آرگومان و پارامتر ) اما اگر بخواهیم دقیق تر به این موضوع نگاه کنیم می‌بینیم که بین این دو گذاره تفاوت زیادی وجود داره. توی این نوشته با کمک جاواسکریپت در مورد تفاوت مفهومی این دو گذاره صحبت می‌کنیم.

  فرق expression و statement به لحاظ معنی و مفهوم در جاواسکریپت
فرق expression و statement به لحاظ معنی و مفهوم در جاواسکریپت


وقتی داریم از بک تیک به عنوان template literal استفاده می‌کنیم فقط مجاز به استفاده از expression هستیم و اگر statement استفاده کنیم با خطا مواجه می‌شیم. (یکی از راه هایی که میشه باهاش وضعیت statement و expression رو چک کرد)

نمایش چند expression با استفاده از template literal
نمایش چند expression با استفاده از template literal

همه عبارت های بالا expression هستند. حالا بیایم یک statement رو توی template literal استفاده کنیم و نتیجه رو ببینم:

قرار دادن یک statement در template literal که منجر به خطا شده
قرار دادن یک statement در template literal که منجر به خطا شده

همون طور که انتظار داشتیم خطا رخ داده و دلیلش هم این هست که تعریف متغیرها statement هست.

بررسی تعریف تابع ‌

قرار دادن یک تابع در template literal  که چون expression هست مشکلی پیش نمیاد
قرار دادن یک تابع در template literal که چون expression هست مشکلی پیش نمیاد

تعریف تابع هم 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 دادین، میدونید که مشکل از کجاست و سریع اون رو حل می‌کنید.



سایر نوشته های من در ویرگول:

http://vrgl.ir/lpDIw
http://vrgl.ir/3IckT
http://vrgl.ir/hm4VA

Follow me on social media
Telegram
Facebook
Twitter
Linkedin
Virgool






برنامه نویسیجاواسکریپتjavascriptexpressionstatement
توسعه دهنده جاواسکریپت
شاید از این پست‌ها خوشتان بیاید