دوره آموزش جاوااسکریپت برای وب

جاوااسکریپت یک زبان برنامه‌نویسی دینامیک و چندمنظوره است که در حوزه‌های مختلفی مانند مهندسی نرم‌افزار، برنامه‌نویسی مبتنی بر هوش مصنوعی، رباتیک و تولید اپلیکیشن‌های وب، دسکتاپ و موبایل قابل استفاده است و در سال‌های اخیر محبوبیت روزافزونی را تجربه کرده است. زبان جاوااسکریپت اصطلاحاً multi-paradigm است و از پارادایم‌ها یا سبک‌های برنامه‌نویسی مختلفی مانند برنامه‌نویسی شی‌گرا (OOP)، برنامه‌نویسی تابعی (Functional)، برنامه‌نویسی رویه‌ای (procedural) و برنامه‌نویسی رویداد محور (event-driven) پشتیبانی می‌کند.

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

با توجه به اینکه نسخه‌های مختلف مرورگرهای وب برای پلتفرم‌های دسکتاپ، تبلت و موبایل همگی به یک موتور جاوااسکریپت مجهز هستند، جاوااسکریپت بیش از هر زبان دیگری در طول تاریخ منتشر (deploy) شده است. از سال 2010 و با معرفی Node.js جاوااسکریپت به دنیای خارج از مرورگرها نیز راه یافت و به عنوان مثال، با نصب Node روی سرور، امکان برنامه‌نویسی وب در سمت سرور با استفاده از جاوااسکریپت وجود دارد. موفقیت خیره‌کننده‌ی Node باعث شد تا جاوااسکریپت به زبانی تبدیل شود که بیش از هر زبان دیگری توسط برنامه‌نویسان و توسعه‌دهندگان نرم‌افزار استفاده می‌شود.

اگر تجربه‌ای در برنامه‌نویسی دارید، بد نیست بدانید که جاوااسکریپت یک زبان سطح بالا، دینامیک و تفسیری (و مجهز به کامپایلر JIT) است که از سبک‌های برنامه‌نویسی مختلف به خوبی پشتیبانی می‌کند. این زبان، بسیاری از ویژگی‌های گرامری خود را از زبان‌های کم‌نام‌و‌نشان Scheme و Self اقتباس کرده است. برای نمونه، جاوااسکریپت به تقلید از زبان Scheme دارای توابع first-class است (هر زبان برنامه‌نویسی که توابع آن مانند متغیرها رفتار می‌کنند و برای مثال، می‌توان آنها را به عنوان آرگومان به توابع دیگر پاس کرد و یا آنها را به عنوان خروجی توابع تعیین کرد و یا آنها را به عنوان مقدار به متغیرها تخصیص داد، یک زبان دارای توابع first-class نامیده می‌شود) و یا مانند زبان Self یک زبان مبتنی بر پروتوتایپ (prototype-based) است که سبکی از برنامه‌نویسی شی‌گرا را ارائه می‌دهد که در آن کلاس‌ها به طور صریح تعریف نمی‌شوند و می‌توان یک شیء را بدون اینکه کلاسی برایش تعریف شده باشد، ایجاد کرد. بنابراین، مفاهیمی مانند وراثت (inheritance) در جاوااسکریپت به شکل متفاوتی نسبت به مدل سنتی مبتنی بر کلاس پیاده‌سازی می‌شوند. البته در نسخه‌های اخیر جاوااسکریپت، از برنامه‌نویسی مبتنی بر کلاس‌ها نیز پشتیبانی می‌شود و این یکی از دلایل اصلی رشد و گسترش میزان استفاده از این زبان است.

بخش زیادی از قدرت جاوااسکریپت، مرهون APIهای نوشته شده برای این زبان است که یا در محیط‌های میزبان مانند مرورگرها و Node پیاده‌سازی شده‌اند و بخشی از کتابخانه‌ی استاندارد جاوااسکریپت محسوب می‌شوند و یا توسط اشخاص و شرکت‌های ثالث ایجاد شده و به عنوان کتابخانه‌های خارجی (external) در دسترس هستند. علاوه بر اینها، فریمورک‌های متعددی وجود دارند که کار برنامه‌نویسان جاوااسکریپت را ساده‌تر می‌کنند. برای نمونه، فیسبوک یک فریمورک جاوااسکریپتی را برای استفاده‌ی داخلی خود طراحی کرد و بعداً این فریمورک را با نام React به صورت متن‌باز منتشر کرد. گوگل نیز با طی یک روند مشابه، فریمورک Angular را منتشر کرد.

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

آنچه در دوره آموزش جاوااسکریپت برای وب خواهید آموخت:

این آموزش از سه بخش اصلی تشکیل می‌شود. بخش اول که از فصل‌های 1 تا 11 تشکیل می‌شود، به هسته زبان جاوااسکریپت و کتابخانه استاندارد آن اختصاص دارد. ویژگی‌هایی که در این بخش خواهیم دید، در هر محیط میزبان جاوااسکریپت و برای خلق هر نوع اپلیکیشنی قابل استفاده است. بخش دوم این دوره که شامل فصول 12 تا 22 است، به جاوااسکریپت سمت کاربر می‌پردازد و به ویژه، چند API کاربردی را معرفی و بررسی می‌کند. بخش سوم نیز به جاوااسکریپت سمت سرور و محیط Node.js و فریمورک Express اختصاص دارد.

فصل ۱: جاوااسکریپت چیست؟

در فصل اول در مورد تاریخچه‌ی پیدایش و تکامل جاوااسکریپت و وضعیت امروزی این زبان مطالبی بیان خواهد شد. در طول فصل از ارتباط بین جاوااسکریپت و ECMAScript خواهیم گفت و با ماهیت DOM یا Document Object Model و BOM یا Browser Object Model آشنا خواهیم شد. به علاوه خواهیم دید که جاوااسکریپت چه ویژگی‌های زبانی دارد و قادر به تولید چه نوع اپ‌هایی است. این فصل از ۴ درس زیر تشکیل شده است:

  1. معرفی جاوااسکریپت
  2. ویژگی‌های جاوااسکریپت
  3. کاربردهای جاوااسکریپت
  4. شروع کار با جاوااسکریپت
فصل ۲: مبانی برنامه‌نویسی در جاوااسکریپت

در این فصل برخی از ساختارهای رایج در زبان‌های برنامه‌نویسی مانند سیستم نوع (type system) و ساختارهای شرط و تکرار را در جاوااسکریپت بررسی خواهیم کرد. به علاوه، با شباهت‌های جاوااسکریپت با سایر زبان‌های مشتق شده از زبان C آشنا شده و البته به تفاوت‌ها هم اشاره خواهیم کرد. ای نفصل از ۹ درس زیر تشکیل شده است:

  1. ویژگی‌های گرامری جاوااسکریپت
  2. متغیرهای جاوااسکریپت
  3. نوع‌های داده در جاوااسکریپت
  4. تبدیل نوع در جاوااسکریپت
  5. انواع عملگرها
  6. کار با مقادیر عددی
  7. کار با رشته‌های متنی
  8. ساختارهای شرطی
  9. حلقه‌های تکرار
فصل ۳: توابع جاوااسکریپت

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

  1. تعریف تابع در جاوااسکریپت
  2. سینتکس Function Expression
  3. سینتکس Arrow Function
فصل ۴: اشیاء و نوع Object

در این فصل، اشیاء جاوااسکریپت و نوع object را معرفی می کنیم و با مفاهیم و موضوعات مهمی مانند پراپرتی‌های اشیاء، متدها و سازنده‌ها آشنا خواهیم شد. نوع symbol را هم در این فصل معرفی می‌کنیم و یک کاربرد این نوع را در تبدیل مقادیر object به primitive خواهیم دید. این فصل هز ۷ درس زیر تشکیل شده است:

  1. ایجاد اشیاء
  2. درک اشیاء به عنوان مقادیر ارجاعی
  3. متدها و کلمه کلیدی this
  4. سازنده‌ها و عملگر new
  5. تکنیک Optional Chaining
  6. نوع Symbol
  7. تبدیل Object به Primitive
فصل ۵: کالکشن‌ها در جاوااسکریپت

در این فصل به بررسی نوع‌های کالکشنی در زبان جاوااسکریپت می‌پردازیم و در این راستا با آرایه‌ها و نوع Array و نوع‌های Map و Set آشنا خواهیم شد و کاربردهای این نوع‌ها را در عمل خواهیم دید. ۷ درس تشکیل‌دهنده‌ی این فصل عبارتند از:

  1. آرایه‌ها و نوع Array
  2. متدهای مربوط به آرایه‌ها
  3. نوع Map
  4. نوع Set
  5. نوع‌های WeakMap و WeakSet
  6. متدهای keys، values و entries
  7. سینتکس Destructuring Assignment
فصل ۶: نوع‌های Built-in پرکاربرد

این فصل به معرفی و بررسی کاربردهای چند نوع ارجاعی پرکاربرد احتصاص دارد. نوع Date برای کار با مقادیر تاریخ و زمان، نوع Regexp برای کار با عبارات باقاعده (regular expressions) در این درس مورد بررسی قرار می‌گیرند. به علاوه، در مورد فرمت JSON و مفهوم Serialization نیز صحبت خواهد شد. درس‌های این فصل عبارتند از:

  1. نوع Date برای کار با مقادیر زمانی
  2. نوع Regexp برای کار با عبارات باقاعده
  3. کار با مقادیر JSON
فصل ۷: کار با Iterator و Generator

این فصل به بررسی دو مفهوم بسیار مهم در جاوااسکریپت مدرن یعنی iterator و generator و ارتباط آنها با ساختارهای برنامه‌نویسی موجود اختصاص دارد. درس‌های تشکیل‌دهنده‌ی این فصل عبارتند از:

  1. مفهوم Iteration و الگوی Iterator
  2. آشنایی با Generator
فصل ۸: کلاس‌ها و برنامه‌نویسی شی‌گرا در جاوااسکریپت

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

  1. تعریف کلاس
  2. وراثت کلاس‌ها
  3. متدها و پراپرتی‌های استاتیک
  4. متدها و پراپرتی‌های Private و Protected
  5. بسط کلاس‌های Builtin
فصل ۹: آشنایی با Proxy و Reflect

این فصل به معرفی دو مفهوم مرتبط با یکدیگر یعنی Proxy و Reflect اختصاص دارد. این دو مفهوم و ارتباط بین آنها را در ۳ درس زیر بررسی می‌کنیم:

  1. Proxy چیست؟
  2. متدهای Reflect
  3. الگوهای Proxy
فصل ۱۰: مفاهیم پیشرفته‌تر در مورد توابع

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

  1. پارامترهای Rest و سینتکس Spread
  2. تفاوت var و let
  3. درک مفهوم Closure
  4. توابع زمان‌بندی setTimeout و setInterval
فصل ۱۱: کاربرد Promise و الگوی async/await

در این فصل در مورد دو ساختار مربوط به برنامه‌نویسی غیرهمزمان در جاوااسکریپت یعنی Promise و async/await صحبت می‌شود.

  1. مقدمه‌ای بر برنامه‌نویسی موازی
  2. نقش Promise در برنامه‌نویسی موازی
  3. توابع Async
فصل ۱۲: BOM چیست؟

این فصل به بررسی BOM یا Browser Object Model و اشیائی مثل window، location، navigator و screen اختصاص دارد.

  1. شیء Window
  2. مدیریت آدرس و تاریخچه با location و history
  3. دریافت اطلاعات کاربر با navigator و screen
فصل ۱۳: DOM چیست؟

در این فصل در مورد DOM یا Document Object Model صحبت می‌کنیم و خواهیم دید که چطور می‌توانیم محتوا و استایل صفحات وب را به صورت دینامیک و در واکنش به رویدادهای مختلف، ویرایش کنیم.

  1. نوع Node و درخت DOM
  2. نوع Document
  3. نوع Element
  4. نوع Text
  5. سایر نوع‌های DOM
  6. کار با DOM
  7. معرفی Selectors API
  8. سایر مطالب مربوط به DOM
فصل ۱۴: اکستنشن‌های DOM

در این فصل خواهیم دید که چطور سایر APIها و خود مرورگرها قابلیت‌های DOM را کسترش می‌دهند. در این راستا با چند API دیگر مانند Selectors و Element Traversal نیز آشنا خواهیم شد.

  1. استایل‌ها و Traversals
  2. مفهوم Range
  3. معرفی Observable APIs
فصل ۱۵: رویدادها

در این فصل در مورد رویدادها (events) و ماهیت و عملکرد آنها در جاوااسکریپت صحبت خواهیم کرد و خواهیم دید که چطور DOM می‌تواند نحوه‌ی عملکرد رویدادها را تعیین کند.

  1. رویدادها و شیء Event
  2. انواع رویدادها
  3. شبیه‌سازی رویدادها
فصل ۱۶: APIهای جاوااسکریپت

این فصل به معرفی و بررسی چند API جاوااسکریپتی پر کاربرد مانند Atomics، Encoding، File، Notifications و Timing اختصاص دارد.

  1. APIهای Atomics و SharedArraybuffer
  2. معرفی Clipboard API
  3. معرفی Cross-Context Messaging
  4. معرفی Encoding API
  5. APIهای Blob و File
  6. APIهای Fullscreen و Geolocation
  7. عناصر Media
  8. معرفی Streams API
  9. APIهای URL
  10. APIهای Timing
  11. کامپوننت‌های وب
  12. معرفی Web Cryptography API
فصل ۱۷: مدیریت خطا و دیباگ کدها

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

  1. مدیریت خطا
  2. استراتژی‌های مدیریت خطا
  3. تکنیک‌های دیباگ
فصل ۱۸: درخواست‌های شبکه و منابع Remote

در این فصل با روش های درخواست داده و فایل‌های مختلف توسط مرورگرها با استفاده از Fetch API آشنا می‌شویم.

  1. آشنایی با Fetch API
  2. الگوهای رایج Fetch
  3. پشتیبانی از CORS
  4. معرفی Beacon API
  5. آشنایی با Web Sockets
  6. معرفی Eventsource API
فصل ۱۹: ذخیره‌سازی داده‌ها در سمت کاربر

در این فصل خواهیم دید که چطور می‌توانیم آفلاین بودن اپلیکیشن را تشخیص دهیم و از تکنیک‌های مختلف برای ذخیره کردن داده‌ها در ماشین کاربر استفاده کنیم. بحث را با کوکی‌ها شروع کرده و سپس، با تکنیک‌های مدرن‌تر Web Storage و IndexedDB آشنا می‌شویم.

  1. کار با کوکی‌ها
  2. تکنولوژی Web Storage
  3. استفاده از IndexedDB
فصل ۲۰: کار با ماژول‌های جاوااسکریپت

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

  1. درک الگوی Module
  2. کار با Module Loaders
فصل ۲۱: کار با Worker

در این فصل با انواع worker آشنا شده و عملکرد آنها را هم در سطح مرورگر و هم در سطح سیستم‌عامل بررسی می‌کنیم. به علاوه، استراتژی‌هایی را برای بهترین استفاده از انواع worker ارائه می‌دهیم.

  1. معرفی Workers
  2. کار با Dedicated Workers
  3. کار با Shared Workers
  4. کار با Service Workers
فصل ۲۲: توصیه‌های کاربردی

در این فصل، رویکردهایی را برای کار با جاوااسکریپت در سطح Enterprise ارائه می‌دهیم. تکنیک‌هایی را در ارتباط با کدنویسی و فرمت‌دهی معرفی می‌کنیم که کار نگهداری پروژه‌ها را ساده‌تر می‌کند. همچنین، در ارتباط با کارایی (performance) اپ‌ها صحبت کرده و روش‌هایی را برای ارتقای سرعت اجرای اپ‌های جاوااسکریپت معرفی می‌کنیم. در نهایت، در مورد مسائل مربوط به استقرار (deployment) اپ‌ها صحبتمی کنیم و خواهیم دید که چطور می‌توانیم یک build process ایجاد کنیم.

  1. توصیه‌هایی برای نگهداری پروژه
  2. توصیه‌های مربوط به Performance
  3. توصیه‌های مربوط به Deployment
فصل ۲۳: شروع به کار با Node.js

در این فصل توسعه‌ی سمت سرور را با معرفی محیط میزبان Node.js شروع می‌کنیم و با ایجاد یک اپ ساده مفاهیم مهمی مانند مسیریابی در Node.js را معرفی می‌کنیم.

  1. Node.js چیست؟
  2. پیکربندی محیط توسعه
  3. اجرای یک اپ Node.js
  4. ایجاد یک ماژول Node.js
  5. ساخت یک وب‌سرور ساده در Node.js
  6. مسیریابی در Node.js
فصل ۲۴: آشنایی با فریمورک Express

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

  1. ساخت وب‌سرور با Express
  2. مسیریابی در Express
  3. تولید محتوای دینامیک با EJS