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

Возьмем, к примеру, Python и JavaScript. Скромная функция sum позволяет быстро вычислить сумму отдельных элементов в списке / массиве. Пользователи MS Excel также знакомы с этим.

Однако функция суммы не встроена в простой JavaScript. Если щелкнуть правой кнопкой мыши любую страницу браузера и выбрать «Проверить», сбоку появится несколько вкладок. Одним из них будет консоль, в которую мы могли бы вставить какой-нибудь JS-код.

Например, если мы попытаемся суммировать массив, определенный ниже, появится ошибка, по сути, говорящая «Я не знаю, о чем вы говорите». Но эту проблему можно решить идиоматическим способом, «уменьшив» массив путем суммирования элемента за элементом, начиная со значения 0, как определено во втором позиционном аргументе (что в данном случае является необязательным, поскольку это настройка по умолчанию).

Что, если бы мы хотели повторно вызывать сумму и не хотели переписывать аналогичные строки, как описано выше? Мы могли бы провести рефакторинг, создав нашу собственную маленькую функцию суммы.

Если мы вернемся в консоль, мы можем сообщить браузеру, как он должен обрабатывать массив, переданный в sum.

Еще одна изящная функция, которая была в моем основном наборе инструментов Python, - это функция range. Когда три аргумента передаются в диапазон, Python создает генератор - который я рассматриваю как самоуничтожающийся список, - который позволяет выполнять итерацию, начиная с первого аргумента («минимум»), до, но не включая второй аргумент ( «Максимум», который исключен), с шагом в соответствии с третьим аргументом («шаг»). Мы позволяем mn, mx и s представлять минимум, максимум и шаг соответственно.

JS не имеет встроенной функции диапазона, но мы можем аппроксимировать ее с помощью однострочника ниже. Сначала мы инициализируем массив с максимальным и меньшим минимальным количеством пустых элементов, заполняем их некоторым значением-заполнителем (в данном случае 0) и сопоставляем каждому элементу их индекс плюс минимальное значение (индекс начинается с 0 в JS). Как только это будет сделано, мы отбрасываем элементы, которые не соответствуют методу фильтрации - любой элемент за исключением минимума, который не полностью делится на определенный шаг, будет отброшен.

Пробуем в нашем браузере. Мы хотим, чтобы консоль регистрировала значения, начиная с 1, до 10, но не включая 10, с шагом или с шагом 2.

И это работает!

Два приведенных выше примера не предназначены для критики JavaScript - на самом деле, JS по-прежнему является lingua franca в Интернете и продолжает предлагать лучший набор инструментов, оптимизированных для веб-разработки.

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