В понедельник я начал свои Рубиновые крестики-нолики. Это 4-й крестики-нолики, которые я сделал. Раньше я делал это на Lua, Java, CSharp, а теперь и на Ruby.
Как бы это ни повторялось, приятно видеть улучшения у всех, кого я делаю. Прошло всего пару месяцев с тех пор, как я в последний раз играл в крестики-нолики в CSharp, и я уже чувствую, что сделал много ошибок, которые я надеюсь исправить в Ruby, который я делаю сейчас.
Например, теперь я действительно осознаю, сколько строк в моих классах. В моих предыдущих крестиках-ноликах было много классов по 100–150 линий, что просто неприемлемо. У большинства классов должна быть только одна обязанность, и если класс имеет более 100 строк, велика вероятность, что ответственности больше одной; что было верно в моих старых крестиках-ноликах. Ruby также позволяет очень легко писать меньше кода, пара примеров:
До:
array = [1, 2, 3] array.each do |number| puts number end
После:
array = [1, 2, 3] array.all? {|number| puts number}
До:
@array = [1, 2, 3] def contains_one?(array) array.each do |number| return true if number == 1 end return false end
После:
@array = [1, 2, 3] def contains_one?(array) array.any? {|number| number == 1} end
До:
@users = [{name: "Will", age: 17}, {name: "Bob", age: 17}] def find_users_by_name(name) requested_users = [] @users.each do |user| requested_users << user if user.name == name end return requested_users end
После:
@users = [{name: "Will", age: 17}, {name: "Bob", age: 17}] def find_user_by_name(name) @users.select {|user| user.name == name} end