Демонстрация ценности функций путем определения времени крушения поезда

Два поезда, отправляющиеся из разных городов, движутся навстречу друг другу с разной скоростью. Поезд А, движущийся со скоростью 80 километров в час, отправляется из Филадельфии в направлении Нью-Йорка, который находится в 150 километрах от него. В то же время поезд B, движущийся со скоростью 120 км/ч, выезжает из Нью-Йорка в направлении Филадельфии. Когда встретятся два поезда?

Я понимаю, что этот тип задач может вызвать в воображении кошмарные воспоминания об уроках математики в средней школе. Тем не менее, оставайтесь со мной, и вы не только сможете легко решить эту проблему, но я также научу вас, как написать функцию JavaScript, чтобы решить ее за вас!

Но прежде чем мы сможем написать одну строку кода, мы должны понять проблему, чтобы определить, как ее решить.

Понимание проблемы

В моем здоровом школьном курсе математики поезда всегда были веселыми маленькими локомотивами, тянущими пассажирские вагоны, движущимися по параллельным путям, инженеры которых просто хотели знать, когда они смогут помахать друг другу.

Поднимем ставки.

Два поезда в этом сценарии ошибочно идут по одному и тому же пути, двигаясь по встречному курсу! Первый — это пригородный поезд, полный пассажиров, а второй — сбежавший товарный поезд с заклинившим дросселем. Нам нужно знать, сколько времени есть, чтобы предотвратить катастрофу. Жизни висят на волоске!

Из задачи мы знаем несколько вещей, некоторые из которых полезны. Нам важна информация о скорости каждого поезда и расстоянии между ними. Расстояние равно скорости, умноженной на время, и, поскольку мы знаем и расстояние, и скорость, мы можем найти время.

Distance = Rate × Time

Что можно переформулировать как:

Time = Distance ÷ Rate

Если бы нас интересовал только один поезд, идущий в другой город, решение было бы очевидным. Мы знаем расстояние (150 км) и скорость поезда А (80 км/ч), поэтому время будет просто равно 150 км ÷ 80 км/ч (1 час 52 минуты и 30 секунд). Однако в нашей задаче участвуют два движущихся объекта, поэтому мы должны учитывать относительную скорость поездов друг к другу.

Поезд А движется со скоростью 80 км/ч, поэтому его относительная скорость относительно близлежащих объектов, таких как деревья, здания и другие неподвижные объекты, составляет 80 км/ч. Поезд B движется со скоростью 120 км/ч к поезду A, поэтому кажется, что он движется к поезду A намного быстрее, чем другие неподвижные объекты вокруг. Чтобы найти относительную скорость двух поездов, мы просто сложим их скорости, в данном случае 200 км/ч.

Зная относительную скорость, мы можем найти время, используя приведенное выше уравнение. 150 км ÷ 200 км/ч = 45 минут.

У нас есть ответ!

К сожалению, на решение ушло время. Допустим, на объяснение и решение проблемы ушло десять минут. Это значит, что до крушения поезда осталось всего 35 минут. Упущено драгоценное время! Что, если за последние десять минут мы упустили единственную возможность избежать катастрофы?

Здесь в игру вступают компьютеры.

Определение функции

В вычислительной технике функция представляет собой повторно используемый блок кода, предназначенный для выполнения задачи при вызове. Многие языки программирования используют функции, но мы сосредоточимся на JavaScript, поскольку его синтаксис прост для понимания, и вы можете самостоятельно запустить код в интернет-браузере.

Для определения функции требуется ключевое слово function, уникальное имя, место для получения необязательных параметров и блок инструкций для выполнения.

function name(parameters) {
 // instructions to execute
}

Имя — это то, что должно вызываться для вызова функции. Параметры — это необязательные значения, которые могут быть предоставлены функции для работы. Пробел внутри фигурных скобок предназначен для кода, который будет выполняться при вызове функции.

Поскольку мы знаем, как решить задачу о двух поездах, мы можем определить функцию, которая решит ее за нас. Нам просто нужно назвать нашу функцию, передать ей соответствующую информацию и перевести нашу формулу в код.

Используя camelCase, давайте назовем функцию timeToIntercept. Параметры, которые нам нужно передать функции, это distance, speedA и speedB.

function timeToIntercept(distance, speedA, speedB) {
 // instructions to execute
}

Блок инструкций будет обрабатывать вычисление решения. Решение задачи занимает два шага, поэтому нам нужно указать функции, как (1) найти относительную скорость поездов и (2) использовать формулу для решения для времени.

Мы объявим переменную с именем relativeSpeed и присвоим ей значение speedA + speedB. Затем мы можем использовать оператор return для вывода значения distance ÷ relativeSpeed.

function timeToIntercept(distance, speedA, speedB) {
 var relativeSpeed = speedA + speedB;
 return distance / relativeSpeed;
}

Наша функция завершена! Остается только вызвать его и передать необходимые параметры.

timeToIntercept(150, 80, 120);

После запуска функции получаем вывод:

0.75

0,75 часа равно 45 минутам.

Функция работает! Компьютер может рассчитать, сколько времени пройдет до встречи двух поездов. Теперь кто-то просто должен предотвратить крушение поезда…

Чтобы самостоятельно протестировать код, откройте веб-инспектор своего браузера, вставьте заполненное объявление функции и вызов функции в панель консоли и нажмите клавишу ввода.

Ценность программных функций

После определения функция может вызываться снова и снова. Возможность передачи параметров означает, что одну и ту же функцию можно использовать для решения задач такого типа для любых заданных переменных. Лучше всего то, что компьютер способен решить задачу за считанные миллисекунды, ничтожную долю времени, которое требуется вам даже для того, чтобы вызвать функцию своими неуклюжими человеческими пальцами.

В следующий раз, когда вы столкнетесь с трудностями на уроке математики в средней школе, попробуйте определить функцию, которая решит за вас домашнюю работу.