Для чего в Домашке 12-4 ([homework_id=50]) написана проверка @current_question
?
Я прикрепил zip папку, со своим вариантом. Подскажите, верен он или нет.
У нас объект Test
хранит свое текущее состояние: он знает сколько уже набрал очков юзер (@points
) и индекс текущего вопроса в массиве вопросов (этот индекс и хранится в @current_question
).
В основном коде программы создается объект класса Test
и в цикле опрашивается:
# основной цикл программы
while test.next_question == true do
#...
При каждом вызове метода next_question
указатель @current_question
увеличивается на единицу до тех пор, пока не дойдет до конца массива вопросов (эти проверки и идут внутри метода next_question
при каждом вызове).
Ваша программа сделана немного по-другому. И хотя судя по результату работы она верная, есть несколько некрасивых мест, до которых вы с опытом и сами дойдете:
Test#next_question(name)
судя по названию должен лишь задавать "следующий вопрос", а вы весь игровой цикл в нем реализовали. Name#user_input
во-первых при каждом вызове выполняет заново код, который нужно выполнить один раз (проставить кодировки, записать введенное имя), а во-вторых вы его используете дважды в коде программы. По сути программы нужно хранить только имя — строку. Но класс Строка
уже реализован в руби, так и используйте ее. Не нужно придумывать свой класс, если он повторяет существующие.
Как работает (@current_question) мне понятно. Я наверное не совсем правильно поставил вопрос.Просто мне показалось, что можно обойтись одним (@points) и не использовать (@current_question) или я не прав? Кстати прикрепил исправленный (ZIP) вариант. Гляньте пожалуйста.
в @points
хранится счет пользователя (сколько очков он набрал), а как узнать на каком сейчас вопросе находится пользователь? Вот для этого и нужен указатель.
В новом варианте вы избавились от лишнего класса Name, но весь игровой цикл реалзован по-прежнему в Test#next_question
. Здесь достаточно будет просто дать методу подходящее имя (например play
).