Π“Π»Π°Π²Π° 10
ΠœΠΎΠ΄ΡƒΠ»ΠΈ

НачинаСщ програмист пишС своитС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ Π΅Π΄Π½Π° ΠΌΡ€Π°Π²ΠΊΠ° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° Ρ…ΡŠΠ»ΠΌ, ΠΊΠ°Ρ‚ΠΎ Π΅Π΄Π½Π° цяла част навСднъТ, Π±Π΅Π· Π΄Π° мисли Π·Π° ΠΏΠΎ-голяма структура. НСговитС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚, ΠΊΠ°Ρ‚ΠΎ Ρ…Π»Π°Π±Π°Π² пясък. Π’Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·Π΄ΡŠΡ€ΠΆΠ°Ρ‚ извСстно Π²Ρ€Π΅ΠΌΠ΅, Π½ΠΎ Π°ΠΊΠΎ растат ΠΏΡ€Π΅ΠΊΠ°Π»Π΅Π½ΠΎ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈ Ρ‰Π΅ сС Ρ€Π°Π·ΠΏΠ°Π΄Π½Π°Ρ‚.

Осъзнавайки Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ, програмиста Ρ‰Π΅ Π·Π°ΠΏΠΎΡ‡Π½Π΅ Π΄Π° ΠΏΡ€Π΅ΠΊΠ°Ρ€Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ мислСйки Π·Π° структурата. НСговитС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π½Π΅ΠΏΠΎΠ΄Π²ΠΈΠΆΠ½ΠΎ структурирани, ΠΊΠ°Ρ‚ΠΎ скални скулптори. Π’Π΅ са солидни, Π½ΠΎ ΠΊΠΎΠ³Π°Ρ‚ΠΎ трябва Π΄Π° сС промСнят, Ρ‰Π΅ трябва Π΄Π° сС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈ усилиС.

ΠœΠ°ΠΉΡΡ‚ΠΎΡ€ΡŠΡ‚ програмист, Π·Π½Π°Π΅ ΠΊΠΎΠ³Π° Π΄Π° ΠΏΡ€ΠΈΠ»Π°Π³Π° структура ΠΈ ΠΊΠΎΠ³Π° Π΄Π° остави Π½Π΅Ρ‰Π°Ρ‚Π° Π² тяхната проста Ρ„ΠΎΡ€ΠΌΠ°. НСговитС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, са ΠΊΠ°Ρ‚ΠΎ Π³Π»ΠΈΠ½Π°, стСгнати ΠΈ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΊΠΎΠ²ΠΊΠΈ.”

Master Yuan-Ma, Книга Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅

Всяка ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° ΠΈΠΌΠ° Ρ„ΠΎΡ€ΠΌΠ°. Π’ малък ΠΌΠ°Ρ‰Π°Π±, Ρ‚Π°Π·ΠΈ Ρ„ΠΎΡ€ΠΌΠ° сС опрСдСля Ρ‡Ρ€Π΅Π· раздСлянС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ Π±Π»ΠΎΠΊΠΎΠ²Π΅Ρ‚Π΅ Π²ΡŠΡ‚Ρ€Π΅ Π² Ρ‚Π΅Π·ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡΡ‚ΠΈΡ‚Π΅ ΠΈΠΌΠ°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ свобода Π² Π½Π°Ρ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ Π΄Π° структурират своитС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ. Π€ΠΎΡ€ΠΌΠ°Ρ‚Π° слСдва ΠΏΠΎΠ²Π΅Ρ‡Π΅ вкуса Π½Π° програмиста, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½Π°Ρ‚Π° функционалност Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°.

ΠšΠΎΠ³Π°Ρ‚ΠΎ Π³Π»Π΅Π΄Π°Ρ‚Π΅ Π² ΠΏΠΎ-голяма ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, която Π΅ цяла, ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π·Π°ΠΏΠΎΡ‡Π²Π°Ρ‚ Π΄Π° сС смСсват с Ρ„ΠΎΠ½Π°. Π’Π°ΠΊΠΈΠ²Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° сС направят ΠΏΠΎ-Ρ€Π°Π·Π±ΠΈΡ€Π°Π΅ΠΌΠΈ, Π°ΠΊΠΎ ΠΈΠΌΠ°Ρ‚Π΅ ΠΏΠΎ-Π΄ΠΎΠ±ΡŠΡ€ Π½Π°Ρ‡ΠΈΠ½ Π·Π° организация.

ΠœΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ раздСлят ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π² Π³Ρ€ΡƒΠΏΠΈ ΠΎΡ‚ ΠΊΠΎΠ΄, ΠΊΠΎΠΈΡ‚ΠΎ ΠΏΠΎ някакъв ΠΊΡ€ΠΈΡ‚Π΅Ρ€ΠΈΠΉ са ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ. Π’Π°Π·ΠΈ Π³Π»Π°Π²Π° Ρ€Π°Π·Π³Π»Π΅ΠΆΠ΄Π° някои ΠΎΡ‚ ΠΏΠΎΠ»Π·ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚ΠΎΠ²Π° раздСлянС осигурява ΠΈ ΠΏΠΎΠΊΠ°Π·Π²Π° Ρ‚Π΅Ρ…Π½ΠΈΠΊΠΈ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π² JavaScript.

Π—Π°Ρ‰ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚

Има Ρ€Π΅Π΄ΠΈΡ†Π° ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ, ΠΏΠΎΡ€Π°Π΄ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ, Π°Π²Ρ‚ΠΎΡ€ΠΈ раздСлят своитС ΠΊΠ½ΠΈΠ³ΠΈ Π² Π³Π»Π°Π²ΠΈ ΠΈ Ρ€Π°Π·Π΄Π΅Π»ΠΈ. Π’Π΅Π·ΠΈ раздСлСния правят ΠΏΠΎ-лСсно Π·Π° Π΅Π΄Π½ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π» Π΄Π° Π²ΠΈΠ΄ΠΈ ΠΊΠ°ΠΊ Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½Π° ΠΊΠ½ΠΈΠ³Π°Ρ‚Π° ΠΈ Π΄Π° Π½Π°ΠΌΠΈΡ€Π° ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΈ части ΠΎΡ‚ нСя, ΠΊΠΎΠΈΡ‚ΠΎ Π³ΠΎ интСрСсуват. Π’Π΅ ΡΡŠΡ‰ΠΎ ΠΏΠΎΠΌΠ°Π³Π°Ρ‚ Π½Π° Π°Π²Ρ‚ΠΎΡ€Π°, ΠΊΠ°Ρ‚ΠΎ ΠΌΡƒ прСдоставят ясСн фокус Π·Π° всСки Ρ€Π°Π·Π΄Π΅Π».

ΠŸΠΎΠ»Π·ΠΈΡ‚Π΅ ΠΎΡ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π² няколко Ρ„Π°ΠΉΠ»Π° ΠΈΠ»ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ са сходни. Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π°Ρ‚Π° ΠΏΠΎΠΌΠ°Π³Π° Π½Π° Ρ…ΠΎΡ€Π°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ са Π·Π°ΠΏΠΎΠ·Π½Π°Ρ‚ΠΈ с ΠΊΠΎΠ΄Π°, Π΄Π° Π½Π°ΠΌΠΈΡ€Π°Ρ‚ Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ Ρ‚ΡŠΡ€ΡΡΡ‚ ΠΈ ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎ-лСсно Π·Π° програмист Π΄Π° ΠΏΠ°Π·ΠΈ Π½Π΅Ρ‰Π°, ΠΊΠΎΠΈΡ‚ΠΎ са тясно ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ Π·Π°Π΅Π΄Π½ΠΎ.

Някои ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ Π΄ΠΎΡ€ΠΈ са ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΈΡ€Π°Π½ΠΈ ΠΏΠΎ ΠΌΠΎΠ΄Π΅Π» Π½Π° Ρ‚Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π΅Π½ тСкст с ясно ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° Ρ†Π΅Π», с която читатСля сС Π½Π°ΡΡŠΡ€Ρ‡Π°Π²Π° Π΄Π° ΠΌΠΈΠ½Π΅ ΠΏΡ€Π΅Π· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΈ с ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΎΠ·Π° (ΠΊΠΎΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈ) въвСТда послСдоватСно Π² описаниСто Π½Π° ΠΊΠΎΠ΄Π°. Π’ΠΎΠ²Π° ΠΏΡ€Π°Π²ΠΈ Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΌΠ°Π»ΠΊΠΎ смущаващо, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° нСизвСстСн ΠΊΠΎΠ΄, Π½ΠΎ ΠΈΠΌΠ° Π½Π΅Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΠΊ, ΠΊΠΎΠΉΡ‚ΠΎ Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚Π° Π·Π° Π΄Π° сС създадС. Π’ΠΎΠ·ΠΈ стил сС Π½Π°Ρ€ΠΈΡ‡Π° Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ‚Π΅ Π² Ρ‚Π°Π·ΠΈ ΠΊΠ½ΠΈΠ³Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС считат Π·Π° Π³Ρ€Π°ΠΌΠΎΡ‚Π½ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ.

ΠšΠ°Ρ‚ΠΎ ΠΎΠ±Ρ‰ΠΎ ΠΏΡ€Π°Π²ΠΈΠ»ΠΎ, структуриранСто Π½Π° Π½Π΅Ρ‰Π°Ρ‚Π° ΠΈΠΌΠ° Ρ€Π°Π·Ρ…ΠΎΠ΄ΠΈ Π½Π° СнСргия. Π’ Ρ€Π°Π½Π½ΠΈΡ‚Π΅ Π΅Ρ‚Π°ΠΏΠΈ Π½Π° Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΎΡ‰Π΅ Π½Π΅ стС съвсСм сигурни ΠΊΠ°ΠΊΠ²ΠΎ, къдС ΠΈΠ»ΠΈ ΠΎΡ‚ какъв Π²ΠΈΠ΄ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π°, Π°Π· подкрСпям минималистичния бСзструктурСн ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. ΠŸΡ€ΠΎΡΡ‚ΠΎ слоТСтС всичко Ρ‚Π°ΠΌ, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π²ΠΈ Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ стабилизиратС ΠΊΠΎΠ΄Π°. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Π²ΠΈΠ΅ няма Π΄Π° Π³ΡƒΠ±ΠΈΡ‚Π΅ Π²Ρ€Π΅ΠΌΠ΅ Π·Π° прСмСстванС Π½Π° части ΠΎΡ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π½Π°Π·Π°Π΄ - Π½Π°ΠΏΡ€Π΅Π΄ ΠΈ няма Π΄Π° сС Π·Π°ΠΊΠ»ΡŽΡ‡ΠΈΡ‚Π΅ случайно Π² конструкция, която Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½Π΅ Π΅ част ΠΎΡ‚ Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°.

Namespacing

ΠŸΠΎΠ²Π΅Ρ‡Π΅Ρ‚ΠΎ ΡΡŠΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΈ Π΅Π·ΠΈΡ†ΠΈ Π·Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅ ΠΈΠΌΠ°Ρ‚ Π½ΠΈΠ²ΠΎ Π½Π° ΠΎΠ±Ρ…Π²Π°Ρ‚ ΠΌΠ΅ΠΆΠ΄Ρƒ Π³Π»ΠΎΠ±Π°Π»Π½ΠΎΡ‚ΠΎ (Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ всСки) ΠΈ Π»ΠΎΠΊΠ°Π»Π½ΠΎ (Π²ΠΈΠ΄ΠΈΠΌΠΎ ΠΎΡ‚ функцията Π² която Π΅), JavaScript няма Ρ‚Π°ΠΊΡŠΠ² ΠΎΠ±Ρ…Π²Π°Ρ‚. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, всичко ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° сС Π²ΠΈΠΆΠ΄Π° извън ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° функцията сС Π²ΠΈΠΆΠ΄Π° Π½Π° всякъдС Π΄ΠΎ Π½Π°ΠΉ-високото Π½ΠΈΠ²ΠΎ.

ИмСнно ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡŠΡ‚ със namespace Π·Π°ΠΌΡŠΡ€ΡΡΠ²Π°Π½Π΅Ρ‚ΠΎ с ΠΌΠ½ΠΎΠ³ΠΎ Π½Π΅ΡΠ²ΡŠΡ€Π·Π°Π½ ΠΊΠΎΠ΄, Π½Π°Π»Π°Π³Π° Π΄Π° сС сподСля Π΅Π΄ΠΈΠ½Π΅Π½ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ Π³Π»ΠΎΠ±Π°Π»Π½ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, Π·Π° ΠΊΠΎΠ΅Ρ‚ΠΎ спомСнахмС Π² Π“Π»Π°Π²Π° 4, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΎΠ±Π΅ΠΊΡ‚Π° Math бСшС Π΄Π°Π΄Π΅Π½, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° ΠΎΠ±Π΅ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ дСйства, ΠΊΠ°Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ» Ρ‡Ρ€Π΅Π· Π³Ρ€ΡƒΠΏΠΈΡ€Π°Π½Π΅ Π½Π° ΡΠ²ΡŠΡ€Π·Π°Π½Π° с ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ°Ρ‚Π° функционалност.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ, Ρ‡Π΅ JavaScript Π½Π΅ ΠΏΡ€Π΅Π΄Π²ΠΈΠΆΠ΄Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° дСйствитСлСн ΠΌΠΎΠ΄ΡƒΠ» всС ΠΎΡ‰Π΅, ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΈ Π·Π° създаванС Π½Π° ΠΏΡƒΠ±Π»ΠΈΡ‡Π½ΠΎ Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ subnamespaces ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° създаванС Π½Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½ΠΎ, Π»ΠΈΡ‡Π½ΠΎ пространство във Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎΡΡ‚Ρ‚Π° Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°. По късно Π² Ρ‚Π°Π·ΠΈ Π³Π»Π°Π²Π°, Π°Π· Ρ‰Π΅ обсъдя Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π°Π½Π΅ Π½Π° Ρ€Π°Π·ΡƒΠΌΠ½ΠΎ ΠΈ ΡƒΠ΄ΠΎΠ±Π½ΠΎ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π΅ Π½Π° namespace Π·Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π²ΡŠΡ€Ρ…Ρƒ ΠΏΡ€ΠΈΠΌΠΈΡ‚ΠΈΠ²Π½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ JavaScript Π½ΠΈ Π΄Π°Π²Π°.

ΠŸΠΎΠ²Ρ‚ΠΎΡ€Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°

Π’ β€œΠΏΠ»ΠΎΡΡŠΠΊβ€ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π΅ Π΅ структуриран, ΠΊΠ°Ρ‚ΠΎ Π½Π°Π±ΠΎΡ€ ΠΎΡ‚ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π½Π΅ Π΅ ясно ΠΊΠΎΠΈ части ΠΎΡ‚ ΠΊΠΎΠ΄Π° са Π½ΡƒΠΆΠ½ΠΈ, Π·Π° Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½Π° функция. Π’ моята ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° Π·Π° ΡˆΠΏΠΈΠΎΠ½ΠΈΡ€Π°Π½Π΅ Π½Π° Π²Ρ€Π°Π³ΠΎΠ²Π΅Ρ‚Π΅ (Π²ΠΈΠΆ Π“Π»Π°Π²Π° 9), Π°Π· написах функция Π·Π° Ρ‡Π΅Ρ‚Π΅Π½Π΅ Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅. Ако искам Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌ Ρ‚Π°Π·ΠΈ функция Π² Π΄Ρ€ΡƒΠ³ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, трябва Π΄Π° ΠΎΡ‚ΠΈΠ΄Π° ΠΈ Π΄Π° ΠΊΠΎΠΏΠΈΡ€Π°ΠΌ частитС ΠΎΡ‚ старата ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠΌΠ°ΠΌ Π½ΡƒΠΆΠ΄Π° ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с функционалноста ΠΈ Π΄Π° Π³ΠΈ поставя Π² Π½ΠΎΠ²Π°Ρ‚Π° си ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π°, Π°ΠΊΠΎ намСря Π³Ρ€Π΅ΡˆΠΊΠ° Π² ΠΊΠΎΠ΄Π°, Π°Π· Ρ‰Π΅ Π³ΠΎ оправя само Π² зависимост ΠΎΡ‚ Ρ‚ΠΎΠ²Π° Π² коя ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° работя Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° ΠΈ Π½Π°ΠΉ-вСроятно Ρ‰Π΅ забравя Π΄Π° Π³ΠΎ оправя Π² Π΄Ρ€ΡƒΠ³Π°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°.

Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ, ΠΈΠΌΠ°Ρ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Ρ‚Π°ΠΊΠΈΠ²Π° сподСлСни, Π΄ΡƒΠ±Π»ΠΈΡ€Π°Π½ΠΈ ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π° ΠΊΠΎΠ΄, постСпСнно Ρ‰Π΅ ΠΎΡ‚ΠΊΡ€ΠΈΠ΅Ρ‚Π΅, Ρ‡Π΅ Π³ΡƒΠ±ΠΈΡ‚Π΅ ΠΌΠ½ΠΎΠ³ΠΎ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ СнСргия Π·Π° Π΄Π° Π³ΠΈ мСститС ΠΈ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Ρ‚Π΅.

ΠŸΠΎΡΡ‚Π°Π²ΡΠ½Π΅Ρ‚ΠΎ Π½Π° самостоятСлни ΠΏΠ°Ρ€Ρ‡Π΅Ρ‚Π° функционалност Π² ΠΎΡ‚Π΄Π΅Π»Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π³ΠΈ ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎ-лСсно прослСдими Π·Π° обновяванС ΠΈ сподСлянС, Π·Π°Ρ‰ΠΎΡ‚ΠΎ всички Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ части ΠΎΡ‚ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ искатС Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅, ΠΊΠ°Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ» са Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ ΠΎΡ‚ ΡΡŠΡ‰ΠΈΡ дСйствитСлСн Ρ„Π°ΠΉΠ».

Π’Π°Π·ΠΈ идСя ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° ΠΎΡ‰Π΅ мощност, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΡΡ‚Π° ΠΌΠ΅ΠΆΠ΄Ρƒ ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ - Ρ‚ΠΎΠ²Π° ΠΊΠΎΠΉ ΠΌΠΎΠ΄ΡƒΠ» ΠΎΡ‚ ΠΊΠΎΠΉ зависи - са ΠΈΠ·Ρ€ΠΈΡ‡Π½ΠΎ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ. Π‘Π»Π΅Π΄ Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·ΠΈΡ€Π°Ρ‚Π΅ процСса Π·Π° инсталиранС ΠΈ обновяванС Π½Π° външни ΠΌΠΎΠ΄ΡƒΠ»ΠΈ (Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ).

Π Π°Π·ΡˆΠΈΡ€ΡΠ²Π°ΠΉΠΊΠΈ Ρ‚Π°Π·ΠΈ идСя ΠΎΡ‰Π΅ ΠΏΠΎΠ²Π΅Ρ‡Π΅, си прСдставСтС ΠΎΠ½Π»Π°ΠΉΠ½ услуга, която слСди ΠΈ разпрСдСля стотици хиляди Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ, ΠΊΠΎΠ΅Ρ‚ΠΎ Π²ΠΈ позволява Π΄Π° Ρ‚ΡŠΡ€ΡΠΈΡ‚Π΅ функционалноста, ΠΎΡ‚ която ΠΈΠΌΠ°Ρ‚Π΅ Π½ΡƒΠΆΠ΄Π° ΠΈ слСд ΠΊΠ°Ρ‚ΠΎ я Π½Π°ΠΌΠ΅Ρ€ΠΈΡ‚Π΅, вашия ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΡ‡Π½ΠΎ Π΄Π° я ΠΈΠ·Ρ‚Π΅Π³Π»ΠΈ.

Π’Π°ΠΊΠ°Π²Π° услуга ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°. Вя сС Π½Π°Ρ€ΠΈΡ‡Π° NPM (npmjs.org). NPM сС ΡΡŠΡΡ‚ΠΎΠΈ ΠΎΡ‚ ΠΎΠ½Π»Π°ΠΉΠ½ Π±Π°Π·Π° Π΄Π°Π½Π½ΠΈ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ инструмСнт Π·Π° изтСглянС ΠΈ обновяванС Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ зависи Π²Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°. Вя сС Ρ€ΠΎΠ΄ΠΈ Π² Ρ€Π΅Π·ΡƒΠ»Ρ‚Π°Ρ‚ Π½Π° Node.js срСда Π·Π° JavaScript, която Ρ‰Π΅ обсъдим Π² Π“Π»Π°Π²Π° 20, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС ΠΏΠΎΠ»Π΅Π·Π½Π° ΠΏΡ€ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π·Π° Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π°.

ΠžΡ‚Π΄Π΅Π»ΡΠ½Π΅

Π”Ρ€ΡƒΠ³Π° Π²Π°ΠΆΠ½Π° роля Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ Π΅ ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° части ΠΎΡ‚ ΠΊΠΎΠ΄ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³, ΠΏΠΎ ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½, ΠΊΠΎΠΉΡ‚ΠΎ интСрфСйситС Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ правят Π² Π“Π»Π°Π²Π° 6. Π•Π΄ΠΈΠ½ Π΄ΠΎΠ±Ρ€Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½ ΠΌΠΎΠ΄ΡƒΠ» Ρ‰Π΅ прСдостави интСрфСйс Π·Π° външСн ΠΊΠΎΠ΄, Π·Π° Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°. Въй ΠΊΠ°Ρ‚ΠΎ, ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ ΠΏΠΎΠ»ΡƒΡ‡Π°Π²Π° актуализация с ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ ΠΈ Π½ΠΎΠ²Π° функционалност, ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡΡ‚ интСрфСйс остава ΡΡŠΡ‰ΠΈΡ (Π°ΠΊΠΎ Π΅ стабилСн), Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΈ Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄Π° ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π½ΠΎΠ²Π°Ρ‚Π° ΠΏΠΎΠ΄ΠΎΠ±Ρ€Π΅Π½Π° вСрсия Π±Π΅Π· Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½ΠΈ Π² сСбС си.

Π˜ΠΌΠ°ΠΉΡ‚Π΅ Π² ΠΏΡ€Π΅Π΄Π²ΠΈΠ΄, Ρ‡Π΅ Π΅Π΄ΠΈΠ½ стабилСн интСрфСйс Π½Π΅ ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ няма Π½ΠΎΠ²ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ ΠΈΠ»ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π° сС добавят към Π½Π΅Π³ΠΎ. Π’ΠΎΠ²Π° просто ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π°Ρ‚Π° функционалност Π½Π΅ Π΅ отстранСна ΠΈ Π½Π΅ΠΉΠ½ΠΎΡ‚ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Π½Π΅ сС промСня.

Π•Π΄ΠΈΠ½ Π΄ΠΎΠ±ΡŠΡ€ интСрфСйс Π·Π° ΠΌΠΎΠ΄ΡƒΠ» трябва Π΄Π° Π΄Π°Π΄Π΅ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Π΄Π° растС Π±Π΅Π· Π΄Π° сС счупи стария интСрфСйс. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΈΠ·Π»Π°Π³Π°ΠΉΠΊΠΈ някои ΠΎΡ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ ΠΊΠΎΠ½Ρ†Π΅ΠΏΡ†ΠΈΠΈ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°, ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ·ΠΈ интСрфСйс ΠΏΠΎ-ΠΌΠΎΡ‰Π΅Π½ ΠΈ Π΄ΠΎΡΡ‚Π°Ρ‚ΡŠΡ‡Π½ΠΎ гъвкав, Π·Π° Π΄Π° сС ΠΏΡ€ΠΈΠ»Π°Π³Π° Π² ΡˆΠΈΡ€ΠΎΠΊ ΡΠΏΠ΅ΠΊΡ‚ΡŠΡ€ ΠΎΡ‚ ситуации.

Π—Π° интСрфСйси, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·Π»Π°Π³Π°Ρ‚ Π΅Π΄ΠΈΠ½Π½Π°, фиксирана концСпция, ΠΊΠ°Ρ‚ΠΎ Ρ‡Π΅Ρ‚Π΅Ρ† Π½Π° ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΠΎΠ½Π΅Π½ Ρ„Π°ΠΉΠ», Ρ‚ΠΎΠ·ΠΈ Π΄ΠΈΠ·Π°ΠΉΠ½ ΠΈΠ΄Π²Π° СстСствСно. Π—Π° Π΄Ρ€ΡƒΠ³ΠΈ, ΠΊΠ°Ρ‚ΠΎ тСкстов Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° ΠΌΠ½ΠΎΠ³ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ аспСкти, ΠΊΠΎΠΈΡ‚ΠΎ сС нуТдаят ΠΎΡ‚ външСн ΠΊΠΎΠ΄ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ(ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅, стайлинг, дСйствия Π½Π° ΠΏΠΎΡ‚Ρ€Π΅Π±ΠΈΡ‚Π΅Π» ΠΈ Ρ‚.Π½.) сС изисква Π²Π½ΠΈΠΌΠ°Ρ‚Π΅Π»Π½ΠΎ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½Π΅.

ИзползванС Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΠΈ, ΠΊΠ°Ρ‚ΠΎ namespaces

Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ са СдинствСнитС Π½Π΅Ρ‰Π° Π² JavaScript, ΠΊΠΎΠΈΡ‚ΠΎ ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ Π½ΠΎΠ² ΠΎΠ±Ρ…Π²Π°Ρ‚. Π’Π°ΠΊΠ° Ρ‡Π΅, Π°ΠΊΠΎ искамС Π½Π°ΡˆΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄Π° ΠΈΠΌΠ°Ρ‚ свой собствСн Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€, Ρ‰Π΅ трябва Π΄Π° Π³ΠΈ основСм Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

ΠŸΠΎΠΌΠΈΡΠ»Π΅Ρ‚Π΅ Π·Π° Ρ‚ΠΎΠ·ΠΈ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ», Π·Π° асоцииранС Π½Π° ΠΈΠΌΠ΅Π½Π° с Π½ΠΎΠΌΠ΅Ρ€Π° Π·Π° Π΄Π½ΠΈΡ‚Π΅ ΠΎΡ‚ сСдмицата, Π²ΡŠΡ€Π½Π°Ρ‚ΠΈ ΠΎΡ‚ getDay ΠΌΠ΅Ρ‚ΠΎΠ΄Π° Π½Π° Date ΠΎΠ±Π΅ΠΊΡ‚Π°:

var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
             "Thursday", "Friday", "Saturday"];
function dayName(number) {
  return names[number];
}

console.log(dayName(1));
// β†’ Monday

Ѐункцията dayName Π΅ част ΠΎΡ‚ интСрфСйса Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°, Π½ΠΎ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° names Π½Π΅ Π΅. Π‘ΠΈΡ…ΠΌΠ΅ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡Π΅Π»ΠΈ Π΄Π° Π½Π΅ я изсипвамС Π² глобалния ΠΎΠ±Ρ…Π²Π°Ρ‚.

МоТСм Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΠΌ Ρ‚ΠΎΠ²Π°:

var dayName = function() {
  var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday"];
  return function(number) {
    return names[number];
  };
}();

console.log(dayName(3));
// β†’ Wednesday

Π‘Π΅Π³Π° names Π΅ Π»ΠΎΠΊΠ°Π»Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° Π² (Π°Π½ΠΎΠ½ΠΈΠΌΠ½Π°) функция. Π’Π°Π·ΠΈ функция сС създава ΠΈ Π²Π΅Π΄Π½Π°Π³Π° сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΈ Π½Π΅ΠΉΠ½Π°Ρ‚Π° Π²ΡŠΡ€Π½Π°Ρ‚Π° стойност (дСйствитСлната dayName функция) сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°. НиС ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° ΠΈΠΌΠ°ΠΌΠ΅ страници ΠΈ страници ΠΊΠΎΠ΄ Π² Ρ‚Π°Π·ΠΈ функция, със сто Π»ΠΎΠΊΠ°Π»Π½ΠΈ ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ ΠΈ всички Ρ‚Π΅ Ρ‰Π΅ Π±ΡŠΠ΄Π°Ρ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ΠΈ Π·Π° нашия ΠΌΠΎΠ΄ΡƒΠ», Π²ΠΈΠ΄ΠΈΠΌΠΈ Π·Π° самия ΠΌΠΎΠ΄ΡƒΠ», Π½ΠΎ Π½Π΅Π²ΠΈΠ΄ΠΈΠΌΠΈ ΠΎΡ‚ външния ΠΊΠΎΠ΄.

МоТСм Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ ΠΌΠΎΠ΄Π΅Π» Π΄Π° ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°ΠΌΠ΅ ΠΊΠΎΠ΄ изцяло ΠΎΡ‚ външния свят. БлСдващия ΠΌΠΎΠ΄ΡƒΠ» рСгистрира стойност Π½Π° ΠΊΠΎΠ½Π·ΠΎΠ»Π°Ρ‚Π°, Π½ΠΎ Π²ΡΡŠΡ‰Π½ΠΎΡΡ‚ Π½Π΅ прСдоставя Π½ΠΈΠΊΠ°ΠΊΠ²ΠΈ стойности Π·Π° ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ към Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

(function() {
  function square(x) { return x * x; }
  var hundred = 100;

  console.log(square(hundred));
})();
// β†’ 10000

Π’ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ просто ΠΈΠ·Π²Π΅ΠΆΠ΄Π° ΠΊΠ²Π°Π΄Ρ€Π°Ρ‚Π° Π½Π° 100, Π½ΠΎ Π² рСалния свят Ρ‚ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π΅Π΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ», ΠΊΠΎΠΉΡ‚ΠΎ добавя ΠΌΠ΅Ρ‚ΠΎΠ΄ към някой ΠΏΡ€ΠΎΡ‚ΠΎΡ‚ΠΈΠΏ ΠΈΠ»ΠΈ създава Π½Π΅Ρ‰ΠΎ Π² ΡƒΠ΅Π± страница. Π’ΠΎΠΉ Π΅ ΡƒΠ²ΠΈΡ‚ във функция, Π·Π° Π΄Π° ΠΏΠΎΠΏΡ€Π΅Ρ‡ΠΈ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΎ Π΄Π° Π·Π°ΠΌΡŠΡ€ΡΡΡ‚ глобалния ΠΎΠ±Ρ…Π²Π°Ρ‚.

Π—Π°Ρ‰ΠΎ ΡƒΠ²ΠΈΠ²Π°ΠΌΠ΅ namespace Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ Π² Ρ‡ΠΈΡ„Ρ‚ скоби? Π’ΠΎΠ²Π° Π΅ ΡΠ²ΡŠΡ€Π·Π°Π½ΠΎ с ΠΏΡ€ΠΈΡƒΠΌΠΈΡ†Π° Π² синтаксиса Π½Π° JavaScript. Ако ΠΈΠ·Ρ€Π°Π·Π° Π·Π°ΠΏΠΎΡ‡Π²Π° с ΠΊΠ»ΡŽΡ‡ΠΎΠ²Π°Ρ‚Π° Π΄ΡƒΠΌΠ° function, Ρ‚ΠΎΠ²Π° Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»Π΅Π½ ΠΈΠ·Ρ€Π°Π·. ΠžΠ±Π°Ρ‡Π΅, Π°ΠΊΠΎ изявлСниС Π·Π°ΠΏΠΎΡ‡Π²Π° с function, Ρ‚ΠΎΠ²Π° Π΅ дСкларация Π½Π° функция, която изисква ΠΈΠΌΠ΅ ΠΈ Π½Π΅ Π΅ ΠΈΠ·Ρ€Π°Π·, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·Π²ΠΈΠΊΠ°, ΠΊΠ°Ρ‚ΠΎ сС Π½Π°ΠΏΠΈΡˆΠ°Ρ‚ скоби слСд Π½Π΅Π³ΠΎ. МоТС Π΄Π° мислитС Π·Π° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½ΠΈΡ‚Π΅ ΡƒΠ²ΠΈΠ²Π°Ρ‰ΠΈ скоби, ΠΊΠ°Ρ‚ΠΎ Ρ‚Ρ€ΠΈΠΊ Π΄Π° сС ΠΏΡ€ΠΈΠ½ΡƒΠ΄ΠΈ функцията Π΄Π° сС Ρ‚ΡŠΠ»ΠΊΡƒΠ²Π°, ΠΊΠ°Ρ‚ΠΎ ΠΈΠ·Ρ€Π°Π·.

ΠžΠ±Π΅ΠΊΡ‚ΠΈ, ΠΊΠ°Ρ‚ΠΎ интСрфСйс

Π‘Π΅Π³Π° си прСдставСтС, Ρ‡Π΅ искамС Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ ΠΎΡ‰Π΅ Π΅Π΄Π½Π° функция Π² нашия ΠΌΠΎΠ΄ΡƒΠ» Π½Π° сСдмицата, която ΠΏΡ€Π΅Ρ…Π²ΡŠΡ€Π»Ρ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° дСня Π² Π½ΠΎΠΌΠ΅Ρ€. НС ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° Π²ΡŠΡ€Π½Π΅ΠΌ функция Π²Π΅Ρ‡Π΅, трябва Π΄Π° ΡƒΠ²ΠΈΠ΅ΠΌ Π΄Π²Π΅Ρ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ‚.

var weekDay = function() {
  var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday"];
  return {
    name: function(number) { return names[number]; },
    number: function(name) { return names.indexOf(name); }
  };
}();

console.log(weekDay.name(weekDay.number("Sunday")));
// β†’ Sunday

Π—Π° ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΡΡŠΠ±ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° всички изнасяни стойности Π² ΠΎΠ±Π΅ΠΊΡ‚ Π² края Π½Π° функцията, става Π½Π΅ΡƒΠ΄ΠΎΠ±Π½ΠΎ, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ ΠΌΠ½ΠΎΠ³ΠΎ ΠΎΡ‚ изнСсСнитС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈΠΌΠ° вСроятност Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΠΎΡ‡ΠΈΡ‚Π°ΠΌΠ΅ Π΄Π° Π³ΠΈ напишСм някъдС Π΄Ρ€ΡƒΠ³Π°Π΄Π΅, ΡΠ²ΡŠΡ€Π·Π°Π½ΠΈ с Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ ΠΊΠΎΠ΄. Π£Π΄ΠΎΠ±Π½Π° Π°Π»Ρ‚Π΅Ρ€Π½Π°Ρ‚ΠΈΠ²Π° Π΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ (условно Π½Π°Ρ€Π΅Ρ‡Π΅Π½ exports) ΠΈ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΠΌ свойства Π·Π° всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ опрСдСлямС Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ трябва Π΄Π° бъдС изнСсСно. Π’ слСдващия ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΌΠΎΠ΄ΡƒΠ» функцията Π²Π·Π΅ΠΌΠ° интСрфСйс Π½Π° ΠΎΠ±Π΅ΠΊΡ‚, ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚, позволявайки Π½Π° ΠΊΠΎΠ΄Π° извън функцията Π΄Π° Π³ΠΎ създадС ΠΈ ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°. (Извън функцията, this сС отнася Π΄ΠΎ глобалния ΠΎΠ±Ρ…Π²Π°Ρ‚ Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π°).

(function(exports) {
  var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday"];

  exports.name = function(number) {
    return names[number];
  };
  exports.number = function(name) {
    return names.indexOf(name);
  };
})(this.weekDay = {});

console.log(weekDay.name(weekDay.number("Saturday")));
// β†’ Saturday

ΠžΡ‚Π΄Π΅Π»ΡΠ½Π΅ ΠΎΡ‚ глобалния ΠΎΠ±Ρ…Π²Π°Ρ‚

ΠŸΡ€Π΅Π΄ΠΈΡˆΠ½ΠΈΡΡ‚ ΠΌΠΎΠ΄Π΅Π» ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΡ‚ JavaScript ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΏΡ€Π΅Π΄Π½Π°Π·Π½Π°Ρ‡Π΅Π½ΠΈ Π·Π° Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π°. ΠœΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Ρ‰Π΅ рСгистрира Π΅Π΄Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° ΠΈ Ρ‰Π΅ ΡƒΠ²ΠΈΠ΅ нСйния ΠΊΠΎΠ΄ във функция, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΈΠΌΠ° своС собствСно namespace. Но Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π» всС ΠΎΡ‰Π΅ създава ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈ, Π°ΠΊΠΎ сС случи мноТСство ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄Π° ΠΈΠΌΠ°Ρ‚ прСтСнция към ΡΡŠΡ‰ΠΎΡ‚ΠΎ ΠΈΠΌΠ΅ ΠΈΠ»ΠΈ Π°ΠΊΠΎ искатС Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈΡ‚Π΅ Π΄Π²Π΅ вСрсии Π½Π° Π΄Π°Π΄Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ» успорСдно Π΅Π΄Π½Π° Π΄ΠΎ Π΄Ρ€ΡƒΠ³Π°.

Π‘ ΠΌΠ°Π»ΠΊΠΎ Π²Ρ€ΡŠΠ·ΠΊΠΈ, ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° създадСм систСма, която позволява Π½Π° Π΅Π΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ» Π΄Π° поиска Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ интСрфСйса Π½Π° ΠΎΠ±Π΅ΠΊΡ‚ ΠΎΡ‚ Π΄Ρ€ΡƒΠ³ ΠΌΠΎΠ΄ΡƒΠ», Π±Π΅Π· Π΄Π° ΠΌΠΈΠ½Π°Π²Π° ΠΏΡ€Π΅Π· глобалния ΠΎΠ±Ρ…Π²Π°Ρ‚. ΠΠ°ΡˆΠ°Ρ‚Π° Ρ†Π΅Π» Π΅ require функция, Π½Π° която, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΏΠΎΠ΄Π°Π΄Π΅ ΠΈΠΌΠ΅Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°, Ρ‰Π΅ Π·Π°Ρ€Π΅Π΄ΠΈ Ρ„Π°ΠΉΠ» (ΠΎΡ‚ диск ΠΈΠ»ΠΈ ΠΎΡ‚ ΠΌΡ€Π΅ΠΆΠ°Ρ‚Π°, Π² зависимост ΠΎΡ‚ ΠΏΠ»Π°Ρ‚Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π° Π²ΡŠΡ€Ρ…Ρƒ Ρ‰Π΅ сС изпълнява) ΠΈ Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½Π°Ρ‚Π° стойност Π½Π° интСрфСйса.

Π’ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ Ρ€Π΅ΡˆΠ°Π²Π° ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠΈΡ‚Π΅, спомСнати ΠΏΠΎ-Ρ€Π°Π½ΠΎ ΠΈ ΠΈΠΌΠ° Π΄ΠΎΠΏΡŠΠ»Π½ΠΈΡ‚Π΅Π»Π½Π° ΠΏΠΎΠ»Π·Π° Π·Π° Π²Π·Π΅ΠΌΠ°Π½Π΅ Π½Π° зависимости Π² Π½Π°ΡˆΠ°Ρ‚Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΏΡ€Π°Π²ΠΈ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ случайно Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° някой Π΄Ρ€ΡƒΠ³ ΠΌΠΎΠ΄ΡƒΠ» Π±Π΅Π· Π΄Π° сС посочва, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π½Π΅Π³ΠΎ.

Π—Π° require ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° ΠΎΡ‚ Π΄Π²Π΅ Π½Π΅Ρ‰Π°. ΠŸΡŠΡ€Π²ΠΎ Π½ΠΈ трябва функция readFile, която Π²Ρ€ΡŠΡ‰Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Π΄Π°Π΄Π΅Π½ Ρ„Π°ΠΉΠ», ΠΊΠ°Ρ‚ΠΎ string. (Π’Π°Π·ΠΈ функция Π½Π΅ Π΅ Π½Π°Π»ΠΈΡ‡Π½Π° Π² стандартния JavaScript, Π½ΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ срСди Π·Π° JavaScript, ΠΊΠ°Ρ‚ΠΎ Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ ΠΈ Node.js, прСдоставят свои собствСни Π½Π°Ρ‡ΠΈΠ½ΠΈ Π·Π° Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅. Π—Π° сСга Π½Π΅ΠΊΠ° просто сС прСструвамС, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ Ρ‚Π°Π·ΠΈ функция.) Π’Ρ‚ΠΎΡ€ΠΎ, трябва дСйствитСлно Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° изпълним Ρ‚ΠΎΠ·ΠΈ string, ΠΊΠ°Ρ‚ΠΎ JavaScript ΠΊΠΎΠ΄.

ΠžΡ†Π΅Π½ΡΠ²Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄

Има няколко Π½Π°Ρ‡ΠΈΠ½Π° Π΄Π° сС Π²Π·Π΅ΠΌΠ°Ρ‚ Π΄Π°Π½Π½ΠΈ ΠΎΡ‚ string ΠΊΠΎΠ΄ ΠΈ Π΄Π° сС стартират, ΠΊΠ°Ρ‚ΠΎ част ΠΎΡ‚ настоящата ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°.

Най-очСвидният Π½Π°Ρ‡ΠΈΠ½ Π΅ със спСциалният ΠΎΠΏΠ΅Ρ€Π°Ρ‚ΠΎΡ€ eval, ΠΊΠΎΠΉΡ‚ΠΎ Ρ‰Π΅ изпълни ΠΏΠΎΡ€Π΅Π΄ΠΈΡ†Π°Ρ‚Π° ΠΎΡ‚ ΠΊΠΎΠ΄ Π² тСкущия ΠΎΠ±Ρ…Π²Π°Ρ‚. Π’ΠΎΠ²Π° ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π΅ лоша идСя, Π·Π°Ρ‰ΠΎΡ‚ΠΎ Ρ‰Π΅ сС Ρ€Π°Π·ΠΏΠ°Π΄Π½Π΅ ΠΎΡ‚ някоС ΠΎΡ‚ Π½ΠΎΡ€ΠΌΠ°Π»Π½ΠΈΡ‚Π΅ свойства, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ ΠΈΠΌΠ°Ρ‚ ΠΎΠ±Ρ…Π²Π°Ρ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ·ΠΎΠ»ΠΈΡ€Π°Ρ‚ ΠΎΡ‚ външния свят.

function evalAndReturnX(code) {
  eval(code);
  return x;
}

console.log(evalAndReturnX("var x = 2"));
// β†’ 2

По Π΄ΠΎΠ±ΡŠΡ€ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€Π°Π½Π΅ Π½Π° Π΄Π°Π½Π½ΠΈ, ΠΊΠ°Ρ‚ΠΎ ΠΊΠΎΠ΄, Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Function конструктора. Π’ΠΎΠΉ Π²Π·Π΅ΠΌΠ° Π΄Π²Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°: string, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ със Π·Π°ΠΏΠ΅Ρ‚Π°ΠΈ списък ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° Π½Π° Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ ΠΈ string, ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‰ тяло Π½Π° функция.

var plusOne = new Function("n", "return n + 1;");
console.log(plusOne(4));
// β†’ 5

Π’ΠΎΠ²Π° Π΅ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΎΠ½ΠΎΠ²Π°, ΠΎΡ‚ ΠΊΠΎΠ΅Ρ‚ΠΎ ΠΈΠΌΠ°ΠΌΠ΅ Π½ΡƒΠΆΠ΄Π° Π·Π° Π½Π°ΡˆΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. НиС ΠΌΠΎΠΆΠ΅ΠΌ просто Π΄Π° ΡƒΠ²ΠΈΠ΅ΠΌ ΠΊΠΎΠ΄Π° Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Π² Π΅Π΄Π½Π° функция ΠΈ ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° Ρ‚Π°Π·ΠΈ функция Π΄Π° станС ΠΎΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° нашия ΠΌΠΎΠ΄ΡƒΠ».

Require

Π‘Π»Π΅Π΄Π²Π°Ρ‰ΠΎΡ‚ΠΎ Π΅ ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ изпълнСниС Π½Π° require:

function require(name) {
  var code = new Function("exports", readFile(name));
  var exports = {};
  code(exports);
  return exports;
}

console.log(require("weekDay").name(1));
// β†’ Monday

Въй ΠΊΠ°Ρ‚ΠΎ, new Function конструктора ΡƒΠ²ΠΈΠ²Π° ΠΊΠΎΠ΄a Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° във функция, Π½ΠΈΠ΅ Π½Π΅ трябва Π΄Π° пишСм функция Π·Π° ΠΎΠΏΠ°ΠΊΠΎΠ²Π°Π½Π΅ Π½Π° namespace функция Π² самия Ρ„Π°ΠΉΠ» Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°. И Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ, ΠΏΡ€Π°Π²ΠΈΠΌ exports Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π·Π° ΠΌΠΎΠ΄ΡƒΠ» функцията, самия ΠΌΠΎΠ΄ΡƒΠ» Π½Π΅ трябва Π΄Π° Π³ΠΎ Π΄Π΅ΠΊΠ»Π°Ρ€ΠΈΡ€Π°. Π’ΠΎΠ²Π° ΠΏΡ€Π΅ΠΌΠ°Ρ…Π²Π° ΠΌΠ½ΠΎΠ³ΠΎ Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚Π°Ρ€Π½ΠΈ Π½Π΅Ρ‰Π° ΠΎΡ‚ нашия ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅Π½ ΠΌΠΎΠ΄ΡƒΠ».

var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
             "Thursday", "Friday", "Saturday"];

exports.name = function(number) {
  return names[number];
};
exports.number = function(name) {
  return names.indexOf(name);
};

ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΌΠ΅ Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠ΄Π΅Π», Π΅Π΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ» ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ Π·Π°ΠΏΠΎΡ‡Π²Π° с няколко Π΄Π΅ΠΊΠ»Π°Ρ€Π°Ρ†ΠΈΠΈ Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²ΠΈ, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ зависят.

var weekDay = require("weekDay");
var today = require("today");

console.log(weekDay.name(today.dayNumber()));

ΠžΠΏΡ€ΠΎΡΡ‚Π΅Π½ΠΎΡ‚ΠΎ изпълнСниС Π½Π° require Π΄Π°Π΄Π΅Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ²Π°, ΠΈΠΌΠ° няколко ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ°. ΠžΡ‚ Π΅Π΄Π½Π° страна, Ρ‚ΠΎ Ρ‰Π΅ Π·Π°Ρ€Π΅Π΄ΠΈ ΠΈ стартира ΠΌΠΎΠ΄ΡƒΠ» всСки ΠΏΡŠΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° require, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π°ΠΊΠΎ няколко ΠΌΠΎΠ΄ΡƒΠ»Π° ΠΈΠΌΠ°Ρ‚ ΡΡŠΡ‰Π°Ρ‚Π° зависимост ΠΈΠ»ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅Ρ‚ΠΎ към require сС постави Π²ΡŠΡ‚Ρ€Π΅ във функция, която сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ, сС Π³ΡƒΠ±ΠΈ Π²Ρ€Π΅ΠΌΠ΅ ΠΈ СнСргия.

Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π΅ΡˆΠ΅Π½ΠΎ Ρ‡Ρ€Π΅Π· ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ Π²Π΅Ρ‡Π΅ са Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ Π² ΠΎΠ±Π΅ΠΊΡ‚ ΠΈ просто Π²Ρ€ΡŠΡ‰Π°ΠΌΠ΅ ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰Π°Ρ‚Π° стойност, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ Π·Π°Ρ€Π΅Π΄Π΅Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡ€Π°Ρ‚Π½ΠΎ.

Вторият ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅, Ρ‡Π΅ Π½Π΅ Π΅ възмоТно Π·Π° ΠΌΠΎΠ΄ΡƒΠ» Π΄Π° изнася Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ стойност, Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° ΠΎΡ‚ exports ΠΎΠ±Π΅ΠΊΡ‚Π°, ΠΊΠ°Ρ‚ΠΎ функция. НапримСр, ΠΎΡ‚ Π΅Π΄ΠΈΠ½ ΠΌΠΎΠ΄ΡƒΠ» ΠΌΠΎΠΆΠ΅ Π΄Π° искатС Π΄Π° СкспортиратС само конструктора Π½Π° Ρ‚ΠΈΠΏΠ° Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π³ΠΎ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°. Π’ΠΎΡ‡Π½ΠΎ сСга, Ρ‚ΠΎΠΉ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Ρ‚ΠΎΠ²Π°, Π·Π°Ρ‰ΠΎΡ‚ΠΎ require Π²ΠΈΠ½Π°Π³ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° exports ΠΎΠ±Π΅ΠΊΡ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ създава Скспортната стойност.

Π’Ρ€Π°Π΄ΠΈΡ†ΠΈΠΎΠ½Π½ΠΎΡ‚ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π·Π° Ρ‚ΠΎΠ²Π° Π΅ Π΄Π° сС осигури ΠΌΠΎΠ΄ΡƒΠ» с Π΄Ρ€ΡƒΠ³Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° module, която Π΅ ΠΎΠ±Π΅ΠΊΡ‚, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠΌΠ° свойството exports. Π’ΠΎΠ²Π° свойство ΠΏΡŠΡ€Π²ΠΎΠ½Π°Ρ‡Π°Π»Π½ΠΎ посочва ΠΏΡ€Π°Π·Π΅Π½ ΠΎΠ±Π΅ΠΊΡ‚, създадСн ΠΎΡ‚ require, Π½ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π·Π°ΠΌΠ΅Π½Π΅Π½ с Π΄Ρ€ΡƒΠ³Π° стойност, Π·Π° Π΄Π° Скспортира Π½Π΅Ρ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ.

function require(name) {
  if (name in require.cache)
    return require.cache[name];

  var code = new Function("exports, module", readFile(name));
  var exports = {}, module = {exports: exports};
  code(exports, module);

  require.cache[name] = module.exports;
  return module.exports;
}
require.cache = Object.create(null);

Π‘Π΅Π³Π° ΠΈΠΌΠ°ΠΌΠ΅ ΠΌΠΎΠ΄ΡƒΠ»Π½Π° систСма, която ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π΅Π΄Π½Π° Π³Π»ΠΎΠ±Π°Π»Π½Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π° (require), Π·Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ Π΄Π° сС Π½Π°ΠΌΠΈΡ€Π°Ρ‚ ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π²Π·Π°ΠΈΠΌΠ½ΠΎ, Π±Π΅Π· Π΄Π° ΠΌΠΈΠ½Π°Π²Π°Ρ‚ ΠΏΡ€Π΅Π· глобалния ΠΎΠ±Ρ…Π²Π°Ρ‚.

Π’ΠΎΠ·ΠΈ стил Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π½Π° систСма сС Π½Π°Ρ€ΠΈΡ‡Π° CommonJS modules, слСд псСвдо стандарт, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΡ€ΡŠΠ² Π³ΠΎ Π΅ посочил. Вя Π΅ Π²Π³Ρ€Π°Π΄Π΅Π½Π° систСма Π² Node.js. Π Π΅Π°Π»Π½ΠΈΡ‚Π΅ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ правят ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ²Π΅Ρ‡Π΅ ΠΎΡ‚ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ…. Най-Π²Π°ΠΆΠ½ΠΎΡ‚ΠΎ Π΅, Ρ‡Π΅ Ρ‚Π΅ ΠΈΠΌΠ°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π΅Π½ Π½Π°Ρ‡ΠΈΠ½ Π·Π° ΠΏΡ€Π΅ΠΌΠΈΠ½Π°Π²Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ» към дСйствитСлна част Π½Π° ΠΊΠΎΠ΄, ΠΊΠΎΠΉΡ‚ΠΎ позволява ΠΈ Π΄Π²Π΅Ρ‚Π΅: ΠΏΡŠΡ‚ΠΈΡ‰Π° ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, ΠΏΠΎ ΠΎΡ‚Π½ΠΎΡˆΠ΅Π½ΠΈΠ΅ Π½Π° Ρ‚Π΅ΠΊΡƒΡ‰ΠΈΡ‚Π΅ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ сочат Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ към Π»ΠΎΠΊΠ°Π»Π½ΠΎ инсталиранитС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Π‘Π°Π²Π½ΠΎ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ, Ρ‡Π΅ Π΅ възмоТно ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ Π½Π° CommonJS стил ΠΏΡ€ΠΈ писанС Π½Π° JavaScript Π·Π° Π±Ρ€Π°ΡƒΠ·ΡŠΡ€ΠΈ, Ρ‚ΠΎΠΉ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π°Π½Π³Π°ΠΆΠΈΡ€Π°Ρ‰. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°Ρ‚Π° Π·Π° Ρ‚ΠΎΠ²Π° Π΅, Ρ‡Π΅ Ρ‡Π΅Ρ‚Π΅Π½Π΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ» (ΠΌΠΎΠ΄ΡƒΠ») ΠΎΡ‚ Π˜Π½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ Π΅ ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-Π±Π°Π²Π½ΠΎ, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Ρ‡Π΅Ρ‚Π΅Π½Π΅ ΠΎΡ‚ Ρ‚Π²ΡŠΡ€Π΄ΠΈΡ диск. Π”ΠΎΠΊΠ°Ρ‚ΠΎ скрипт сС изпълнява Π² Π±Ρ€Π°ΡƒΠ·ΡŠΡ€Π°, Π½ΠΈΡ‰ΠΎ Π΄Ρ€ΡƒΠ³ΠΎ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС случи Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚ страницата, Π½Π° която Ρ‚ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚ΠΈ, ΠΏΠΎ ΠΏΡ€ΠΈΡ‡ΠΈΠ½ΠΈ ΠΊΠΎΠΈΡ‚ΠΎ Ρ‰Π΅ станат извСстни Π² Π“Π»Π°Π²Π° 14. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΏΡ€ΠΈ всяко ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ Π½Π° require Π΄Π° ΠΎΡ‚ΠΈΠ΄Π΅ ΠΈ ΠΈΠ·Π²Π°Π΄ΠΈ Π½Π΅Ρ‰ΠΎ ΠΎΡ‚ някакъв Π΄Π°Π»Π΅Ρ‡Π΅Π½ ΡƒΠ΅Π± ΡΡŠΡ€Π²ΡŠΡ€, страницата Ρ‰Π΅ Π·Π°ΠΌΡ€ΡŠΠ·Π½Π΅ Π·Π° Π±ΠΎΠ»Π΅Π·Π½Π΅Π½ΠΎ дълго Π²Ρ€Π΅ΠΌΠ΅ ΠΏΡ€ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° скриптовСтС.

Π•Π΄ΠΈΠ½ Π½Π°Ρ‡ΠΈΠ½ Π΄Π° сС справитС с Ρ‚ΠΎΠ·ΠΈ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌ Π΅ Π΄Π° стартиратС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°, ΠΊΠ°Ρ‚ΠΎ Browserify Π² ΠΊΠΎΠ΄Π° си, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° стС Π³ΠΎ Π²Ρ€ΡŠΡ‡ΠΈΠ»ΠΈ Π½Π° ΡƒΠ΅Π± страницата. Вя Ρ‰Π΅ Π³Π»Π΅Π΄Π° Π·Π° извиквания към require, Ρ€Π΅ΡˆΠ°Π²Π°ΠΉΠΊΠΈ всички зависимости ΠΈ ΡΡŠΠ±ΠΈΡ€Π°ΠΉΠΊΠΈ нСобходимия ΠΊΠΎΠ΄ Π² Π΅Π΄ΠΈΠ½ голям Ρ„Π°ΠΉΠ». Π’ самия сайт просто ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π·Π°Ρ€Π΅Π΄ΠΈ Ρ‚ΠΎΠ·ΠΈ Ρ„Π°ΠΉΠ», Π·Π° Π΄Π° ΠΏΠΎΠ»ΡƒΡ‡ΠΈ всички ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, ΠΎΡ‚ ΠΊΠΎΠΈΡ‚ΠΎ сС Π½ΡƒΠΆΠ΄Π°Π΅.

Π”Ρ€ΡƒΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π΅ Π΄Π° ΡƒΠ²ΠΈΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄Π°, ΠΊΠΎΠΉΡ‚ΠΎ ΠΈΠ·Π³Ρ€Π°ΠΆΠ΄Π° вашия ΠΌΠΎΠ΄ΡƒΠ» във функция, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ°Ρ‚Π° Π·Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ», ΠΏΡŠΡ€Π²ΠΎ Π΄Π° Π·Π°Ρ€Π΅Π΄ΠΈ Π½Π΅Π³ΠΎΠ²ΠΈΡ‚Π΅ зависимости във Ρ„ΠΎΠ½ΠΎΠ² Ρ€Π΅ΠΆΠΈΠΌ ΠΈ слСд Ρ‚ΠΎΠ²Π° Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ° функцията Π·Π° ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ», слСд ΠΊΠ°Ρ‚ΠΎ зависимоститС са Π²Π΅Ρ‡Π΅ Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ. Π’ΠΎΠ²Π° Π΅ систСмата Π·Π° асинхронни ΠΌΠΎΠ΄ΡƒΠ»ΠΈ - Asynchronous Module Definition (AMD).

ΠΠ°ΡˆΠ°Ρ‚Π° Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠ° със зависимости, Ρ‰Π΅ ΠΈΠ·Π³Π»Π΅ΠΆΠ΄Π° Ρ‚Π°ΠΊΠ° Π² AMD:

define(["weekDay", "today"], function(weekDay, today) {
  console.log(weekDay.name(today.dayNumber()));
});

Ѐункцията define Π΅ Π² Ρ†Π΅Π½Ρ‚ΡŠΡ€Π° Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄. Вя Π²Π·Π΅ΠΌΠ° ΠΏΡŠΡ€Π²ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ» с масив ΠΎΡ‚ ΠΈΠΌΠ΅Π½Π° ΠΈ слСд Ρ‚ΠΎΠ²Π° функция, която ΠΏΡ€ΠΈΠ΅ΠΌΠ° само Π΅Π΄ΠΈΠ½ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ Π·Π° всяка зависимост. Вя Ρ‰Π΅ Π·Π°Ρ€Π΅Π΄ΠΈ зависимоститС(Π°ΠΊΠΎ ΠΎΡ‰Π΅ Π½Π΅ са Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ) във Ρ„ΠΎΠ½ΠΎΠ² Ρ€Π΅ΠΆΠΈΠΌ, ΠΊΠΎΠ΅Ρ‚ΠΎ позволява Π½Π° страницата Π΄Π° ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅Ρ‚Π΅ сС изтСглят. Π‘Π»Π΅Π΄ ΠΊΠ°Ρ‚ΠΎ, всички зависимости са Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ, define Ρ‰Π΅ ΠΈΠ·Π²ΠΈΠΊΠ° функцията, която ΠΈ Π΅ Π΄Π°Π΄Π΅Π½Π°, с интСрфСйситС Π½Π° Ρ‚Π΅Π·ΠΈ зависимости, ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ.

ΠœΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅, ΠΊΠΎΠΈΡ‚ΠΎ сС Π·Π°Ρ€Π΅ΠΆΠ΄Π°Ρ‚ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ трябва Π΄Π° ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Ρ‚ ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ към define. Бтойността, която сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° тСхния интСрфСйс Π΅ Ρ‚Π°Π·ΠΈ, която сС Π²Ρ€ΡŠΡ‰Π° ΠΎΡ‚ функцията ΠΏΠΎΠ΄Π°Π΄Π΅Π½Π° към define. Π‘Π΅Π³Π° Ρ‚ΡƒΠΊΠ° Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ weekDay ΠΎΡ‚Π½ΠΎΠ²ΠΎ:

define([], function() {
  var names = ["Sunday", "Monday", "Tuesday", "Wednesday",
               "Thursday", "Friday", "Saturday"];
  return {
    name: function(number) { return names[number]; },
    number: function(name) { return names.indexOf(name); }
  };
});

Π—Π° Π΄Π° ΠΌΠΎΠ³Π° Π΄Π° ΠΏΠΎΠΊΠ°ΠΆΠ° ΠΌΠΈΠ½ΠΈΠΌΠ°Π»Π½ΠΎ изпълнСниС Π½Π° define, Ρ‰Π΅ сС прСструвамС, Ρ‡Π΅ ΠΈΠΌΠ°ΠΌΠ΅ backgroundReadFile функция, която Π²Π·Π΅ΠΌΠ° ΠΈΠΌΠ΅ Π½Π° Ρ„Π°ΠΉΠ» ΠΈ функция ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π° функцията със ΡΡŠΠ΄ΡŠΡ€ΠΆΠ°Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ„Π°ΠΉΠ»Π°, Π²Π΅Π΄Π½Π°Π³Π° слСд, ΠΊΠ°Ρ‚ΠΎ ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ. (Π“Π»Π°Π²Π° 17 Ρ‰Π΅ Π²ΠΈ обясня, ΠΊΠ°ΠΊ Π΄Π° ΠΏΠΈΡˆΠ΅Ρ‚Π΅ Ρ‚Π°ΠΊΠΈΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.)

Π—Π° прослСдяванС Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ са Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π΅Π½ΠΈ, ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° define Ρ‰Π΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ описват ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅Ρ‚ΠΎ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ ΠΈ Π½ΠΈ ΠΊΠ°Π·Π²Π°Ρ‚ Π΄Π°Π»ΠΈ Ρ‚Π΅ са Π½Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΈ осигуряват тСхния интрСфСйс, ΠΊΠΎΠ³Π°Ρ‚ΠΎ са.

Ѐункцията getModule, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΈ сС Π΄Π°Π΄Π΅ ΠΈΠΌΠ΅ Ρ‰Π΅ Π²ΡŠΡ€Π½Π΅ Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ ΠΈ Ρ‰Π΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€Π°, Ρ‡Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ ΠΏΠ»Π°Π½ΠΈΡ€Π°Π½ΠΎ Π΅ Π·Π°Ρ€Π΅Π΄Π΅Π½. Вя ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° кСш ΠΎΠ±Π΅ΠΊΡ‚, Π·Π° Π΄Π° сС ΠΈΠ·Π±Π΅Π³Π½Π΅ Π½Π°Ρ‚ΠΎΠ²Π°Ρ€Π²Π°Π½Π΅ Π½Π° ΡΡŠΡ‰ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ» Π΄Π²Π° ΠΏΡŠΡ‚ΠΈ.

var defineCache = Object.create(null);
var currentMod = null;

function getModule(name) {
  if (name in defineCache)
    return defineCache[name];

  var module = {exports: null,
                loaded: false,
                onLoad: []};
  defineCache[name] = module;
  backgroundReadFile(name, function(code) {
    currentMod = module;
    new Function("", code)();
  });
  return module;
}

ΠŸΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°ΠΌΠ΅, Ρ‡Π΅ зарСдСния Ρ„Π°ΠΉΠ» ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° ΡΡŠΡ‰ΠΎ ΠΈ (Π΅Π΄Π½ΠΎ) ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ към define. ΠŸΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° currentMod сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° Π·Π° Π΄Π° ΠΎΡ‚Ρ€Π°Π·ΠΈ Ρ‚ΠΎΠ²Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π°Π½Π΅ към ΠΌΠΎΠ΄ΡƒΠ» ΠΎΠ±Π΅ΠΊΡ‚Π°, ΠΊΠΎΠΉΡ‚ΠΎ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚Π° сС Π·Π°Ρ€Π΅ΠΆΠ΄Π°, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π°ΠΊΡ‚ΡƒΠ°Π»ΠΈΠ·ΠΈΡ€Π° Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ. НиС Ρ‰Π΅ сС Π²ΡŠΡ€Π½Π΅ΠΌ Π½Π° Ρ‚ΠΎΠ·ΠΈ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΡŠΠΌ Π² Π΅Π΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ‚.

Π‘Π°ΠΌΠ°Ρ‚Π° функция define ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° getModule Π·Π° ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ ΠΈΠ»ΠΈ създаванС Π½Π° ΠΌΠΎΠ΄ΡƒΠ» ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π·Π° зависимоститС Π½Π° тСкущия ΠΌΠΎΠ΄ΡƒΠ». НСйната Π·Π°Π΄Π°Ρ‡Π° Π΅ Π΄Π° ΠΏΠ»Π°Π½ΠΈΡ€Π° moduleFunction (функцията, която ΡΡŠΠ΄ΡŠΡ€ΠΆΠ° дСйствитСлния ΠΊΠΎΠ΄ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°) Π΄Π° сС стартира, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ‚Π΅Π·ΠΈ зависимости са Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ. Π—Π° Ρ‚Π°Π·ΠΈ Ρ†Π΅Π» тя опрСдСля функцията whenDepsLoaded, която Π΄Π° добавя към onLoad масива всички зависимости, ΠΊΠΎΠΈΡ‚ΠΎ всС ΠΎΡ‰Π΅ Π½Π΅ са Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ. Π’Π°Π·ΠΈ функция сС Π²Ρ€ΡŠΡ‰Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ, Π°ΠΊΠΎ ΠΈΠΌΠ° всС ΠΎΡ‰Π΅ Π½Π΅Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ зависимости, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Ρ‰Π΅ ΠΈΠ·Π²ΡŠΡ€ΡˆΠΈ дСйствитСлната Ρ€Π°Π±ΠΎΡ‚Π° само вСднъТ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ послСдната зависимост ΠΏΡ€ΠΈΠΊΠ»ΡŽΡ‡ΠΈ със Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ. Вя ΡΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ° сС ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π½Π΅Π·Π°Π±Π°Π²Π½ΠΎ ΠΎΡ‚ самия define Π² случай, Ρ‡Π΅ няма зависимости, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° Π±ΡŠΠ΄Π°Ρ‚ Π·Π°Ρ€Π΅Π΄Π΅Π½ΠΈ.

function define(depNames, moduleFunction) {
  var myMod = currentMod;
  var deps = depNames.map(getModule);

  deps.forEach(function(mod) {
    if (!mod.loaded)
      mod.onLoad.push(whenDepsLoaded);
  });

  function whenDepsLoaded() {
    if (!deps.every(function(m) { return m.loaded; }))
      return;

    var args = deps.map(function(m) { return m.exports; });
    var exports = moduleFunction.apply(null, args);
    if (myMod) {
      myMod.exports = exports;
      myMod.loaded = true;
      myMod.onLoad.forEach(function(f) { f(); });
    }
  }
  whenDepsLoaded();
}

ΠšΠΎΠ³Π°Ρ‚ΠΎ всички зависимости са Π½Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, whenDepsLoaded ΠΈΠ·Π²ΠΈΠΊΠ²Π° функция, която Π΄ΡŠΡ€ΠΆΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π°, ΠΊΠ°Ρ‚ΠΎ ΠΌΡƒ Π΄Π°Π²Π° интСрфСйси Π½Π° зависимоститС, ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ.

ΠŸΡŠΡ€Π²ΠΎΡ‚ΠΎ Π½Π΅Ρ‰ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ define ΠΏΡ€Π°Π²ΠΈ Π΅ Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΠΈ стойността, която currentMod ΠΈΠΌa, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ ΠΈΠ·Π²ΠΈΠΊΠ°Π½ Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° myMod. НС забравяйтС, Ρ‡Π΅ getModule Ρ‚ΠΎΡ‡Π½ΠΎ ΠΏΡ€Π΅Π΄ΠΈ оцСняванСто Π½Π° ΠΊΠΎΠ΄Π° Π·Π° ΠΌΠΎΠ΄ΡƒΠ»Π°, ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° ΡΡŠΠΎΡ‚Π²Π΅Ρ‚Π½ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ» ΠΎΠ±Π΅ΠΊΡ‚ Π² currentMod. Π’ΠΎΠ²Π° позволява Π½Π° whenDepsLoaded Π΄Π° ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π²ΡŠΡ€Π½Π°Ρ‚a стойност ΠΎΡ‚ функцията Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Π² свойството exports Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°, опрСдСля свойството loaded Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Π½Π° true ΠΈ ΠΈΠ·Π²ΠΈΠΊΠ²Π° всички Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‡Π°ΠΊΠ°Ρ‚ ΠΌΠΎΠ΄ΡƒΠ»Π° Π΄Π° сС Π·Π°Ρ€Π΅Π΄ΠΈ.

Π’ΠΎΠ·ΠΈ ΠΊΠΎΠ΄ Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π΅Π½ Π·Π° слСдванС ΠΎΡ‚ require функцията. НСговото изпълнСниС Π½Π΅ слСдва прост, Π½Π°Ρ‡Π΅Ρ€Ρ‚Π°Π½ ΠΏΠ»Π°Π½. ВмСсто Ρ‚ΠΎΠ²Π°, сС ΡΡŠΠ·Π΄Π°Π²Π°Ρ‚ мноТСство ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π° сС случат Π² някакъв Π½Π΅ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π² Π±ΡŠΠ΄Π΅Ρ‰Π΅Ρ‚ΠΎ, ΠΊΠΎΠ΅Ρ‚ΠΎ замъглява ΠΏΡŠΡ‚Ρ Π½Π° ΠΊΠΎΠ΄Π°, ΠΊΠΎΠ³Π°Ρ‚ΠΎ сС изпълнява.

Π˜ΡΡ‚ΠΈΠ½ΡΠΊΠΎΡ‚ΠΎ изпълнСниС Π½Π° AMD, Π΅ доста ΠΏΠΎ-ΠΈΠ½Ρ‚Π΅Π»ΠΈΠ³Π΅Π½Ρ‚Π½ΠΎ ΠΏΡ€ΠΈ Ρ€Π°Π·Ρ€Π΅ΡˆΠ°Π²Π°Π½Π΅ Π½Π° ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ към дСйствитСлни URL адрСси ΠΈ ΠΊΠ°Ρ‚ΠΎ цяло ΠΏΠΎ-стабилно, ΠΎΡ‚ΠΊΠΎΠ»ΠΊΠΎΡ‚ΠΎ Ρ‚ΠΎΠ²Π° ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ ΠΏΠΎ-Ρ€Π°Π½ΠΎ. RequireJS (requirejs.org) осигурява ΠΈΠ·ΠΏΡŠΠ»Π½Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° Ρ‚ΠΎΠ·ΠΈ популярСн стил Π·Π° ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΎ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅.

Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡ Π΄ΠΈΠ·Π°ΠΉΠ½

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅ Π½Π° интСрфСйси Π·Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ Π΅ Π΅Π΄ΠΈΠ½ ΠΎΡ‚ Π½Π°ΠΉ-Ρ„ΠΈΠ½ΠΈΡ‚Π΅ аспСкти Π½Π° ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ. Всяко Π½Π΅ Ρ‚Ρ€ΠΈΠ²ΠΈΠ°Π»Π½ΠΎ ΠΏΠ°Ρ€Ρ‡Π΅ функционалност ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΌΠΎΠ΄Π΅Π»ΠΈΡ€Π° ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Π½Π°Ρ‡ΠΈΠ½ΠΈ. НамиранСто Π½Π° Π½Π°Ρ‡ΠΈΠ½, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΎΠ±Ρ€Π΅ изисква проницатСлност ΠΈ далновидност.

Най-добрият Π½Π°Ρ‡ΠΈΠ½ Π·Π° Π½Π°ΡƒΡ‡Π°Π²Π°Π½Π΅ Π½Π° добрия Π΄ΠΈΠ·Π°ΠΉΠ½ Π·Π° интСрфСйс Π΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΌΠ½ΠΎΠ³ΠΎ интСрфСйси, някои Π΄ΠΎΠ±Ρ€ΠΈ, някои лоши. ΠžΠΏΠΈΡ‚ΡŠΡ‚ Ρ‰Π΅ Π²ΠΈ Π½Π°ΡƒΡ‡ΠΈ, ΠΊΠ°ΠΊΠ²ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΈ ΠΊΠ°ΠΊΠ²ΠΎ Π½Π΅. Никога Π½Π΅ допускайтС, Ρ‡Π΅ трудният интСрфСйс Π΅ β€œΡ‚Π°ΠΊΡŠΠ², ΠΊΠ°ΠΊΡŠΠ²Ρ‚ΠΎ С”. ΠŸΠΎΠΏΡ€Π°Π²Π΅Ρ‚Π΅ Π³ΠΎ ΠΈΠ»ΠΈ Π³ΠΎ ΡƒΠ²ΠΈΠΉΡ‚Π΅ Π² Π½ΠΎΠ² интСрфСйс, ΠΊΠΎΠΉΡ‚ΠΎ Ρ€Π°Π±ΠΎΡ‚ΠΈ ΠΏΠΎ-Π΄ΠΎΠ±Ρ€Π΅.

ΠŸΡ€Π΅Π΄Π²ΠΈΠ΄ΠΈΠΌΠΎΡΡ‚

Ако програмиститС ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° ΠΏΡ€ΠΎΠ³Π½ΠΎΠ·ΠΈΡ€Π°Ρ‚ Π½Π°Ρ‡ΠΈΠ½Π° Π½Π° Ρ€Π°Π±ΠΎΡ‚Π° Π½Π° интСрфСйса, Ρ‚Π΅ (ΠΈΠ»ΠΈ Π²ΠΈΠ΅) няма Π΄Π° сС отклоняват ΠΎΡ‚ Ρ†Π΅Π»Ρ‚Π° Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° чСсто ΠΏΡ€ΠΈ нСобходимостта Π΄Π° Ρ‚ΡŠΡ€ΡΡΡ‚, ΠΊΠ°ΠΊ Π΄Π° Π³ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚ Π΄Π° слСдват ΠΊΠΎΠ½Π²Π΅Π½Ρ†ΠΈΠΈ. ΠšΠΎΠ³Π°Ρ‚ΠΎ ΠΈΠΌΠ° Π΄Ρ€ΡƒΠ³ ΠΌΠΎΠ΄ΡƒΠ» ΠΈΠ»ΠΈ част ΠΎΡ‚ стандартна JavaScript срСда, която ΠΏΡ€Π°Π²ΠΈ Π½Π΅Ρ‰ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎ Π½Π° Ρ‚ΠΎΠ²Π°, ΠΊΠΎΠ΅Ρ‚ΠΎ сС ΠΎΠΏΠΈΡ‚Π²Π°Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΈΠ»ΠΎΠΆΠΈΡ‚Π΅, ΠΌΠΎΠΆΠ΅ Π±ΠΈ Π΅ Π΄ΠΎΠ±Ρ€Π° идСя Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ вашия интСрфСйс ΠΏΠΎ ΠΏΠΎΠ΄ΠΎΠ±ΠΈΠ΅ Π½Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ интСрфСйс. По Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½, Ρ‰Π΅ сС почувстватС Π±Π»ΠΈΠ·ΠΊΠΈ с Ρ…ΠΎΡ€Π°, ΠΊΠΎΠΈΡ‚ΠΎ знаят Π·Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈΡ интСрфСйс.

Π”Ρ€ΡƒΠ³Π° област, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ прСдсказуСмоста Π΅ Π²Π°ΠΆΠ½Π° Π·Π° дСйствитСлното ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° вашия ΠΊΠΎΠ΄. МоТС Π΄Π° сС ΠΈΠ·ΠΊΡƒΡˆΠΈΡ‚Π΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ Π½Π΅Π½ΡƒΠΆΠ½ΠΎ слоТСн интСрфСйс с основаниСто, Ρ‡Π΅ Π΅ ΠΏΠΎ-ΡƒΠ΄ΠΎΠ±Π΅Π½ Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅. НапримСр, Π²ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΏΡ€ΠΈΠ΅ΠΌΠ΅Ρ‚Π΅ всички Π²ΠΈΠ΄ΠΎΠ²Π΅ Π½Π° Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅ ΠΈ ΠΊΠΎΠΌΠ±ΠΈΠ½Π°Ρ†ΠΈΠΈ ΠΎΡ‚ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ, Π·Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈΡ‚Π΅ β€œΠΏΡ€Π°Π²ΠΈΠ»Π½ΠΎΡ‚ΠΎβ€ Π½Π΅Ρ‰ΠΎ Π·Π° всички тях. Или пък Π΄Π° прСдоставитС дСсСтки спСциализирани Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ осигуряват удобство с ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ Ρ€Π°Π·Π»ΠΈΡ‡Π΅Π½ вкус, към функционалноста Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°. Π’ΠΎΠ²Π° ΠΌΠΎΠΆΠ΅ Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΊΠΎΠ΄Π°, Π½Π° ΠΊΠΎΠΉΡ‚ΠΎ сС основава вашия интСрфСйс ΠΌΠ°Π»ΠΊΠΎ ΠΏΠΎ-ΠΊΡ€Π°Ρ‚ΡŠΠΊ, Π½ΠΎ ΡΡŠΡ‰Π΅Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ Ρ‰Π΅ Π³ΠΎ Π½Π°ΠΏΡ€Π°Π²ΠΈ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎ-Ρ‚Ρ€ΡƒΠ΄Π΅Π½ Π·Π° Ρ…ΠΎΡ€Π°Ρ‚Π°, ΠΊΠΎΠΈΡ‚ΠΎ Π΄Π° изградят ΠΏΠΎ-ясСн смислСн ΠΌΠΎΠ΄Π΅Π» Π½Π° ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°.

Composability

Π’ΡŠΠ² Π²Π°ΡˆΠΈΡ‚Π΅ интСрфСйси сС ΠΎΠΏΠΈΡ‚Π°ΠΉΡ‚Π΅ Π΄Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚Π΅ Π½Π°ΠΉ-проститС структури ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ, Π°ΠΊΠΎ Π΅ възмоТно ΠΈ Π½Π°ΠΏΡ€Π°Π²Π΅Ρ‚Π΅ Π²Π°ΡˆΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π° правят Π΅Π΄Π½ΠΎ, ясно Π½Π΅Ρ‰ΠΎ. Π’ΠΈΠ½Π°Π³ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΡ‡Π½ΠΎ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ чисти Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ (Π²ΠΈΠΆ Π“Π»Π°Π²Π° 3).

НапримСр, Π½Π΅ Π΅ Π½Π΅ΠΎΠ±ΠΈΡ‡Π°ΠΉΠ½ΠΎ Π·Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄Π° прСдоставят свой собствСн масив, ΠΊΠ°Ρ‚ΠΎ ΠΎΠ±Π΅ΠΊΡ‚ - колСкция, със собствСн интСрфСйс Π·Π° прСброяванС ΠΈ ΠΈΠ·Π²Π»ΠΈΡ‡Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΌΠ΅Π½Ρ‚ΠΈ. Π’Π°ΠΊΠΈΠ²Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈ нямат map ΠΈ forEach ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈ, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ всички ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Ρ‰ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ ΠΎΡ‡Π°ΠΊΠ²Π° истинкия масив ΠΈ няма Π΄Π° ΠΌΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈΡ‚Π΅ с тях. Π’ΠΎΠ²Π° Π΅ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Π·Π° лоша composability (компонСнтност) - ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС лСсно ΡΡŠΡΡ‚Π°Π²Π΅Π½ с Π΄Ρ€ΡƒΠ³ ΠΊΠΎΠ΄.

Π•Π΄ΠΈΠ½ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ‰Π΅ бъдС ΠΌΠΎΠ΄ΡƒΠ» Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° правописа Π½Π° тСкст, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° Π½ΠΈ потрябва, ΠΊΠΎΠ³Π°Ρ‚ΠΎ искамС Π΄Π° напишСм тСкстов Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€. ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°Ρ‚Π° Π½Π° правописа ΠΌΠΎΠΆΠ΅ Π΄Π° сС Π½Π°ΠΏΡ€Π°Π²ΠΈ Π΄Π° Ρ€Π°Π±ΠΎΡ‚ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π²ΡŠΡ€Ρ…Ρƒ слоТни структури ΠΎΡ‚ Π΄Π°Π½Π½ΠΈ с ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ Π½Π° Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€ ΠΈ Π΄ΠΈΡ€Π΅ΠΊΡ‚Π½ΠΎ Π΄Π° ΠΈΠ·Π²ΠΈΠΊΠ²Π° Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π½Π° Ρ‚ΠΎΠ·ΠΈ Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΎΡ€, Π·Π° Π΄Π° ΠΈΠΌΠ° потрСбитСля ΠΈΠ·Π±ΠΎΡ€ ΠΌΠ΅ΠΆΠ΄Ρƒ прСдлоТСния Π·Π° правописа. Ако Π²ΡŠΡ€Π²ΠΈΠΌ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ ΠΏΡŠΡ‚, ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Π½Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° с Π΄Ρ€ΡƒΠ³ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ. ΠžΡ‚ Π΄Ρ€ΡƒΠ³Π° страна, Π°ΠΊΠΎ Π½ΠΈΠ΅ опрСдСлямС интСрфСйса Π·Π° ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Π½Π° правописа, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π΄Π° ΠΌΠΎΠΆΠ΅ΠΌ Π΄Π° Π³ΠΎ ΠΏΠΎΠ΄Π°Π΄Π΅ΠΌ Π½Π° прост string ΠΈ Ρ‚ΠΎΠΉ Π΄Π° Π²ΡŠΡ€Π½Π΅ позиция Π² Ρ‚ΠΎΠ·ΠΈ string, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ Π΅ възмоТно Π΄Π° ΠΈΠΌΠ° правописна Π³Ρ€Π΅ΡˆΠΊΠ°, Π·Π°Π΅Π΄Π½ΠΎ с масив ΠΎΡ‚ прСдлоТСния Π·Π° ΠΊΠΎΡ€Π΅ΠΊΡ†ΠΈΠΈ, Ρ‚ΠΎΠ³Π°Π²Π° ΠΈΠΌΠ°ΠΌΠ΅ интСрфСйс, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Π² ΡΡŠΡΡ‚Π°Π²Π° Π½Π° Π΄Ρ€ΡƒΠ³ΠΈ систСми, Π·Π°Ρ‰ΠΎΡ‚ΠΎ strings ΠΈ масиви са Π²ΠΈΠ½Π°Π³ΠΈ Π½Π° Ρ€Π°Π·ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² JavaScript.

Π‘Π»ΠΎΠ΅Π²Π΅ ΠΎΡ‚ интСрфСйси

ΠŸΡ€ΠΈ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π΅Ρ‚ΠΎ Π½Π° интСрфСйс Π·Π° комплСксна част ΠΎΡ‚ функционалност - Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π·Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π°Π½Π΅ Π½Π° Π΅Π»Π΅ΠΊΡ‚Ρ€ΠΎΠ½Π½Π° ΠΏΠΎΡ‰Π° - чСсто Ρ‰Π΅ сС ΡΠ±Π»ΡŠΡΠΊΠ²Π°Ρ‚Π΅ с Π΅Π΄Π½Π° Π΄ΠΈΠ»Π΅ΠΌΠ°. ΠžΡ‚ Π΅Π΄Π½Π° страна Π½Π΅ искатС Π΄Π° ΠΏΡ€Π΅Ρ‚ΠΎΠ²Π°Ρ€ΠΈΡ‚Π΅ потрСбитСля Π½Π° вашия интСрфСйс с подробности. Π’ΠΎΠΉ Π½Π΅ трябва Π΄Π° ΡƒΡ‡ΠΈ вашия интСрфСйс 20 ΠΌΠΈΠ½ΡƒΡ‚ΠΈ, ΠΏΡ€Π΅Π΄ΠΈ Π΄Π° ΠΈΠ·ΠΏΡ€Π°Ρ‚ΠΈ ΠΈΠΌΠ΅ΠΉΠ». ΠžΡ‚ Π΄Ρ€ΡƒΠ³Π° старана, Π²ΠΈΠ΅ Π½Π΅ искатС Π΄Π° скриСтС всички Π΄Π΅Ρ‚Π°ΠΉΠ»ΠΈ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ Ρ…ΠΎΡ€Π°Ρ‚Π° трябва Π΄Π° правят ΠΏΠΎ-слоТни Π½Π΅Ρ‰Π° с вашия ΠΌΠΎΠ΄ΡƒΠ», Ρ‚ΠΎΠΉ трябва Π΄Π° бъдС Π² ΡΡŠΡΡ‚ΠΎΡΠ½ΠΈΠ΅ Π·Π° Ρ‚ΠΎΠ²Π°.

ЧСсто Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅Ρ‚ΠΎ Π΅ Π΄Π° сС осигурят Π΄Π²Π° интСрфСйса: Π΅Π΄ΠΈΠ½ ΠΏΠΎΠ΄Ρ€ΠΎΠ±Π΅Π½ ниско Π½ΠΈΠ²ΠΎ Π·Π° слоТни ситуации ΠΈ Π΅Π΄ΠΈΠ½ високо Π½ΠΈΠ²ΠΎ Π·Π° Ρ€ΡƒΡ‚ΠΈΠ½Π½Π° ΡƒΠΏΠΎΡ‚Ρ€Π΅Π±Π°. Втория ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΎ лСсно ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС построСн с ΠΏΠΎΠΌΠΎΡ‰Π° Π½Π° инструмСнтитС прСдоставСни ΠΎΡ‚ ΠΏΡŠΡ€Π²ΠΈΡ. Π’ ΠΌΠΎΠ΄ΡƒΠ»Π° Π·Π° ΠΏΠΎΡ‰Π°, интСрфСйса Π·Π° високо Π½ΠΈΠ²ΠΎ Π±ΠΈ могъл Π΄Π° бъдС само Π΅Π΄Π½Π° функция, с която ΡΡŠΠΎΠ±Ρ‰Π°Π²Π° адрСса Π½Π° податСля ΠΈ адрСса Π½Π° получатСля ΠΈ слСд Ρ‚ΠΎΠ²Π° ΠΈΠ·ΠΏΡ€Π°Ρ‰Π° ΠΈΠΌΠ΅ΠΉΠ». Π˜Π½Ρ‚Π΅Ρ€Ρ„Π΅ΠΉΡΠ° Π·Π° ниско Π½ΠΈΠ²ΠΎ Ρ‰Π΅ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈ пълСн ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ» Π½Π°Π΄ ΠΏΠΎΡ‰Π°Ρ‚Π°: Π·Π°Π³Π»Π°Π²ΠΈΠ΅, ΠΏΡ€ΠΈΠΊΠ°Ρ‡Π΅Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅, HTML ΠΏΠΎΡ‰Π° ΠΈ Ρ‚.Π½.

РСзюмС

ΠœΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ прСдоставят структура Π·Π° ΠΏΠΎ-Π³ΠΎΠ»Π΅ΠΌΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΈ, Ρ‡Ρ€Π΅Π· отдСлянС Π½Π° ΠΊΠΎΠ΄Π° Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ Ρ„Π°ΠΉΠ»ΠΎΠ²Π΅ ΠΈ namespaces. Π”Π°Π²Π°ΠΉΠΊΠΈ Π½Π° Ρ‚Π΅Π·ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π΄ΠΎΠ±Ρ€Π΅ Π΄Π΅Ρ„ΠΈΠ½ΠΈΡ€Π°Π½ΠΈ интСрфСйси Π³ΠΈ ΠΏΡ€Π°Π²ΠΈ ΠΏΠΎ-лСсни Π·Π° ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΈ ΠΏΡ€Π΅ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅ ΠΈ Π΄Π°Π²Π° Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° сС ΠΏΡ€ΠΎΠ΄ΡŠΠ»ΠΆΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½Π΅Ρ‚ΠΎ ΠΈΠΌ, ΠΊΠΎΠ³Π°Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΡŠΡ‚ Π΅Π²ΠΎΠ»ΡŽΠΈΡ€Π°.

Π’ΡŠΠΏΡ€Π΅ΠΊΠΈ, Ρ‡Π΅ Π΅Π·ΠΈΠΊΠ° Π½Π° JavaScript Π΅ Ρ…Π°Ρ€Π°ΠΊΡ‚Π΅Ρ€Π½ΠΎ Π±Π΅Π·ΠΏΠΎΠ»Π΅Π·Π΅Π½, ΠΊΠΎΠ³Π°Ρ‚ΠΎ става Π²ΡŠΠΏΡ€ΠΎΡ Π·Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ, Π³ΡŠΠ²ΠΊΠ°Π²ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ Ρ‚ΠΎΠΉ прСдоставя Π΄Π°Π²Π°Ρ‚ Π²ΡŠΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ Π΄Π° сС опрСдСлят ΠΏΠΎ-скоро Ρ…ΡƒΠ±Π°Π²ΠΈ ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ систСми. ΠžΠ±Ρ…Π²Π°Ρ‚Π° Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°, ΠΊΠ°Ρ‚ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ namespaces Π·Π° ΠΌΠΎΠ΄ΡƒΠ»Π°, Π° ΠΎΠ±Π΅ΠΊΡ‚ΠΈΡ‚Π΅ ΠΌΠΎΠ³Π°Ρ‚ Π΄Π° сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ Π·Π° ΡΡŠΡ…Ρ€Π°Π½Π΅Π½ΠΈΠ΅ Π½Π° Π½Π°Π±ΠΎΡ€Π° ΠΎΡ‚ Скспортни стойности.

Има Π΄Π²Π° популярни Π΄ΠΎΠ±Ρ€Π΅ ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄Π° към Ρ‚Π°ΠΊΠΈΠ²Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Единият сС Π½Π°Ρ€ΠΈΡ‡Π° CommonJS Modules ΠΈ сС Π²ΡŠΡ€Ρ‚ΠΈ ΠΎΠΊΠΎΠ»ΠΎ require функцията, която ΠΈΠ·Π²Π»ΠΈΡ‡Π° ΠΌΠΎΠ΄ΡƒΠ» ΠΏΠΎ ΠΈΠΌΠ΅ ΠΈ Π²Ρ€ΡŠΡ‰Π° интСрфСйса ΠΌΡƒ. Π”Ρ€ΡƒΠ³Π°Ρ‚Π° сС Π½Π°Ρ€ΠΈΡ‡Π° AMD ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π° define функцията, която Π²Π·Π΅ΠΌΠ° масив с ΠΈΠΌΠ΅Π½Π° Π½Π° ΠΌΠΎΠ΄ΡƒΠ»ΠΈ ΠΈ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΈ слСд ΠΊΠ°Ρ‚ΠΎ Π·Π°Ρ€Π΅Π΄ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅ изпълнява функция с Ρ‚Π΅Ρ…Π½ΠΈΡ‚Π΅ интСрфСйси, ΠΊΠ°Ρ‚ΠΎ Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚ΠΈ.

УпраТнСния

Π˜ΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° мСсСца

ΠΠ°ΠΏΠΈΡˆΠ΅Ρ‚Π΅ прост ΠΌΠΎΠ΄ΡƒΠ» ΠΏΠΎΠ΄ΠΎΠ±Π΅Π½ Π½Π° weekDay, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΠ²Π° числата Π½Π° мСсСца (с Π½ΡƒΠ»Π΅Π²Π° Π±Π°Π·Π°, ΠΊΠ°Ρ‚ΠΎ Π² Ρ‚ΠΈΠΏΠ° Date) Π² ΠΈΠΌΠ΅Π½Π° ΠΈ ΠΈΠΌΠ΅Π½Π°Ρ‚Π° ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ Π² числа. Π”Π°ΠΉΡ‚Π΅ ΠΌΡƒ своС собствСно namespace, Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‰Π΅ сС Π½ΡƒΠΆΠ΄Π°Π΅ ΠΎΡ‚ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ΅Π½ масив с ΠΈΠΌΠ΅Π½Π°Ρ‚Π° Π½Π° мСсСцитС ΠΈ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°ΠΉΡ‚Π΅ ΠΎΠ±ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ JavaScript, Π±Π΅Π· Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π½Π° систСма.

// Your code here.

console.log(month.name(2));
// β†’ March
console.log(month.number("November"));
// β†’ 10

Π’ΠΎΠ²Π° Π΅ ΠΏΠΎΡ‡Ρ‚ΠΈ Ρ‚ΠΎΡ‡Π½ΠΎ слСдванС Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° weekDay. Ѐункционалния ΠΈΠ·Ρ€Π°Π· ΠΈΠ·Π²ΠΈΠΊΠ°Π½ Π²Π΅Π΄Π½Π°Π³Π°, ΠΎΠΏΠ°ΠΊΠΎΠ²Π° ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π°, която Π΄ΡŠΡ€ΠΆΠΈ масива с ΠΈΠΌΠ΅Π½Π°Ρ‚Π°, ΠΊΠ°ΠΊΡ‚ΠΎ ΠΈ Π΄Π²Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, ΠΊΠΎΠΈΡ‚ΠΎ трябва Π΄Π° сС Скспортират. Π€ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ са поставСни Π² Π΅Π΄ΠΈΠ½ ΠΎΠ±Π΅ΠΊΡ‚ ΠΈ сС Π²Ρ€ΡŠΡ‰Π°Ρ‚. Π’ΡŠΡ€Π½Π°Ρ‚ΠΈΡ ΠΎΠ±Π΅ΠΊΡ‚ Π½Π° интСрфСйса сС ΡΡŠΡ…Ρ€Π°Π½ΡΠ²Π° Π² ΠΏΡ€ΠΎΠΌΠ΅Π½Π»ΠΈΠ²Π°Ρ‚Π° month.

Π’Ρ€ΡŠΡ‰Π°Π½Π΅ към СлСктронния ΠΆΠΈΠ²ΠΎΡ‚

Надявам сС, Ρ‡Π΅ ΡΠΏΠΎΠΌΠ΅Π½ΡŠΡ‚ Π·Π° Chapter 7 Π΅ ΠΎΡ‰Π΅ прСсСн Π² ΡΡŠΠ·Π½Π°Π½ΠΈΠ΅Ρ‚ΠΎ Π²ΠΈ, Π΄Π° сС Π²ΡŠΡ€Π½Π΅ΠΌ ΠΎΠ±Ρ€Π°Ρ‚Π½ΠΎ към систСмата ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€Π°Π½Π° Π² Ρ‚Π°Π·ΠΈ Π³Π»Π°Π²Π° ΠΈ Π΄Π° ΠΈΠ·Π»Π΅Π·Π΅ΠΌ с Π½Π°Ρ‡ΠΈΠ½ Π·Π° раздСлянС Π½Π° ΠΊΠΎΠ΄Π° Π² ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Π—Π° Π΄Π° освСТим ΠΏΠ°ΠΌΠ΅Ρ‚Ρ‚Π° си, Ρ‚ΠΎΠ²Π° са Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈΡ‚Π΅ ΠΈ Ρ‚ΠΈΠΏΠΎΠ²Π΅Ρ‚Π΅, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈ Π² Ρ‚Π°Π·ΠΈ Π³Π»Π°Π²Π° ΠΏΠΎ Ρ€Π΅Π΄Π° Π½Π° появяванСто ΠΈΠΌ:

Vector
Grid
directions
directionNames
randomElement
BouncingCritter
elementFromChar
World
charFromElement
Wall
View
WallFollower
dirPlus
LifelikeWorld
Plant
PlantEater
SmartPlantEater
Tiger

НС ΠΏΡ€Π΅ΡƒΠ²Π΅Π»ΠΈΡ‡Π°Π²Π°ΠΉΡ‚Π΅ ΠΈ Π½Π΅ ΡΡŠΠ·Π΄Π°Π²Π°ΠΉΡ‚Π΅ Ρ‚Π²ΡŠΡ€Π΄Π΅ ΠΌΠ½ΠΎΠ³ΠΎ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Π•Π΄Π½Π° ΠΊΠ½ΠΈΠ³Π°, която Π·Π°ΠΏΠΎΡ‡Π²Π° Π½ΠΎΠ²Π° Π³Π»Π°Π²Π° Π½Π° всяка страница, вСроятно Ρ‰Π΅ Π²ΠΈ сС ΠΊΠ°Ρ‡ΠΈ Π½Π° Π½Π΅Ρ€Π²ΠΈΡ‚Π΅, Π΄ΠΎΡ€ΠΈ ΠΈ само Π·Π°Ρ€Π°Π΄ΠΈ пространството, ΠΊΠΎΠ΅Ρ‚ΠΎ Π³ΡƒΠ±ΠΈ ΠΎΡ‚ Π½ΠΎΠ²ΠΈΡ‚Π΅ заглавия. По ΡΡŠΡ‰ΠΈΡ Π½Π°Ρ‡ΠΈΠ½, Π΄Π° отварятС 10 Ρ„Π°ΠΉΠ»Π°, Π·Π° Π΄Π° ΠΏΡ€ΠΎΡ‡Π΅Ρ‚Π΅Ρ‚Π΅ Π΅Π΄ΠΈΠ½ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Π½Π΅ Π΅ ΠΏΠΎΠ»Π΅Π·Π½ΠΎ. Π¦Π΅Π»Ρ‚Π° Π²ΠΈ Π΅ ΠΎΡ‚ 3 Π΄ΠΎ 5 ΠΌΠΎΠ΄ΡƒΠ»Π°.

ΠœΠΎΠΆΠ΅Ρ‚Π΅ Π΄Π° ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΠΈΡ‚Π΅, някои Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π΄Π° станат Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈ Π·Π° тСхния ΠΌΠΎΠ΄ΡƒΠ» ΠΈ ΠΏΠΎ Ρ‚ΠΎΠ·ΠΈ Π½Π°Ρ‡ΠΈΠ½ Π½Π΅Π΄ΠΎΡΡ‚ΡŠΠΏΠ½ΠΈ Π·Π° Π΄Ρ€ΡƒΠ³ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

Няма ΠΏΡ€Π°Π²ΠΈΠ»Π΅Π½ ΠΎΡ‚Π³ΠΎΠ²ΠΎΡ€ Ρ‚ΡƒΠΊΠ°. ΠœΠΎΠ΄ΡƒΠ»Π½Π°Ρ‚Π° организация Π΄ΠΎ голяма стСпСн Π΅ Π²ΡŠΠΏΡ€ΠΎΡ Π½Π° вкус.

Π•Ρ‚ΠΎ ΠΊΠ°ΠΊΠ²ΠΎ измислих. Π‘Π»ΠΎΠΆΠΈΠ» съм скоби ΠΎΠΊΠΎΠ»ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½ΠΈΡ‚Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ.

Module "grid"
  Vector
  Grid
  directions
  directionNames

Module "world"
  (randomElement)
  (elementFromChar)
  (charFromElement)
  View
  World
  LifelikeWorld
  directions [reexported]

Module "simple_ecosystem"
  (randomElement) [duplicated]
  (dirPlus)
  Wall
  BouncingCritter
  WallFollower

Module "ecosystem"
  Wall [duplicated]
  Plant
  PlantEater
  SmartPlantEater
  Tiger

Аз ΠΈΠΌΠ°ΠΌ рССкспорт Π½Π° directions масива ΠΎΡ‚ grid ΠΌΠΎΠ΄ΡƒΠ»Π° ΠΎΡ‚ world, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ ΠΈΠ·Π³Ρ€Π°Π΄Π΅Π½ΠΈΡ‚Π΅ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ Π½Π° (СкосистСмата) Π½Π΅ трябва Π΄Π° знаят ΠΈΠ»ΠΈ сС притСсняват Π·Π° ΡΡŠΡ‰Π΅ΡΡ‚Π²ΡƒΠ²Π°Π½Π΅Ρ‚ΠΎ Π½Π° grid ΠΌΠΎΠ΄ΡƒΠ».

Π‘ΡŠΡ‰ΠΎ Ρ‚Π°ΠΊΠ°, Π΄ΡƒΠ±Π»ΠΈΡ€Π°ΠΌ Π΄Π²Π΅ ΠΎΠ±Ρ‰ΠΈ ΠΈ ΠΌΠ°Π»ΠΊΠΈ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈ стойности (randomElement and Wall), Ρ‚ΡŠΠΉ ΠΊΠ°Ρ‚ΠΎ Ρ‚Π΅ сС ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Ρ‚ ΠΊΠ°Ρ‚ΠΎ Π²ΡŠΡ‚Ρ€Π΅ΡˆΠ½Π° информация Π² Ρ€Π°Π·Π»ΠΈΡ‡Π½ΠΈ контСксти ΠΈ Π½Π΅ ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ към интСрфСйситС Π·Π° Ρ‚Π΅Π·ΠΈ ΠΌΠΎΠ΄ΡƒΠ»ΠΈ.

ΠšΡ€ΡŠΠ³ΠΎΠ²ΠΈ зависимости

Π‘Π»ΠΎΠΆΠ½Π° Ρ‚Π΅ΠΌΠ° Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° зависимоститС са ΠΊΡ€ΡŠΠ³ΠΎΠ²ΠΈΡ‚Π΅ зависимости, ΠΊΡŠΠ΄Π΅Ρ‚ΠΎ ΠΌΠΎΠ΄ΡƒΠ» А зависи ΠΎΡ‚ Π’ ΠΈ Π’ ΡΡŠΡ‰ΠΎ зависи ΠΎΡ‚ А. Много ΠΌΠΎΠ΄ΡƒΠ»Π½ΠΈ систСми просто забраняват Ρ‚ΠΎΠ²Π°. CommonJS позволява ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡Π΅Π½Π° Ρ„ΠΎΡ€ΠΌΠ°: тя Ρ€Π°Π±ΠΎΡ‚ΠΈ Ρ‚ΠΎΠ»ΠΊΠΎΠ²Π° дълго с ΠΌΠΎΠ΄ΡƒΠ»ΠΈΡ‚Π΅, Π΄ΠΎΠΊΠ°Ρ‚ΠΎ Π½Π΅ Π·Π°ΠΌΠ΅Π½ΠΈ тСхния exports ΠΎΠ±Π΅ΠΊΡ‚ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅ с Π΄Ρ€ΡƒΠ³Π° стойност ΠΈ стартира Π΄ΠΎΡΡ‚ΡŠΠΏ Π΄ΠΎ всСки Π΄Ρ€ΡƒΠ³ интСрфСйс само, слСд ΠΊΠ°Ρ‚ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠΈ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ.

Π‘Π΅Ρ‰Π°Ρ‚Π΅ Π»ΠΈ сС Π·Π° Π½Π°Ρ‡ΠΈΠ½, ΠΏΠΎ ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° сС ΠΎΡΡŠΡ‰Π΅ΡΡ‚Π²ΠΈ ΠΏΠΎΠ΄Ρ€ΡŠΠΆΠΊΠ° Π·Π° Ρ‚Π°Π·ΠΈ функция? ΠŸΠΎΠ³Π»Π΅Π΄Π½Π΅Ρ‚Π΅ Π½Π°Π·Π°Π΄ към ΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅Ρ‚ΠΎ Π½Π° require ΠΈ помислСтС ΠΊΠ°ΠΊΠ²Π° функция трябва Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ, Π·Π° Π΄Π° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚Π΅ Ρ‚ΠΎΠ²Π°.

ΠΠΎΠΌΠ΅Ρ€ΡŠΡ‚ Π΅ Π΄Π° Π΄ΠΎΠ±Π°Π²ΠΈΡ‚Π΅ exports ΠΎΠ±Π΅ΠΊΡ‚, създадСн Π·Π° ΠΌΠΎΠ΄ΡƒΠ» към require кСша, ΠΏΡ€Π΅Π΄ΠΈ дСйствитСлното стартиранС Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π°. Π’ΠΎΠ²Π° ΠΎΠ·Π½Π°Ρ‡Π°Π²Π°, Ρ‡Π΅ ΠΌΠΎΠ΄ΡƒΠ»Π° всС ΠΎΡ‰Π΅ Π½Π΅ Π΅ ΠΈΠΌΠ°Π» шанс Π΄Π° ΠΏΡ€Π΅Π·Π°ΠΏΠΈΡˆΠ΅ module.exports, Ρ‚Π°ΠΊΠ° Ρ‡Π΅ Π½ΠΈΠ΅ Π½Π΅ Π·Π½Π°Π΅ΠΌ Π΄Π°Π»ΠΈ Ρ‚ΠΎΠΉ ΠΌΠΎΠΆΠ΅ Π΄Π° иска Π΄Π° изнася някаква Π΄Ρ€ΡƒΠ³Π° стoйност. Π‘Π»Π΅Π΄ Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ, кСша Π½Π° ΠΎΠ±Π΅ΠΊΡ‚Π° Π΅ прСзаписан ΠΎΡ‚ module.exports, ΠΊΠΎΠΉΡ‚ΠΎ ΠΌΠΎΠΆΠ΅ Π΄Π° бъдС Ρ€Π°Π·Π»ΠΈΡ‡Π½Π° стойност.

Но Π°ΠΊΠΎ Π² процСса Π½Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅ Π½Π° ΠΌΠΎΠ΄ΡƒΠ»Π° Π΅ Π·Π°Ρ€Π΅Π΄Π΅Π½ Π²Ρ‚ΠΎΡ€ΠΈ ΠΌΠΎΠ΄ΡƒΠ», Ρ‚ΠΎΠΉ Ρ‰Π΅ ΠΏΠΈΡ‚Π° Π·Π° ΠΏΡŠΡ€Π²ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ» Π·Π° нСговия exports ΠΎΠ±Π΅ΠΊΡ‚ ΠΏΠΎ ΠΏΠΎΠ΄Ρ€Π°Π·Π±ΠΈΡ€Π°Π½Π΅, ΠΊΠΎΠΉΡ‚ΠΎ Π½Π°ΠΉ-вСроятно Π΅ ΠΏΡ€Π°Π·Π΅Π½ Π² Ρ‚ΠΎΠ·ΠΈ ΠΌΠΎΠΌΠ΅Π½Ρ‚ ΠΈ Ρ‰Π΅ бъдС Π² кСша, Π° втория ΠΌΠΎΠ΄ΡƒΠ» Ρ‰Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈ ΠΏΡ€Π΅ΠΏΡ€Π°Ρ‚ΠΊΠ° към Π½Π΅Π³ΠΎ. Ако Ρ‚ΠΎΠΉ Π½Π΅ сС ΠΎΠΏΠΈΡ‚Π° Π΄Π° Π½Π°ΠΏΡ€Π°Π²ΠΈ Π½Π΅Ρ‰ΠΎ с Ρ‚ΠΎΠ·ΠΈ ΠΎΠ±Π΅ΠΊΡ‚ Π΄ΠΎ Π·Π°Π²ΡŠΡ€ΡˆΠ²Π°Π½Π΅ Π½Π° Π·Π°Ρ€Π΅ΠΆΠ΄Π°Π½Π΅Ρ‚ΠΎ Π½Π° ΠΏΡŠΡ€Π²ΠΈΡ ΠΌΠΎΠ΄ΡƒΠ», Π½Π΅Ρ‰Π°Ρ‚Π° Ρ‰Π΅ работят.