Решение на Девета задача от Десислава Цветкова

Обратно към всички решения

Към профила на Десислава Цветкова

Резултати

  • 6 точки от тестове
  • 1 отнета точка
  • 5 точки общо
  • 1 успешни тест(а)
  • 0 неуспешни тест(а)

Код

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, особено с увеличаване на дължината на скрипта/кода.

Лог от изпълнението

From https://github.com/fmi/ruby-retrospective-2015-1
 * branch            master     -> FETCH_HEAD
HEAD is now at 767dd8d Update the task name in the readme for clarity
Cloning into 'submission'...
HEAD is now at aed42fc Improving task3, changing 2nd and 4th
From /tmp/ruby-retrospective-2015-1/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
http://github.com/6desislava6/ruby-retrospective-2015-1/compare/767dd8dfe46...aed42fcb109

‘solutions/04.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/04.rb’
‘solutions/02.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/02.rb’
‘solutions/03.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/03.rb’
‘solutions/01.rb’ -> ‘/tmp/ruby-retrospective-2015-1/checker/solutions/01.rb’
OK
........

Finished in 0.00497 seconds
8 examples, 0 failures
OK
....................

Finished in 0.01146 seconds
20 examples, 0 failures
OK
....................

Finished in 0.01095 seconds
20 examples, 0 failures
OK
.........................................................

Finished in 0.03349 seconds
57 examples, 0 failures
From https://github.com/fmi/ruby-homework
 * branch            master     -> FETCH_HEAD
HEAD is now at 9dd040c Modify a test in task 8 to not include empty cells
.

Finished in 0.00165 seconds
1 example, 0 failures

История (1 версия и 2 коментара)

Десислава обнови решението на 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 така съм го направила, защото така съм разбрала от условието. Не знаех, че повечето празни редове са проблем - т.е. чела съм конвенциите, но просто обичам да си слагам повече редове. Явно е проблем?