После того, как я закончил коан Ruby Hash, концепция все еще оставалась немного размытой, поэтому я хотел изучить ее глубже. Я лучше всего учусь, работая над проектами, поэтому я создал что-то, опираясь на данные, хранящиеся в хэше.

Хэши — это, конечно, метод хранения данных, который связывает ключ со значением. Когда вы вызываете определенную клавишу, она выводит соответствующее значение. Достаточно легко, верно?

Я использовал массивы в приложении Tic Tac Toe, но никогда не использовал хэши, поэтому я решил создать что-то простое, где вы можете отбросить любой год и узнать, какой фильм получил Оскар за лучший фильм (в следующий раз я выберу что-нибудь с меньшим списком…). Вот как выглядит программа:

…… много-много пар позже (полный код здесь)

После того, как я заполнил несколько значений в хэше oscars, я приступил к логике. В итоге я использовал регистр, чтобы различать ответы пользователей. Программа спрашивает вас, хотите ли вы узнать данного победителя, и просит указать год. Если он не существует (или не является числом), программа улавливает его следующей строкой:

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

Что я узнал, играя с хэшами

Поскольку хэши принадлежат классу Array, вы можете использовать методы Enumerable. Я уже знал о .nil? метод обнаружения неверного пользовательского ввода, но я не знал, как искать в хэше существующие значения. Я просмотрел список Enumerable и нашел .detect, который в итоге отлично сработал. Сначала я попробовал .exist?, но оказалось, что это недопустимый метод.

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

Чему мне еще нужно научиться

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