ایراد‌‌‌‎‎‎‌هایی از جاوا اسکریپت که همه نمیدونند

ایراد های زبان جاوا اسکریپت
ایراد های زبان جاوا اسکریپت
برنامه نوشتن با جاوا اسکریپت جوریه که انگار یک هزار تو خودت درست کرده باشی و توش گم بشی.
ــــ مایقن هاوربک

? مختصری درباره جاوا اسکریپت
خب جاوا اسکریپتو دیگه همه برنامه نویسا میشناسند منم نمیخوام دوباره براتون معرفیش کنم. فقط یک تاریخچه کوتاه میگمو میگذریم ازش. در سال ۱۹۹۵ شرکت Netscape Communication از جناب برندن آیک خواست با الگو گیری از زبان های پایتون، جاوا و اسکیم زبانی ایجاد کنه که داخل مرورگرش (در دهه نود میلادی مرورگر این شرکت، نتسکیپ نویگیتر، محبوب ترین مرورگر دنیا بود) استفاده کنه. ایشونم در می همون سال این زبانو اختراع میکنه و اسمشو میزاره موکا (آره همونی که تو منوی کافیشاپاست سر تلفظ اسمشم همیشه دعواست). بعد ها در نسخه بعدی همون مرورگر، اسمش میشه لایو اسکریپت ولی چون اسمش خیلی گمراه کننده نبود، در دسامبر همون سال تغییر نام پیدا میکنه به جاوا اسکریپت که بشدت مورد انتقاد قرار میگیره بابت تشابه اسمی با جاوا.


?عدم وجود عدد صحیح
آره درست شنیدید. در جاوا اسکریپت ما چیزی تحت عنوان عدد صحیح نداریم. در واقع این زبان یک نوع داده عددی داره اونم فلوت (float) هستش. به عبارتی دیگه جاوا اسکریپت داده نوع اینتیجر نداره. ممکنه با خودتون بگید خوب نداشته باشه مگه چی میشه؟ به این کد توجه کنید.

نبود عدد صحیح در جاوا اسکریپت
نبود عدد صحیح در جاوا اسکریپت

تازه این که خوبه. اوضاع خراب تر میشه وقتی شما یک چیز شرطی داشته باشی و در اون بخوای دوتا عددو با هم مقایسه کنی مثلا :

عملکرد ضعیف این زبان در کار با اعداد صحیح
عملکرد ضعیف این زبان در کار با اعداد صحیح


? تبدیل اجباری

یکی دیگه از ویژگی های خوب این زبان اینه که بدون این که چیزی بگه برمیداره نوع داده رو تغییر میده. تبدیل اجباری یعنی تغییر نوع داده در اثر یک عمل. برای مثال متغیر a یک رشته است و متغیر b از نوع عددی. وقتی اینارو از هم کم کنیم چی میشه؟؟

تبدیل اجباری در جاوا اسکریپت
تبدیل اجباری در جاوا اسکریپت

جاوا اسکریپت در اینجا میاد داده a که رشته است رو به زور تبدیل به عدد میکنه و اونو منهای متغیر b میکنه. طبیعتا در بیشتر زبان های برنامه نویسی کامپایلر گیر میده و میگه نمیتونم استرینگ رو منهای عدد کنم ولی جاوا اسکریپت اوکی هستش :)
? جواب ۲۲ میشه. یک اشتباه تایپی هست.


? متغیر در سطح کلی

یکی دیگه از ایرادات این زبان بی ایراد اینه که در حالت پیشفرض تمام متغیر هاش کلی (global) هستن که یکسری مشکلات درست میکنه که من مهماش رو اینجا میگم.

متغیر ها به صورت پیشفرض سطح دسترسی کلی دارند.
متغیر ها به صورت پیشفرض سطح دسترسی کلی دارند.

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

? کارکرد نادرست آرایه ها
تابع سُرت جاوا اسکریپت کلا با عددا حال نمیکنه. همینطوری عشقی مرتب میکنشون. این مثال جالب رو داشته باشید:

عملکرد نادرست آرایه ها در جاوا اسکریپت
عملکرد نادرست آرایه ها در جاوا اسکریپت

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


? پیج آکولاد باز من در اینستاگرام رو دنبال کنید تا به مطالب به صورت تصویری دسترسی پیدا کنید. من یک هفته زود تر مطالب رو اونجا میزارم.
@open_brace