Решение на Пета задача от Георги Пачов

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

Към профила на Георги Пачов

Код

REPOSITORY = 'http://github.com/GeorgiPachov/ruby-retrospective-2'
# Ето ги моите неща. Доста малко са, но са от сърце и мисля че отговарят на малкият рефакторинг, който направих за тази задачка.
#
# 1) Когато имам логически конструкции от типа:
# променлива = вярно ли е че от n елемента, k от тях удовлетворярват свойството х,
# използвам select {...}.size вместо each + if + counter...
#
# 2) Много по-лесно ми е да чета
# return false if x < 3
# отколкото
#
# if (x < 3) {
# return false;
# }
#
# 3) В Ruby неща, които са locally unresolved се третират като method call-oве.
# Поради което спокойно мога да изпусна self на много места.
#
# 4) Като използвам постфиксния запис + if и unless нещата изглеждат по-добре,
# защото са ми много по-близо до човешкия език.
#
# 5) Задачата "вземи си елементите, които ти трябват" трябва да може да се реализира БЕЗ експлицитно да се вдига нова колекция и на ръка да се блъскат елементите вътре.
#
# 6) По-приятно и лесно за четене е ако правя map или select и логиката за избиране/мапване е тежка, тя да бъде изкарана в отделен(отделни) методи.
#
#Например:
# [0....166].select { |number| number.divisors.count { |x| x.odd? } > 0 }
# да се запише като [0..166].select { |number| has_odd_divisors(number) }
#
# 7) Колкото по-dry е кода, толкова по-добре. Доста яко е че в ruby мога да inline-вам различни регулярни изрази.
#
#
# 8) Ако на предния ред съм използвал return if .... предпочитам и на последния да пиша (излишен) return. По-последователно и консистентно ми изглежда.
#
#
# 0) watchr е супер велико нещо. Моднах си скрипта така, че да ми рънва и тестовете и 'рефакторинга' беше изключително лесен (особено ако си с два монитора : )
#
# 0) Plugin-а за Ruby на Netbeans не е никак лош, но нещата просто не работят out of the box
# и без конзола не се получава.
#
# 0) DSL-ите са нещо велико. Изключително много ми харесва идеята да си моделирам езика да ми е много по-близо до проблема, който решавам.
#

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

Георги обнови решението на 30.12.2012 22:57 (преди над 11 години)

+REPOSITORY = 'http://github.com/GeorgiPachov/ruby-retrospective-2'
+
+
+# Ето ги моите неща. Доста малко са, но са от сърце и мисля че отговарят на малкият рефакторинг, който направих за тази задачка.
+#
+# 1) Когато имам логически конструкции от типа:
+# променлива = вярно ли е че от n елемента, k от тях удовлетворярват свойството х,
+# използвам select {...}.size вместо each + if + counter...
+#
+# 2) Много по-лесно ми е да чета
+# return false if x < 3
+# отколкото
+#
+# if (x < 3) {
+# return false;
+# }
+#
+# 3) В Ruby неща, които са locally unresolved се третират като method call-oве.
+# Поради което спокойно мога да изпусна self на много места.
+#
+# 4) Като използвам постфиксния запис + if и unless нещата изглеждат по-добре,
+# защото са ми много по-близо до човешкия език.
+#
+# 5) Задачата "вземи си елементите, които ти трябват" трябва да може да се реализира БЕЗ експлицитно да се вдига нова колекция и на ръка да се блъскат елементите вътре.
+#
+# 6) По-приятно и лесно за четене е ако правя map или select и логиката за избиране/мапване е тежка, тя да бъде изкарана в отделен(отделни) методи.
+#
+#Например:
+# [0....166].select { |number| number.divisors.count { |x| x.odd? } > 0 }
+# да се запише като [0..166].select { |number| has_odd_divisors(number) }
+#
+# 7) Колкото по-dry е кода, толкова по-добре. Доста яко е че в ruby мога да inline-вам различни регулярни изрази.
+#
+#
+# 8) Ако на предния ред съм използвал return if .... предпочитам и на последния да пиша (излишен) return. По-последователно и консистентно ми изглежда.
+#
+#
+# 0) watchr е супер велико нещо. Моднах си скрипта така, че да ми рънва и тестовете и 'рефакторинга' беше изключително лесен (особено ако си с два монитора : )
+#
+# 0) Plugin-а за Ruby на Netbeans не е никак лош, но нещата просто не работят out of the box
+# и без конзола не се получава.
+#
+# 0) DSL-ите са нещо велико. Изключително много ми харесва идеята да си моделирам езика да ми е много по-близо до проблема, който решавам.
+#
+