Десислава обнови решението на 24.01.2016 19:50 (преди над 9 години)
+REPOSITORY = 'http://github.com/6desislava6/ruby-retrospective-2015-1'
+
+# Двадесет неща, които научих.
+#
+# 1. Полезно знание, което придобих, беше това за наличието на оператора <=>. Така си спестих куп ненужни сравнения.
+# 2. Разбрах, че е лоша практика в името на една променлива да присъстват цифри - замених 1 и 2 с "first", "second".
+# 3. Втората задача ме сблъска с функциите: drop, sample.
+# 4. От нея също осъзнах колко важно е да следя обектите си - правейки нова змия, да не засегна подадената т.е. да не променям входните данни. Нещо, което "реализирах" с dup или и с други функции, които не променят дадения обект (например map).
+# 5. Използвах Range-ове за пръв път в Руби съответно и to_a след това.
+# 6. Правейки на Range-ове разбрах разликата между .. и ...
+# 7. Наложеното ограничение "Най-много 1 ниво на влагане", ме накара да се замисля как да реализирам по-семпло и рационално 2-та each-а, които първоначално бях написала. От там открих, че в Руби съществува "product" между 2 масива.
+# 8. Третата задача беше първото място, на което приложих знанията от лекциите за Enumerable модула.
+# 9. Оператора ||=.
+# 10. Как се подава блок, как се yield-ва.
+# 11. Безкрайният цикъл - loop.
+# 12. lazy: "lazy enumerator, whose methods map/collect, flat_map/collect_concat, select/find_all, reject, grep, zip, take, #take_while, drop, and #drop_while enumerate values only on an as-needed basis. "
+# 13. Паралелното присвояване - first, second = @first, @second.
+# 14. reduce.
+# 15. Първоначалното ми решение включваше класови променливи - разбрах, че това е изключително лоша практика.
+# 16. Имах доста стилови проблеми, неспазване на конвенции като - разстояния между блоковете.
+# 17. Разбрах, че е по-правилно вместо коментари, да направя кода по-разбираем, така че коментари да не се изискват.
+# 18. Научих как се търсят константи в Руби.
+# 19. Използвах & при подаване на блок.
+# 20. Осъзнах колко важен е принципът DRY, особено с увеличаване на дължината на скрипта/кода.
В четвърта задача:
- Имeта на класове като
SixtySixDeck::HandSixtySixDeck
не са ок :) - Също
Sizer
е излишен и има странно име. По-добре щеше да е някакъв модул за работа с колекция от карти. - На някои места има и малко повече празни редове 🂪 🂺
-
Deck#sort
си предефиниралаEnumerable#sort
да променя текущите карти, а не да връща новDeck
с поредени карти, което е объркващо (за което и ние сме виновни :D). Тук също този модул за работата с колекцията от карти щеше да е полезен, защото сега ти се налага да правиш@cards.sort(&BeloteDeck.method(:sorting))
вHand
. Също можеше да еcard_sorting
или нещо пободно. - Не прави
self::class::generate_full_deck
, по-добре еself.class.generate_full_deck
. Ако беше с константаself.class::RANKS
-
HandBeloteDeck#carre
липсва?
:)
Как така HandBeloteDeck#carre липсва, като го виждам? Плюс това тестовете нямаше ли да гърмят, ако го няма? :D Sizer го използвам на две места, затова съм сметнала, че е нужен - да не копи-пействам 2 пъти едно и също. Sort така съм го направила, защото така съм разбрала от условието. Не знаех, че повечето празни редове са проблем - т.е. чела съм конвенциите, но просто обичам да си слагам повече редове. Явно е проблем?