Решение на Девета задача от Веселин Русинов

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

Към профила на Веселин Русинов

Резултати

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

Код

REPOSITORY = 'https://github.com/wireless-ghost/ruby-retrospective-2015-1'
# Двадесет неща, които научих.
#
# 1. Не е нужно да пренаписвам <=> когато го има готово и мога да го използвам.
# 2. а = а * value може да бъде заменено с a *= value .
# 3. Около параметрите, които приема дадена фунцкия, трябва да се слагат скоби def foo(first, second)
# 4. Ако фунцкуята връща булева стойност, is бива заместено от '?' накрая.
# 5. Предложените тестове трябва да се пускат преди предаване, защото е възможно да се изпусне дадена функционалност.
# 6. Да си проверям стила на кода преди да го предам и да не вярвам на идентациите в gedit.
# 7. Първоначалната настройка на vim върши чудеса за подобряване писането на код.
# 8. Не се поставят скоби около функции, които не приемат параметри.
# 9. Когато се наследява клас е добре да се провери няколко пъти какви параметри може да приема.
# 10. Когато е нужна интерполация на instance variable не е нужно да се пише "#{@foo}", а е достатъчно "#@foo".
# 11. Pretty-printer e доста полезен gem при дебъгване на проблеми в кода.
# 12. .map(&:foo) е по-добре от .map { |param| param.foo }
# 13. Всичко в Ruby e обект.
# 14. Обработката на изключения става с raise и rescue, а не с throw и catch.
# 15. Научих да използвам Regular Expressions за обработка на стрингове.
# 16. Клас макросите (attr_accessor, attr_reader, attr_writer и други) спестяват излишното писане на код и помагат за неговата четимос.
# 17. Научих коя е Sandi Metz.
# 18. Научих за разликата между '' и "" и за какво се използва.
# 19. Научих се да давам подходящи имена на променливи.
# 20. Научих се да не пиша скоби, когато не са необходими.

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

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 dd43aad Remove some unnecessary whitespaces
From /tmp/ruby-retrospective-2015-1/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
https://github.com/wireless-ghost/ruby-retrospective-2015-1/compare/767dd8dfe46...dd43aadc70a

‘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.0049 seconds
8 examples, 0 failures
OK
....................

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

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

Finished in 0.03755 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.00178 seconds
1 example, 0 failures

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

Веселин обнови решението на 27.01.2016 20:25 (преди над 9 години)

+REPOSITORY = 'https://github.com/wireless-ghost/ruby-retrospective-2015-1'
+
+# Двадесет неща, които научих.
+#
+# 1. Не е нужно да пренаписвам <=> когато го има готово и мога да го използвам.
+# 2. а = а * value може да бъде заменено с a *= value .
+# 3. Около параметрите, които приема дадена фунцкия, трябва да се слагат скоби def foo(first, second)
+# 4. Ако фунцкуята връща булева стойност, is бива заместено от '?' накрая.
+# 5. Предложените тестове трябва да се пускат преди предаване, защото е възможно да се изпусне дадена функционалност.
+# 6. Да си проверям стила на кода преди да го предам и да не вярвам на идентациите в gedit.
+# 7. Първоначалната настройка на vim върши чудеса за подобряване писането на код.
+# 8. Не се поставят скоби около функции, които не приемат параметри.
+# 9. Когато се наследява клас е добре да се провери няколко пъти какви параметри може да приема.
+# 10. Когато е нужна интерполация на instance variable не е нужно да се пише "#{@foo}", а е достатъчно "#@foo".
+# 11. Pretty-printer e доста полезен gem при дебъгване на проблеми в кода.
+# 12. .map(&:foo) е по-добре от .map { |param| param.foo }
+# 13. Всичко в Ruby e обект.
+# 14. Обработката на изключения става с raise и rescue, а не с throw и catch.
+# 15. Научих да използвам Regular Expressions за обработка на стрингове.
+# 16. Клас макросите (attr_accessor, attr_reader, attr_writer и други) спестяват излишното писане на код и помагат за неговата четимос.
+# 17. Научих коя е Sandi Metz.
+# 18. Научих за разликата между '' и "" и за какво се използва.
+# 19. Научих се да давам подходящи имена на променливи.
+# 20. Научих се да не пиша скоби, когато не са необходими.
+

Махнах 1 точка, защото по задачите има още какво да се оправя.

  • 1. - в 4-та задача можеш да използваш Comparable в Card
  • 5. - хубаво е и да пишеш и твои :)
  • 10. - това не го прави
  • 14. - не си хвърлял изключения в кода
  • 15. - и regex-ове не си използвал :D

В 4-та задача

  • Можеше да сложиш generate_belote_cards в BeloteDeck и тн.. Също кодът в generate_.. методите е еднакъв.
  • Често си писал неща от типа card.belote_rank == Card::BELOTE_RANKS.index(:king), което изглежда грешно, можеше просто card.rank == :king.
  • Не си разделил логиката отностно различните видове ръце/карти пр. ръка в белот или ръка във война, което е грешно. Различни игри са все пак. Има я логиката, че ако играя на война и имам 4 валета ще кажа 200 или ще си обявя белота, но начина, по който едно AИ разбира, че има невероятна ръка, но в друга игра, не трябва да е като си изсипал логиката за всички игри в един клас :)
  • Може да се справиш по-добре в методите за белот, двайсет, четирсет.

Виж нашето решение https://github.com/fmi/ruby-homework/blob/master/tasks/04/solution.rb.

Старай се да откриваш повтарящи неща, неща, които могат да се преизползват в кода/изискванията. Примерно имаш различните методи за генериране на тесте. Написал си ги, работят и си спрял до тук, а те правят едно и също и можеше да напишеш една помощна функция и да изчистиш малко повторенията. Друг пример е с втора задача. Методите grow и move са почти еднакви - слагат нов елемент в даден посока и в move се маха последния.

Ако погледнеш obstacle_ahead? ще видиш, че 50% от кода е излишен. Правил си нещо, променял си, тръгнало е и си го оставил :/