Георги обнови решението на 26.01.2016 21:54 (преди около 9 години)
+REPOSITORY = 'http://github.com/gk95/ruby-retrospective-2015-1'
+
+# Двадесет неща, които научих.
+#
+# 01. По-добра четимост чрез отделени редове за всеки елемент на hash обект.
+# 02. Поставяне на запетая след последния елемент от hash обект.
+# 03. Използване на оператор за сравнение <=>.
+# 04. Разликата между '..' и '...' при range.
+# 05. (x...y).to_a е по ясен вариант на [*x..y-1].
+# 06. По изчистен вид чрез заместване на dup и push с +
+# 07. Изваждане на по-сложна логика в отделен метод, с цел по-лесно четим и
+# разбираем код.
+# 08. Употреба на '** 0.5' вместо по-дългото 'Math.sqrt'.
+# 09. Метода each от Enumerable да препредава подаден блок и по този начин
+# да се запазва свойството, блок да се предава като аргумент на метода.
+# 10. Еквивалентността на slice!(0) с shift и slice!(-1) с pop.
+# 11. По-кратък код чрез а.sort_by! вместо arr = аrr.sort_by
+# 12. Методите, които се използват само в тялото на класа да са private.
+# 13. all? вместо each и if за да се провери дали всички елементи
+# спазват дадено условие
+# 14. enum_for създава удобен за работа с map, each, ... енумератор
+# 15. take_while може да работи с безкрайни списъци
+# 16. По ясен код в конструктора на Deck::Hand, чрез премахване на излишния super
+# 17. Методите ranks и suits всеки път създават нов масиви, което не е добра идея
+# 18. Метода << понякога седи естетически по-добре от push.
+# 19. Struct.new спестява място и писане на ==, attr, конструктор ...
+# 20. В контекста на първа задача (snake + food), ще работи "по-бързо" от
+# (snake | food), тъй като + не мисли за дублирани стойности,
+# а в задачата такива не са възможни.
+##
Не бих използвал Struct
за спестяване на attr_*
и initialize
. Това по-скоро е hash, в който ключовете са известни. Някаква структура от данни :) Даже е Enumerable
.
Като погледнаш четвърта задача и ние леко сме си оставили ръцете. Пък и трябваше да направим поне Card = Struct.new(:rank, :suit)
http://ruby-doc.org/core-2.3.0/Struct.html#new-method.