Решение на Пета задача от Йончо Йончев

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

Към профила на Йончо Йончев

Резултати

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

Код

REPOSITORY = 'https://github.com/speedyGonzales/ruby-retrospective-4'
# Двадесет неща, които научих.
#
# 1. Едно от най-трудните неща в едно решение е да минат skeptic ограниченията
#
# 2. Мonkey-patching-a не е добра практика и трябва да се избягва, но понякога върши добра работа,
# особено при предизвикателствата
# 3. Не е много рубистично да се ползва for цикъл, от друга страна е много по-добре да се ползва upto вместо range
#
# 4. В Enumerable, Hash има много полезни методи, хубаво е да се знаят
#
# 5. attr_accessor спестява писане и място, прави кода по-прегледен. От друга страна трябва да внимаваме до кой атрибути
# даваме достъп
# 6. На Hash.new може да се подава блок, който се вика, ако някой иска да достъпи
# несъществуващ ключ в хеша.
# 7. Понякога е красиво да се chain-ва (map/selec/ вместо each), но човек не трябва да се увлича
#
# 8. Метапрограмирането е хубаво нещо, но прави кода прекалено объркан за ниво продукшън.
#
# 9. За операторите трябва да се помни, че "and" и "or" операторите имат равен приоритет, а
# операторът && има по-висок приоритет от ||.
# 10. alias спестява повторения при дефинирането на сходни метод
#
# 11. Ако една константа ни се повтаря на повече от едно място е хубаво да се изнесе -прави кода по-четим и по-лесен за
# refactoring
# 12. Дефинирането на DSL е добре да се направи чрез `instance_eval &block`
#
# 13. За да може да се използват инстанционни променливи в ламбди, после трябва да
# използваме instance_exec вместо call.
# 14. Може да подаваме символи, които представляват име на метод, който да се
# използва като подаден блок.
# 15. Proc и lambda могат да бъдат взаимозаменяеми, но имат разлики в поведението в някои случаи. Пример: подаване на #масив от аргументи.
# 16. Ruby ri документация е доста полезна ако знаеш, как да я използваш
#
# 17. Добра практика всички методи, които не са public или са помощни да бъдат private, което отново спомага
# за капсулацията.
# 18. Да правя много класове с малко методи, вместо няколко с множество методи.
#
# 19. Хубаво е да обмислим как да използваме оптимално ООП дизайн за решението на задачи
#
# 20. Хубаво е да се commit-ва по-често...
#
# 21. Добрите тестове ти спестяват доста проблеми
#
# 22. Стриктното спазване на конвенции и стил е много важно.
#

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

Йончо обнови решението на 19.01.2015 16:30 (преди почти 10 години)

+REPOSITORY = 'https://github.com/speedyGonzales/ruby-retrospective-4'
+
+# Двадесет неща, които научих.
+#
+# 1. Едно от най-трудните неща в едно решение е да минат skeptic ограниченията
+#
+# 2. Мonkey-patching-a не е добра практика и трябва да се избягва, но понякога върши добра работа,
+# особено при предизвикателствата
+# 3. Не е много рубистично да се ползва for цикъл, от друга страна е много по-добре да се ползва upto вместо range
+#
+# 4. В Enumerable, Hash има много полезни методи, хубаво е да се знаят
+#
+# 5. attr_accessor спестява писане и място, прави кода по-прегледен. От друга страна трябва да внимаваме до кой атрибути
+# даваме достъп
+# 6. На Hash.new може да се подава блок, който се вика, ако някой иска да достъпи
+# несъществуващ ключ в хеша.
+# 7. Понякога е красиво да се chain-ва (map/selec/ вместо each), но човек не трябва да се увлича
+#
+# 8. Метапрограмирането е хубаво нещо, но прави кода прекалено объркан за ниво продукшън.
+#
+# 9. За операторите трябва да се помни, че "and" и "or" операторите имат равен приоритет, а
+# операторът && има по-висок приоритет от ||.
+# 10. alias спестява повторения при дефинирането на сходни метод
+#
+# 11. Ако една константа ни се повтаря на повече от едно място е хубаво да се изнесе -прави кода по-четим и по-лесен за
+# refactoring
+# 12. Дефинирането на DSL е добре да се направи чрез `instance_eval &block`
+#
+# 13. За да може да се използват инстанционни променливи в ламбди, после трябва да
+# използваме instance_exec вместо call.
+# 14. Може да подаваме символи, които представляват име на метод, който да се
+# използва като подаден блок.
+# 15. Proc и lambda могат да бъдат взаимозаменяеми, но имат разлики в поведението в някои случаи. Пример: подаване на #масив от аргументи.
+# 16. Ruby ri документация е доста полезна ако знаеш, как да я използваш
+#
+# 17. Добра практика всички методи, които не са public или са помощни да бъдат private, което отново спомага
+# за капсулацията.
+# 18. Да правя много класове с малко методи, вместо няколко с множество методи.
+#
+# 19. Хубаво е да обмислим как да използваме оптимално ООП дизайн за решението на задачи
+#
+# 20. Хубаво е да се commit-ва по-често...
+#
+# 21. Добрите тестове ти спестяват доста проблеми
+#
+# 22. Стриктното спазване на конвенции и стил е много важно.
+#

Решението ти не минава rake check (чупи се на тестовете на четвърта задача) и затова не получаваш пълен брой точки:

.F

Failures:

  1) Command Line Toolkit adding horizontal group does not change the behavior
     Failure/Error: horizontal do
     NoMethodError:
       undefined method `horizontal' for #<UI::TextScreen:0x007fd26cd4ff58>
     # ./specs/04_spec.rb:35:in `block (3 levels) in <top (required)>'
     # ./solutions/04.rb:4:in `instance_eval'
     # ./solutions/04.rb:4:in `draw'
     # ./specs/04_spec.rb:7:in `block (3 levels) in <top (required)>'
     # ./specs/04_spec.rb:34:in `block (2 levels) in <top (required)>'

Finished in 0.00218 seconds (files took 0.18949 seconds to load)
2 examples, 1 failure

Failed examples:

rspec ./specs/04_spec.rb:33 # Command Line Toolkit adding horizontal group does not change the behavior