چرا جاوا اسکریپت باوجود محبوبیت فراوان، منفور است؟

10 بهمن 1399, خواندن در 7 دقیقه

جاوا اسکریپت یکی از محبوب‌ترین زبان‌های برنامه نویسی منفور است. همان‌طور که در تصویر زیر مشاهده می‌کنید، با جست‌جوی عبارت JavaScript hated در گوگل،  با ۱۷ میلیون نتیجه مواجه می‌شویم و با جست‌و‌جوی عبارت Python hated نیز با تنها نزدیک به دو میلیون نتیجه روبرو خواهیم شد. این دو رقم تفاوت فاحشی با یک‌دیگر دارند.

جاوا اسکریپت همچنان پرکاربرد‌ترین زبان برنامه نویسی است که در زمینه‌های گسترده‌ای مورد استفاده قرار می‌گیرد. طبق آخرین گزارش TIOBE جاوا اسکریپت ۳.۳ درصد سهم بازار را در اختیار خود دارد و در لیست بیست زبان برنامه نویسی برتر نیز در جایگاه ششم قرار دارد.

با مقایسه‌ی دو آمار بالا به نتیجه‌ای متناقص دست‌خواهیم یافت؛ برنامه‌نویسان به شکل گسترده‌ای در حال استفاده از زبان برنامه نویسی هستند که از آن متنفرند! اما چرا؟ در این مقاله قصد بررسی چند مورد از دلایل این اتفاق را داریم.

چرا جاوا اسکریپت تا این حد منفور است؟

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

کابوس IEEE 754

طراحان جاوا اسکریپت تصمیم به استفاده از IEEE 754 Double Precision در این زبان گرفته‌اند و شما تنها یک نوع داده‌ی عددی Number خواهید داشت. این مورد گاهی منجر به مواردی عجیب می‌شود:

9999999999999999 == 10000000000000000 → true
0.1 + 0.2 === 0.3 → false
x = 1.0000000000000001
x === 1 → true

این موارد کاملا در استاندارد EE 754 Double Precision منطقی و درست هستند؛ ولی اگر توسعه‌دهنده‌ای با این موارد آشنا نباشد، دچار مشکل خواهد شد.

مورد جالب دیگر نیز هنگامی رخ می‌دهد که متوجه می‌شوید که not a number نیز از نوع number به حساب می‌آید.

typeof NaN == 'number' → true
NaN != NaN → true

وابستگی به مرورگر

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

انواع داده‌های ضعیف و تبدیل انواع اجباری

جاوا اسکریپت به شکل خشنی به تبدیل انواع داده‌ها (data types) به یک‌دیگر می‌پردازد. در نتیجه ممکن است با نتایجی غیرقابل پیش‌بینی روبرو شوید. در زیر می‌توانید چند مثال از این نتایج عجیب را مشاهده کنید:

var a = "1"
var b = 2
var c = a + b → c = "12"
var d = +a + b → d = 3, note the unary plus sign (+a)
[] + [] → "" // adding two arrays and you have a String!
[] + {} → [object object]
{} + [] → 0 // I don't even know how to explain
{} + {} → NaN // ???
// Funny arrays
19 == [19] → true
19 == [1,9] → false
"1,9" == [1,9] → true

Boiler-Plate کد بیش‌ از حد

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

متغیرهای گلوبال

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

همچنین باید بدانید که مفهومی دیگر با عنوان متغیر‌های گلوبال ضمنی نیز در این زبان وجود دارد. با توجه به این قاعده، شما اگر نام متغیر تعریف شده قبلی خود را به اشتباه تایپ کنید، نه تنها به شما خطایی نمایش داده نخواهد شد، بلکه متغیر گلوبال جدیدی با نام اشتباه نوشته شده، ساخته می‌شود. البته می‌توان با استفاده از use strict از این اتفاق پیش‌گیری کرد.

function foo() {
  var bam = 'This is a not a global variable';
  //
  // [... Some code...]
  //
  ban = 'Typo and now you have a global variable';
}

اگر هنوز به اندازه‌ی کافی از دست جاوا اسکریپت کلافه نشده‌اید، شما را به مشاهده قطعه کد زیر دعوت می‌کنم:

function myLoop() {
    var sum = 0;
    for(i = 0; i < 10; i++) {
        sum += i;
    }
    return sum;
}

در مثال بالا چون متغیر i بدون var, let یا const تعریف شده‌است، تبدیل به یک متغیر گلوبال می‌شود و می‌توانید از آن در هر کجای برنامه‌تان استفاده کنید!

چرا جاوا اسکریپت محبوب است؟

جاوا اسکریپت نواقص فراوانی دارد و بسیاری از افراد آن‌ را زبانی نامناسب می‌دانند؛ با این‌وجود هیچ‌کس نمی‌تواند منکر محبوبیت این زبان شود. در این قسمت قصد بررسی برخی از دلایل این اتفاق را داریم.

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

کماکان پس از ۲۰ سال هنوز جاوا اسکریپت بهترین انتخاب برای توسعه‌ی وب است.

HTML, CSS و Javascript با یکدیگر مثلث مقدس وب را می‌سازند. شما اگر بخواهید از کتاب‌‌خانه‌های جاوا اسکریپت مانند ‌jQuery نیز استفاده کنید نیازمند به دانش پایه‌ی جاوا اسکریپت خواهید بود. در واقع باید گفت که جاوا اسکریپت بهترین و محبوب‌ترین انتخاب ]و یا حتی تنها گزینه[ در توسعه‌ی وب بوده است.

یادگیری و استفاده از جاوا اسکریپت آسان است

این زبان می‌تواند به سادگی در هر محیط ویرایش متنی نوشته شود و به راحتی در مرورگر کامپیوتر نیز اجرا شود؛ در نتیجه از آن‌جایی که برای استفاده از جاوااسکرپیت نیاز به دانلود و نصب هیچ محیط توسعه‌ یا نرم‌افزا سنگینی نیست، هر کسی می‌تواند به راحتی کار با آن را شروع کند.

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

انعطاف‌پذیری بالا در توسعه‌ی وب

با استفاده از جاوا اسکریپت می‌توان به توسعه‌ی اپ‌های تحت وب هم در سمت کلاینت و هم در سمت سرور پرداخت و این اتفاق مدیون مجموعه‌ی بزرگ فریم‌ورک‌های این زبان است.

به عنوان مثال می‌توان به Node.js در توسعه‌ی سمت سرور و React و Vue در توسعه‌ی سمت کلاینت اشاره کرد.

ردپای جاوا اسکرپیت در همه جا دیده می‌شود

اگرچه جاوا اسکریپت در توسعه‌ی وب مشهور است، کاربرد آن تنها محدود به این حوزه نمی‌شود و کاربردهای گسترده‌تری نیز دارد:

  • اپ موبایل: ری‌ اکت نیتیو و Ionic نام‌های آشنایی در زمینه‌ی توسعه‌ی اپ موبایل هستند؛ البته که فریم‌ورک‌های فراوان جاوا اسکریپتی دیگری نیز برای توسعه‌ی اپ‌ها هیبریدی موبایل وجود دارند.
  • بصری‌سازی داده: جاوا اسکریپت دارای ابزارهای فراوانی برای نمایش داده‌ها است. در این بخش نیز می‌توان به D3.js, Chart.js, Raphael.js اشاره کرد. این کتاب‌خانه‌ها و فریم‌ورک ها سبک هستند وکاربردی آسان دارند.
  • رباتیک و اینترنت اشیا: Johnny-Five برنامه نویسی رباتیک و IOT را به خوبی پشتیبانی می‌کند و با سخت‌افزارهای مختلفی مانند Arduino, Intel Edison Tessel 2 و Raspberry سازگار است.
  • توسعه‌‌ی بازی:‌ شما می‌توانید با استفاده از فریم‌ورک Phaser.JS به توسعه‌ی بازی‌های تحت وب بزرگی بپردازید.

جامعه‌ی بزرگ

جاوا اسکریپت توسط شرکت‌های بزرگی مانند مایکروسافت، گوگل،‌ علی‌ بابا و فیس‌ بوک حمایت می‌شود. این زبان آینده‌ای روشن پیش روی خود دارد و جامعه یا کامیونیتی آن نیز به اندازه‌ی کافی بزرگ است که پاسخ بیش‌تر سوالاتتان را بیابید.

جمع‌بندی

Bjarne Stroustrup می‌گوید:

تنها دو دسته زبان وجود دارد؛ یکی زبان‌هایی که مردم درباره‌ی آن‌ها گله و شکایت می‌کنند و دسته‌ی دیگر زبان‌هایی که هیچ‌کس از آن‌ها استفاده نمی‌کند.

به طور خلاصه می‌توان دلایل استفاده‌ی گسترده از جاوا اسکریپت منفور را، موارد زیر دانست:

  • هیچ جایگزینی مناسبی برای جاوا اسکریپت، به خصوص در توسعه‌ی وب، وجود ندارد؛ چرا که این زبان یکی از ضلع‌های مثلث بنیادین دنیای وب (HTML, CSS, JS) است.
  • یادگیری و استفاده از جاوا اسکریپت بسیار آسان است.
  • جاوا اسکریپت منعطف است و با توجه به فریم‌ورک‌ها و کتاب‌خانه‌های فراوانش، می‌تواند در زمینه‌های گوناگونی مورد استفاده قرار گیرد.
  • جامعه‌ی بسیار بزرگی از جاوا اسکریپت پشتیبانی می‌کنند.

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

منبع

چه امتیازی به این مقاله می دید؟
خیلی بد
بد
متوسط
خوب
عالی

دیدگاه‌ها و پرسش‌ها

برای ارسال دیدگاه لازم است، ابتدا وارد سایت شوید.

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

در حال دریافت نظرات از سرور، لطفا منتظر بمانید

آفلاین
user-avatar
ابوالفضل باغشاهی @BAbolfazl
Front-End
دنبال کردن

گفتگو‌ برنامه نویسان

بخشی برای حل مشکلات برنامه‌نویسی و مباحث پیرامون آن وارد شو