Skip to main content

Command Palette

Search for a command to run...

خوبی‌های جاوا اسکریپت؟

Published
3 min read
S

🧑‍🍳 Cooking data as a chef de partie at DataChef.co by day! 🪄 Avid coder inventing magic by night!

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

نمی‌دانم چقدر با JavaScript آشنایی دارید‌، ولی بعید می‌دانم که پی‌اش رفته باشید و اسم داگلاس کراکفورد (Douglas Crockford) به گوشتان نخورده باشد.

عمدهٔ معروفیت ایشان هم پی کتابی به اسم Javascript the Good Parts شکل گرفته که شاید برای خیلی‌ها یک جک به نظر برسد. چطور؟

خوب بگذارید این‌طور شروع کنم‌: آشنایی من با جاوااسکریپت به کتاب Eloquent Javascript بر می‌گردد. و شاید یک آشنایی جزئی با Nodejs را بتوان چاشنی تجربه‌ام با این زبان دانست. حقیقت امر این است که از این زبان عمرا لذت نمی‌بردم. چه می‌دانم شاید اکثریتش بابت معلوم نبودن ریشهٔ درست و حسابی‌اش مثل زبان‌های دیگر باشد. شاید همین دلیل اولش باعث شده باشد که بتوان داخل اینترنت هزار و یک گزینهٔ چرند را به عنوان Best practices این زبان پیدا کرد که متاسفانه در خیلی از کد‌های منتشر شده به این زبان مورد استفاده قرار گرفته‌اند. شاید ساده‌ترین نمونهٔ این‌ها را بتوان استفاده نکردن از سمی کولون «;» برای پایان دادن به statement‌ها دانست.

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

return
{
    done: true
}

همه چیزش درست به نظر می‌رسد این‌طور نیست؟ اگر این‌طور فکر می‌کنید، یا نقص قضیه را می‌دانید و به همین دلیل از جاوا اسکریپت بی‌زارید‌، پیشنهاد می‌کنم این ارائهٔ آقای کراکفورد را از دست ندهید.

نکتهٔ کلی در مورد این زبان این است که نقص‌های طراحی فراوان و به صورت بحرانی مشکل‌زایی را می‌توان در آن یافت. همین‌طور نبود منابع یک‌پارچه با وجود پیاده‌سازی‌های متنوع (که به قول خود کراکفورد‌، تنها مشکلات طراحی را کپی کردن) باعث کج‌فهمی برنامه‌نویسانی که فکر می‌کنند می‌توانند این زبان را به راحتی یاد بگیرند شده است. تمام این‌ها در کنار گستردگی پلتفرمی که تقریبا هیچ زبان دیگری حتی به نزدیکی‌اش هم نرسیده است (مرورگرها)، و چه می‌دانم شاید امکاناتی که Prototype‌ها به برنامه‌نویس می‌دهند‌، آن‌چنان نقش تیغ دو لبه را برای برنامه‌نویسان زیبا ایفا می‌کند که نه می‌توان به کلی از خیرش گذشت (و به قول کراکفورد یادش نگرفت تا موقعی که بهش نیاز داریم) نه این که بتوان به عنوان یک غول همه چیز تمام برای هر مساله‌ای (سیستم‌عامل NodeJsای رو که یادتون می‌آد؟) به آن نگاه کرد (دارم به پایتون فکر می‌کنم، ولی اون هم نمی‌تونه جاهایی که جاوااسکریپت خوب عمل می‌کنه‌، خودی نشون بده).

XKCD operation systems در پایان این ارائه کسی از کراکفورد نظرش را در مورد HTML5 می‌پرسد و حقیقتش یک جورهایی حرف دلم را می‌زند. تا قبل از HTML5 و یا CSS3 تکلیفمان روشن بود. ساختار را با HTML و آن DOM چلاغش نشان می‌دادیم. رنگ و لعاب را با CSS می‌گفتیم و هر جینگولک دیگر را با جاوااسکریپت. حالا HTML5 و CSS3 عمدتا قابلیت‌هایی را به خودشان اضافه کرده‌اند که قبول دارم داشتنشان با جاوااسکریپت شاید کمی دردسر بیشتری داشت‌، ولی مربوط به همان حوزه می‌شد و بس. به قول کراکفورد که می‌گوید:

It's easy to make things bigger, it's harder to make things better.

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

More from this blog

معجون بهشتی Selenium, PhantomJS و Requests برای web scraping

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

Oct 15, 20168 min read

ورژن کنترل اختیاری نیست!

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

Dec 27, 20154 min read

کدنویسی بازی جاوااسکریپت به صورت زنده توسط Mary Rose

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

Oct 8, 20141 min read

برنامه نویسی کرنل لینوکس با راهنمایی The Eudyptula Challenge

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

Oct 1, 20143 min read

وبلاگ شاهین

221 posts