خوبیهای جاوا اسکریپت؟
خیلی وقت است ننوشتهام و حقیقتش همین الان هم زیاد مثل گذشته حس نوشتن ندارم. موضوع این است که از طرفی چند نفر از شما دوستان در ایمیلهایی از من خواستید که باز بنویسم (راستش اصلا فکر نمیکردم کسی آن بیرون به فکر چرایی آپدیت نشدن این وبلاگ باشد.) که ازشان متشکرم. و از طرف دیگر، به دلیل شغل جدیدم، و هدفمندتر شدن فعالیتهایم، عمدتا تجربههای جدید فوقالعادهای را مزهمزه میکنم که دوست ندارم زود فراموش شوند و فکر میکنم بازگوییشان در این وبلاگ بتواند کمک کند. این است که:
نمیدانم چقدر با JavaScript آشنایی دارید، ولی بعید میدانم که پیاش رفته باشید و اسم داگلاس کراکفورد (Douglas Crockford) به گوشتان نخورده باشد.
عمدهٔ معروفیت ایشان هم پی کتابی به اسم Javascript the Good Parts شکل گرفته که شاید برای خیلیها یک جک به نظر برسد. چطور؟
خوب بگذارید اینطور شروع کنم: آشنایی من با جاوااسکریپت به کتاب Eloquent Javascript بر میگردد. و شاید یک آشنایی جزئی با Nodejs را بتوان چاشنی تجربهام با این زبان دانست. حقیقت امر این است که از این زبان عمرا لذت نمیبردم. چه میدانم شاید اکثریتش بابت معلوم نبودن ریشهٔ درست و حسابیاش مثل زبانهای دیگر باشد. شاید همین دلیل اولش باعث شده باشد که بتوان داخل اینترنت هزار و یک گزینهٔ چرند را به عنوان Best practices این زبان پیدا کرد که متاسفانه در خیلی از کدهای منتشر شده به این زبان مورد استفاده قرار گرفتهاند. شاید سادهترین نمونهٔ اینها را بتوان استفاده نکردن از سمی کولون «;» برای پایان دادن به statementها دانست.
دلیلشان ساده است، میگویند خود مفسر جاوااسکریپت سمیکولونها را در جای مناسبشان میگذارد یا حتی بدتر میگویند بودن یا نبودن سمیکولون در پایان جملات، اختیاری است. این است که ممکن است فاجعهای مانند کد زیر رخ دهد:
return
{
done: true
}
همه چیزش درست به نظر میرسد اینطور نیست؟ اگر اینطور فکر میکنید، یا نقص قضیه را میدانید و به همین دلیل از جاوا اسکریپت بیزارید، پیشنهاد میکنم این ارائهٔ آقای کراکفورد را از دست ندهید.
نکتهٔ کلی در مورد این زبان این است که نقصهای طراحی فراوان و به صورت بحرانی مشکلزایی را میتوان در آن یافت. همینطور نبود منابع یکپارچه با وجود پیادهسازیهای متنوع (که به قول خود کراکفورد، تنها مشکلات طراحی را کپی کردن) باعث کجفهمی برنامهنویسانی که فکر میکنند میتوانند این زبان را به راحتی یاد بگیرند شده است. تمام اینها در کنار گستردگی پلتفرمی که تقریبا هیچ زبان دیگری حتی به نزدیکیاش هم نرسیده است (مرورگرها)، و چه میدانم شاید امکاناتی که Prototypeها به برنامهنویس میدهند، آنچنان نقش تیغ دو لبه را برای برنامهنویسان زیبا ایفا میکند که نه میتوان به کلی از خیرش گذشت (و به قول کراکفورد یادش نگرفت تا موقعی که بهش نیاز داریم) نه این که بتوان به عنوان یک غول همه چیز تمام برای هر مسالهای (سیستمعامل NodeJsای رو که یادتون میآد؟) به آن نگاه کرد (دارم به پایتون فکر میکنم، ولی اون هم نمیتونه جاهایی که جاوااسکریپت خوب عمل میکنه، خودی نشون بده).
در پایان این ارائه کسی از کراکفورد نظرش را در مورد HTML5 میپرسد و حقیقتش یک جورهایی حرف دلم را میزند. تا قبل از HTML5 و یا CSS3 تکلیفمان روشن بود. ساختار را با HTML و آن DOM چلاغش نشان میدادیم. رنگ و لعاب را با CSS میگفتیم و هر جینگولک دیگر را با جاوااسکریپت. حالا HTML5 و CSS3 عمدتا قابلیتهایی را به خودشان اضافه کردهاند که قبول دارم داشتنشان با جاوااسکریپت شاید کمی دردسر بیشتری داشت، ولی مربوط به همان حوزه میشد و بس. به قول کراکفورد که میگوید:
It's easy to make things bigger, it's harder to make things better.
قبل از پایان مطلب هم دوباره اشاره کنم که همانطور که در متن گفتم، من را فعلا نمیتوان یک برنامهنویس جاوااسکریپت دانست و احتمالا از خیلی از کارهای خارقالعادهای که Nodejs میتواند بکند بیخبرم. هدفم از نوشتن این مطلب برایم حکم ثبت استارت یک تجربه جدید را دارد. احتمالا در آینده بیشتر در مورد کلنجارهایم با جاوااسکریپت خواهم نوشت. هر چند بعید میدانم به این زودیها دوستش داشته باشم :)