Решение на Пета задача от Мартин Попов

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

Към профила на Мартин Попов

Код

REPOSITORY = 'https://github.com/martopopov/ruby-retrospective-2'
# 1. Докато пишех първа задача, въобще не бях чувал за функции от по-висок ред като map, select и тн.
# => Замених всички each с map или select.
# 2. Не знаех, че има готов метод, броящ елементите на масива.
# 3. Не спазвах основни конвенции в съкращаването на имената и идентацията. Конфигурирах си текстовия
# => редактор да идентира правилно и да чисти излишния whitespace.
# 4. Не знаех за метода group_by, който буквално решава задачата с хеша.
# 5. Liskov Substitution Principle. Бях съставил йерархия от видовете критерии, но в нея този принцип беше нарушен,
# => тъй като Criteria нямаше как да бъде заменен от наследниците си.
# 6. DRY. На много места имах повторение(все още имам) и където това беше възможно(и не усложняваше кода) го премахнах.
# => Примерно съставих още един представител на йерархията от критерии, обединяващ конюнкцията и дизюнкцията, тъй като те
# => имаха еднаква структура като цяло.
# 7. Single Responsibility Principle. Сега решението ми е от малки класове и методи, изпълняващи конкретни роли в него.
# => Преди имах проблеми с конструктора на песен, както и с клас Criteria, който сега е модул. Отделни критерии конкретно
# => за име, артист и албум ми се струват по-добра имплементация от старата ми, съдържаща инстанционна променлива,
# => която отговаря за типа.
# 8. Не знаех за функцията uniq и използвах операторите & и | за изчистване на повтарящите се елементи.
# 9. Не знаех, че мога да подавам блок, използвайки &.
# 10. По-добре е класовите методи да се дефинират като self.name( примерно в случай, че реша да променя името на класа).
# 11. Не знаех как се извикват изключения.
# 12. Не знаех, че при обърнати условни изрази не е необходимо да поставяме end, което ми спестява малко код.
# 13. Не бях създал операторите '+', '*' и '-', но сега решението изглежда по-добре с тях(убедих се, че такива дребни
# => стилистични промени наистина подобряват кода).
# 14. Не знаех как се предефинира унарен минус(-@).
# 15. Може да се интерполира не само в стрингове, но и в регулярни изрази.
# 16. Помощните ми методи е по-добре да са private.
# 17. По-добре е да изведа шаблоните в отделен модул. Всъщност не го бях направил, защото ми трябваха различни
# => котви за PrivacyFilter и за Validations(начало и край на стринг). С интерполацията това се решава лесно.
# 18. Не знаех за метода include? на Range.
# 19. Не знаех как се извикват именовани групи извън регулярния израз (~[:name]), затова използвах номерирани,
# => но с именовани кодът е по-четим.
# 20. Не знаех за extend. Така чрез extend self мога да направя лесно модул само от класови методи.

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

Мартин обнови решението на 26.12.2012 20:24 (преди около 12 години)

+REPOSITORY = 'https://github.com/martopopov/ruby-retrospective-2'
+
+# 1. Докато пишех първа задача, въобще не бях чувал за функции от по-висок ред като map, select и тн.
+# => Замених всички each с map или select.
+# 2. Не знаех, че има готов метод, броящ елементите на масива.
+# 3. Не спазвах основни конвенции в съкращаването на имената и идентацията. Конфигурирах си текстовия
+# => редактор да идентира правилно и да чисти излишния whitespace.
+# 4. Не знаех за метода group_by, който буквално решава задачата с хеша.
+
+# 5. Liskov Substitution Principle. Бях съставил йерархия от видовете критерии, но в нея този принцип беше нарушен,
+# => тъй като Criteria нямаше как да бъде заменен от наследниците си.
+# 6. DRY. На много места имах повторение(все още имам) и където това беше възможно(и не усложняваше кода) го премахнах.
+# => Примерно съставих още един представител на йерархията от критерии, обединяващ конюнкцията и дизюнкцията, тъй като те
+# => имаха еднаква структура като цяло.
+# 7. Single Responsibility Principle. Сега решението ми е от малки класове и методи, изпълняващи конкретни роли в него.
+# => Преди имах проблеми с конструктора на песен, както и с клас Criteria, който сега е модул. Отделни критерии конкретно
+# => за име, артист и албум ми се струват по-добра имплементация от старата ми, съдържаща инстанционна променлива,
+# => която отговаря за типа.
+# 8. Не знаех за функцията uniq и използвах операторите & и | за изчистване на повтарящите се елементи.
+# 9. Не знаех, че мога да подавам блок, използвайки &.
+# 10. По-добре е класовите методи да се дефинират като self.name( примерно в случай, че реша да променя името на класа).
+
+# 11. Не знаех как се извикват изключения.
+# 12. Не знаех, че при обърнати условни изрази не е необходимо да поставяме end, което ми спестява малко код.
+# 13. Не бях създал операторите '+', '*' и '-', но сега решението изглежда по-добре с тях(убедих се, че такива дребни
+# => стилистични промени наистина подобряват кода).
+# 14. Не знаех как се предефинира унарен минус(-@).
+
+# 15. Може да се интерполира не само в стрингове, но и в регулярни изрази.
+# 16. Помощните ми методи е по-добре да са private.
+# 17. По-добре е да изведа шаблоните в отделен модул. Всъщност не го бях направил, защото ми трябваха различни
+# => котви за PrivacyFilter и за Validations(начало и край на стринг). С интерполацията това се решава лесно.
+# 18. Не знаех за метода include? на Range.
+# 19. Не знаех как се извикват именовани групи извън регулярния израз (~[:name]), затова използвах номерирани,
+# => но с именовани кодът е по-четим.
+# 20. Не знаех за extend. Така чрез extend self мога да направя лесно модул само от класови методи.
+