Представьте себе поселенцев, строящих свой первый маленький городок. В нём всего несколько зданий: пара домов, почта и вокзал. Он такой маленький, что люди могут указывать любое здание по названию: "давай встретимся у почты" или "я живу во втором доме", или "почему ты трезвый, уже 11 часов дня… пойдём ко мне… в дом номер 1".
Люди тогда много выпивали. Я слышал...
Короче, с ростом города строилось больше зданий. Вскоре людям пришлось делать выбор:
- давать каждому новому зданию уникальный номер или название
- дробить город на улицы
Конечно, они могли использовать первый способ и просто давать уникальные номера и названия новым строениям, чтобы никогда не было двух зданий с номером 5. Думаю, это подходящее, но не самое гениальное решение, особенно для крупного города. Мой адрес: "Нью-Йорк, здание 654 931". Да, ерунда какая-то.
Большинство выбирает второй путь: делить город на улицы, обычно — прямые линии, и идентификаторы домов — названия или цифры — становятся уникальными в пределах улицы. В городе много зданий с номером 5, но они все расположены на разных улицах, поэтому всё в порядке.
Именно поэтому в вашем компьютере есть папки. Без них все ваши файлы хранились бы в одном месте, и вы никогда бы не смогли иметь двух файлов с одним названием. Когда есть папки и вы создаёте новый файл, вам нужно заботиться об именах только в текущей папке.
Эта система деления чего угодно на улицы, блоки или папки позволяет нам объединять вещи в значимые модули. Уолл стрит — это улица банков и финансов. Как бы, модуль Нью-Йорка со специфичной целью. У вас есть папка "Видео" и вы знаете, что она только для видео — особенного типа файлов.
Первые программисты были поселенцами в новом и странном мире компьютеров. Они столкнулись с подобной проблемой и встали перед выбором.
Они могли писать весь код в едином файле и тогда всё — численные и строковые константы, переменные и функции должны были бы иметь уникальные имена. А если бы они захотели переиспользовать какой-то код в другом проекте, им бы потребовалось копировать его из этого гигантского файла и вставлять его в другой гигантский файл.
Или они могли бы пойти вторым путем: разделить код на небольшие модули. Модули могут храниться в отдельных файлах, а имена функций и констант будут уникальными только в пределах файла, но не во всей программе. И модули можно легко переиспользовать в разных проектах, без копирования и вставки.
У разных языков программирования разные подходы к этой задаче. В JavaScript он довольно простой: один файл — один модуль. Все упражнения, которые вы выполняете в этом курсе — это написание модулей.
Всё хорошо, но теперь нам нужно как-то объединить код из разных файлов. Если вы просто напишете код в разных файлах, интерпретатор JavaScript не поймёт как получить что-то из другого файла.
Давайте посмотрим на пример: у меня есть файл, названный "math.js":