Привет!
День 3 из 30: Ruby Coding Challenge номер 3 🥳.
Это почтовая версия это видео на Youtube
В предыдущем видео мы решили очень распространенную задачу:
Сколько простых элементов в заданном массиве
Окончательный код был ужасен. Впрочем, мне даже не жаль. Вспоминая почему:
Когда дело доходит до алгоритмов, украшение означает несколько вещей:
- Лучшая производительность
- Лучшая читаемость
- Лучшая ремонтопригодность
Ну, лучший дизайн кода
Сегодня я решу ту же проблему с (надеюсь) лучшим дизайном кода:
Ниже вы можете увидеть первую уродливую версию:
#1 — Уродливая версия алгоритма
Пора навести порядок на кухне. Было бы здорово иметь метод, который проверяет, является ли заданное число простым.
# 2 — Организация метода
У нас есть 2 основные обязанности
- перебирать массив, задавая вопросы
- проверить, является ли заданное число простым или нет
Я собираюсь разделить это на 2 метода, которые будут иметь указанные выше обязанности:
Прохладный. Пришло время добавить немного мощности Ruby и использовать блоки Ruby с методом подсчета, который мы сделали в первом видео.
№3 — Рубиновые массивы
Не знаю, как вы, а я ненавижу локальные переменные.
Пришло время избавиться от них. В Ruby можно указать, какие элементы должны быть созданы в массиве, учитывая
- начальный номер
- шаблон для генерации следующего числа
Удивительно, не так ли?
# 4 - Мошенничество: Ruby Prime Library
Теперь, когда мы знаем, как создать алгоритм вручную, в реальной жизни это обычно не имеет смысла.
В Ruby есть библиотека Prime, которая может легко выполнить эту работу.
Мы просто спрашиваем, является ли число простым или нет. Обратите внимание, что мы импортируем библиотеку Prime.
Продолжаем и заменяем метод is_prime(item):
И это наша финальная версия, немного отличающаяся от первой 😏
Вот и все. Я надеюсь, что вы узнали 1 или 2 вещи :)
Если подумать вслух, вероятно, следующей задачей кодирования будет переписывание алгоритма вручную с использованием рекурсии 😏
Спасибо за визит, будем на связи и увидимся!
Первоначально опубликовано на https://www.alexgama.io.