Это обновление моего участия в конкурсе #100DaysOfCode.

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

Я сказал ей, что вся астрономия состоит из математики. Ей это не понравилось, она стала защищаться, и мы подрались. Астрономия — это не математика, возразила она. Я могу только представить, насколько больше она разозлилась бы, если бы я попытался объяснить ей, что значительная часть астрологии — это тоже математика.

Математика пронизывает абсолютно все вокруг нас, и большинство из нас ничуть не мудрее, потому что мы намеренно ищем невежества в этом вопросе. Заметьте, это «мы» меня не касается: в бакалавриате я изучал математику. Математика для меня невероятно захватывающая, креативная и логичная, как только вы достигаете точки, когда вы на самом деле делаете крутые вещи, и ваш профессор математики больше не кричит на вас, что ваша алгебра отстой.

Как, черт возьми, связаны правильные вопросы, мой бывший и дерьмовая алгебра? Ну… если так выразиться, наверное, много. Но это также хорошо иллюстрирует мою основную идею этой статьи: когда вы знаете, что ищете, вы, как правило, задаете правильные вопросы, чтобы получить необходимую информацию. Когда вы не знаете, все, с чем вы сталкиваетесь, может быть зацепкой.

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

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

Я упоминал ранее, что нахожу математику увлекательной, творческой и логичной; неудивительно, что математика и кодирование хорошо сочетаются. И я не имею в виду очевидное «ну, Джошуа, нам нужна математика, чтобы мы могли программировать». Я имею в виду, что в том же смысле существует множество способов решить задачу по программированию, существует множество способов решить математическую задачу, и вы действительно ограничены только своими знаниями доступных средств и методов и вашими способностями. собственное творческое мастерство в обоих случаях. Когда вы хорошо разбираетесь в средствах и методах и не боитесь с ними возиться, то решение на самом деле зависит от того, как вы поставите проблему.

Если вы зададите правильные вопросы, вы получите правильные ответы.

Решить математическую задачу было просто. За бесчисленные часы, которые я потратил на исследования и поиски методов, необходимых мне для решения предыдущих задач, я наткнулся на бесчисленное количество математических методов. Так что я уже знал, что существуют методы для установления уравнения. Как только я составил уравнение, вытащил и подключил нужные переменные, мне нужно было понять, как лучше всего представить информацию. Создаю ли я новый массив и добавляю новые литералы объектов? Или я могу использовать существующий массив и существующие литералы объектов и просто изменить их?

Сначала я подумал, что путь к новому массиву имеет смысл. Однако, учитывая мою склонность к чрезмерному усложнению, я решил пока отложить это в сторону и работать с идеей простого редактирования существующих элементов. Я почти уверен, что сэкономил себе как минимум 5 строк кода, идя по этому пути: создание нового свойства в существующем объекте довольно безболезненно, как и удаление свойства. В общем, я думаю, что потратил около 15 минут на эту задачу.

Вот окончательный код:

function orbitalPeriod(arr) {
  let GM = 398600.4418;
  let earthRadius = 6367.4447;
  for (let i = 0; i < arr.length; i++) {
    arr[i].orbitalPeriod = Math.round(2 * Math.PI * Math.sqrt((Math.pow((arr[i].avgAlt + earthRadius), 3) / GM)));
    delete arr[i].avgAlt;
  }
  return arr;
}

Посмотрите на всю эту математику…

42/100