مقدمه

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

Ellen Ullman, Close to the Machine: Technophilia and its Discontents
Picture of a screwdriver and a circuit board

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

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

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

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

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

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

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

درباره‌ی برنامه‌نویسی

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

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

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

وقتی اقدام اثری ندارد، اطلاعات جمع‌آوری کن; زمانی اطلاعات سودی نمی رساند، استراحت کن. quote}}

Ursula K. Le Guin, The Left Hand of Darkness

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

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

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

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

بعضی برنامه‌نویسان بر این باورند که بهترین روش مدیریت این پیچیدگی، استفاده از مجموعه‌ای محدود از تکنیک‌های روشن در برنامه‌ها است. این افراد قوانین سخت‌گیرانه‌ای ("بهترین روش‌ها - best practices”) وضع کرده اند که برای برنامه‌ها، ماندن در محدوده‌ی امن کوچک آن‌ها و تبعیت دقیق از این قوانین را تجویز می کنند.

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

چرا زبان برنامه‌نویسی اهمیت دارد

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

00110001 00000000 00000000
00110001 00000001 00000001
00110011 00000001 00000010
01010001 00001011 00000010
00100010 00000010 00001000
01000011 00000001 00000000
01000001 00000001 00000001
00010000 00000010 00000000
01100010 00000000 00000000

برنامه‌ی بالا اعداد 1 تا 10 را باهم جمع کرده و نتیجه را چاپ می نماید: 1 + 2 + ... + 10 = 55. این برنامه می تواند روی یک ماشین ساده فرضی اجرا شود. برای برنامه‌نویسی کامپیوتر‌های اولیه، لازم بود تا ردیف بزرگی از سویچ‌ها را در موقعیت مناسب قرار داد یا در نوارهای مقوایی مخصوص سوراخ ایجاد کرد و در کامپیوتر قرار داد. احتمالا می توانید تصور کنید که این کار چقدر خسته‌کننده و اشتباه‌ساز بود. حتی نوشتن برنامه‌های ساده، نیازمند زکاوت و نظم زیادی بود. نوشتن برنامه‌های پیچیده تقریبا قابل تصور نبود.

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

هر خط ار برنامه‌ی قبلی حاوی یک دستور است. می توان‌ آن را در زبان فارسی به صورت زیر نوشت:

  1. عدد 0 را در موقعیت 0 حافظه ذخیره کن.

  2. عدد 1 را در موقعیت 1 در حافظه ذخیره کن.

  3. مقدار موجود در موقعیت 1 حافظه را در موقعیت 2 حافظه ذخیره کن.

  4. عدد 11 را از مقداری که در موقعیت 2 در حافظه قرار دارد، تفریق کن.

  5. اگر مقدار موجود در موقعیت 2 در حافظه برابر با 0 است، به سراغ دستور شماره 9 برو.

  6. مقدار موجود در موقعیت 1 حافظه را به مقدار موجود در موقعیت 0 حافظه، اضافه نما.

  7. عدد 1 را به مقدار موجود در موقعیت 1 حافظه، اضافه نما.

  8. دستور شماره 3 را اجرا کن.

  9. مقدار موجود در موقعیت 0 حافظه را در خروجی قرار بده.

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

 Set “total” to 0.
 Set “count” to 1.
[loop]
 Set “compare” to “count”.
 Subtract 11 from “compare”.
 If “compare” is zero, continue at [end].
 Add “count” to “total”.
 Add 1 to “count”.
 Continue at [loop].
[end]
 Output “total”.

آیا اکنون از این برنامه سر در می آورید؟ در دو خط اول به دو مکان در حافظه، مقدارهای اولیه اختصاص داده می شود: total برای ساختن نتیجه محاسبه استفاده می شود و count عددی را که در حال حاضر در دست داریم را پیگیری می کند. خطوطی که از compare استفاده می کنند احتمالا مبهم ترین خطوط به نظر می آیند. برنامه می خواهد بررسی کند آیا مقدار count برابر با 11 است که در این صورت در مورد توقف اجرای برنامه تصمیم بگیرد. با توجه به اینکه ماشین فرضی ما نسبتا ابتدایی می باشد، فقط می تواند صفر بودن یک عدد را آزمایش کند و بر اساس آن تصمیم بگیرد. بنابراین از موقعیتی در حافظه که برچسب compare دارد برای محاسبه مقدار count - 11 استفاده می کند و بر اساس آن مقدار تصمیم می گیرد. دو خط بعدی مقدار count را با نتیجه محاسبه جمع کرده و مقدار count را بعد از هربار که برنامه متوجه شد که مقدار count هنوز ‍‍11 نیست، یک واحد افزایش می دهد.

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

let total = 0, count = 1;
while (count <= 10) {
  total += count;
  count += 1;
}
console.log(total);
// → 55

این نسخه کمی بهتر شده است. مهم تر از همه، نیازی نیست نحوه‌ی انتقال برنامه بین دستورات را مشخص کنیم. ساختار while این وظیفه را به عهده می گیرد. این ساختار، بلوک کد (بین کروشه‌ها) زیرینش را تا زمانی که شرطش برقرار باشد اجرا می کند. این شرط همان count <= 10 می باشد به معنای “count مساوی یا کوچکتر از 10 باشد" است. دیگر نیازی نیست که مقداری موقت ایجاد کنیم و آن را با صفر مقایسه کنیم، که کار جالبی نبود. بخشی از قدرت زبان‌های برنامه‌نویسی این است که این این گونه جزئیات اضافی را از میان برمی دارند.

در پایان برنامه، بعد از اینکه ساختار while به اتمام رسید، دستور console.log برای قراردادن نتیجه در خروجی استفاده می شود.

اگر شانس استفاده از دستورات range و sum را داشتیم، که به ترتیب برای ایجاد مجموعه‌ای از اعداد در یک بازه‌ و محاسبه‌ی جمع یک مجموعه اعداد استفاده می شوند، برنامه به شکل زیر نوشته می شد:

console.log(sum(range(1, 10)));
// → 55

درسی که از این داستان می شود گرفت این است که یک برنامه‌ی یکسان را می توان به دو صورت طولانی و کوتاه ، ناخوانا و خوانا نوشت. اولین نسخه‌ی این برنامه بسیار گنگ بود در حالیکه که آخرین نسخه‌ی آن تقریبا به زبان انگلیسی نوشته شده است: log the sum of the range of numbers from 1 to 10. (مجموع اعداد بازه‌ی 1 تا 10 را بنویس.). در فصل‌های بعد خواهیم دید که چگونه دستوراتی مثل sum و range را خودمان تعریف کنیم.

یک زبان برنامه‌نویسی خوب با فراهم نمودن امکان اجرای دستوراتی در سطح بالا، به برنامه‌نویس کمک می کند. باعث می شود که جزئیات کم‌اهمیت کنار گذاشته شوند. بلوک‌های سازنده‌ی مناسب فراهم می کند (مانند while و console.log).به شما اجازه می دهد تا بلوک‌های سازنده‌ی خودتان را تعریف کنید (مانند sum و range) و نوشتن این بلاک‌ها را آسان می نماید.

جاوااسکریپت چیست؟

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

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

بعد از بکارگیری جاوااسکریپت خارج از Netscape، یک سند استاندارد نوشته شد تا شیوه‌ای که زبان جاوااسکریپت باید کار کند توصیف شود و در نتیجه نرم‌افزارهای متنوعی که قصد پشتیبانی از این زبان را دارند، همه به زبان یکسانی اشاره کنند. به این استاندارد، استاندارد ECMAScript گفته می شود. این نام گذاری بعد از صورت گرفت که سازمان بین‌المللی Ecma کار استانداردسازی را انجام داد. در عمل، اصطلاح ECMAScript و JavaScript را می توان به جای هم به کار برد - هر دو نام به یک زبان اشاره می کند.

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

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

نسخه‌های متفاوتی از جاوااسکریپت وجود دارد. نسخه‌ی سوم ECMAScript، در زمانی که جاوااسکریپت گوی سبقت را می ربود، حدودا بین سال‌های 2000 تا 2010، به صورت گسترده‌ای پشتیبانی می شد. در طول این مدت، کار روی نسخه‌ی جاه‌طلبانه 4 ، در جریان بود. نسخه‌ای که برنامه‌ریزی شده بود تا بهبود‌ها و امکاناتی اساسی به زبان اضافه کند. تغییر اساسی زبانی زنده و پراستفاده، از نقطه‌نظر سیاست کاری، مشکل‌زا بود. در سال 2008، کار روی نسخه‌ی 4 متوقف شد و نسخه‌ی بسیار محافظه‌کارانه‌ی 5 در دستور کار قرار گرفت. نسخه‌ای که فقط تغییرات و بهبود‌هایی که محل اختلاف نبودند را در بر داشت و در سال 2009 منتشر شد. سپس در سال 2015 نسخه‌ی 6 بیرون آمد، یک به‌روز رسانی اساسی که بعضی از ایده‌هایی که در نسخه‌ی 4 برنامه‌ریزی شده بودند را در بر داشت. از آن موقع به بعد، هر سال تغییراتی جدید و کوچک را شاهد هستیم.

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

مرورگرهای وب تنها پلتفرم‌هایی نیستند که جاوااسکریپت در آن‌ها استفاده می شود. بعضی پایگاه‌های داده مثل MongoDB و CouchDB، از جاوااسکریپت به عنوان زبان اسکریپت نویسی و پرس‌ و جو استفاده می کنند. پلتفرم‌های متعددی برای برنامه‌نویسی دسکتاپ و سرور وجود دارد (مهم‌ترینشان پروژه‌ی Node.js (که موضوع فصل 20) می باشد) که محیطی را برای برنامه‌نویسی جاوااسکریپت خارج از مرورگر فراهم می نمایند.

کد و شیوه‌ی کار با آن

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

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

در هنگام مطالعه این کتاب در مروگر وب، می توانید تمامی برنامه‌های نمونه کتاب را با کلیک کردن ویرایش و اجرا نمایید.

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

نگاهی اجمالی به این کتاب

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

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

بخش مربوط به زبان این کتاب با چهار فصل شروع می شود که به معرفی ساختار پایه‌ای زبان جاوااسکریپت می پردازد. در این فصل‌ها، ساختارهای کنترلی (مانند while که در این مقدمه با آن آشنا شدید)، توابع(نوشتن بلاک‌های سازنده‌ی اختصاصی) و ساختارهای داده پرداخته می شود. با دانستن‌ آن‌ها، شما خواهید توانست تا برنامه‌های ابتدائی بنویسید. سپس، فصل‌های 5 و 6، تکنیک‌هایی را معرفی می کند تا از توابع و آبجکت‌ها برای نوشتن کد‌های انتزاعی‌تر استفاده کنید و پیچیدگی برنامه را مهار نمایید.

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

بخش دوم، در فصل‌های 13 تا 19، به ابزارهایی که در دسترس جاوااسکریپت مرورگر هستند می پرداخته می شود. در این بخش خواهید آموخت که چگونه چیزها را روی صفحه نمایش دهید (فصل‌های 14 و 17)، به ورودی کاربر واکنش نشان دهید (فصل 15) و با شبکه ارتباط برقرار کنید (فصل 18). در این بخش نیز دو فصل پروژه وجود دارد.

بعد از آن، فصل 20 به شرح Node.js می پردازد، و در فصل 21، یک وب‌سایت کوچک با این ابزار ساخته می شود.

سبک‌های نگارش

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

function factorial(n) {
  if (n == 0) {
    return 1;
  } else {
    return factorial(n - 1) * n;
  }
}

گاهی، برای نمایش خروجی یک برنامه، خروجی مورد انتظار بعد علامت // → مشخص می شود.

console.log(factorial(8));
// → 40320

موفق باشید!