Решение на Пета задача от Христо Хърсев

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

Към профила на Христо Хърсев

Резултати

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

Код

REPOSITORY = 'http://github.com/hhursev/ruby-retrospective-3'
# Двадесет неща, които научих.
#
# 1. разбрах, че мога, а и е добре откъм четимост, да подавам блокове не само на
# map и each, ами и на none?, any?, all?
#
# 2. на 1ва задача в prime_factors няма абсолютно никакъв смисъл да проверяваме
# дали числото, до което сме стигнали итерацията, е prime
#
# 3. 1.upto(self).map { |number| Rational(1, number) }.reduce(:+) е много по
# четимо от (1..abs).reduce { |sum, n| sum += 1 / n.to_r }.to_r
#
# 4. Ако имаме inline блок, в който условието става прекалено тежко за четене,
# е доста вероятно да не се възползваме оптимално от вградената
# функционалност която Ruby ни дава
#
# 5. Да слагам скобички около аргументите при дефенирането на метод.
# (Винаги ги изтървам при initialize метода например)
#
# 6. Новия синтаксис на ламбата не ми харесва, но пък пести ценни колони
#
# 7. something.(task) е грозноват и неприятен за четене синтаксис на
# something.call(task), но пести колони
#
# 8. да не правя нечетими работи, само за да пестя колони.. Смисъла на
# ограниченията в колоните е да станат нещата по-четими, а не по-кратки...
#
# 9. в констурктура на Criteria е по подходящо да подаваме направо блок а не
# lambda / proc аргумент (this is RUBY)
#
# 10. когато имаме атрибут на клас, който едновременно с това има attr_reader,
# някак си предпочитам вътрешно в класа да го използвам с @, за да е
# по-удобно за разчитане после. Все пак на моменти става доста грозно
#
# 11. freeze е добре да се ползва за да укажем че даден стринг е immutable.
# предава по ясна представа как точно се ползва дадения стринг, не толкова
# откъм повишаване на ефикасност на кода
#
# 12. Hash > масив от масиви в някои случаи. Като например в задачатa за
# Canvas-а. Реших да ползвам hash в проекта си и там е по-добре да се
# ползва масив от масиви. (shit happens)
#
# 13. join_pixels_in(line) метода, който беше дефинирал в решението на задачата
# с canvas-а, може на пръв поглед да е доста ненужен, но повишава значително
# четимостта на кода. Добре е да се хващат и създават подобни методи.
#
# 14. true/false за стойности на координатите в canvas-а има няколко на брой
# значими предимства пред 1 / 0. (особено в Ruby където всичко е True
# освен нещата, които се оценят на False :D)
#
# 15. Изключително приятна имплементация на Renderers модула. Може доста време
# човек да си я гледа. Елегантно използване на ООП моделиране, разбиване
# на методи, преизползване на такива, наследяване и т.н.
#
# 16. Да не оставям дреболии за "по-нататъшно" оправяне
# (не заменянето на на attr_accessor с reader ми изгърмява тестове на 3-та)
#
# 17. Ако имам модул и в него класове обвързани един с друг, и ако който и да е
# метод да променя, от който и да е клас, чупи функционалността на поне
# 2 други значи нещо не е правилно в организацията на класовете
# (bawtibabababa..)
#
# 18. Хубаво е методи, които дефинираме и няма да се използват извън класа да са
# private. Чете се по-лесно кода след това.
#
# 19. Ако имаш кола: include-ваш Enumerable, дефинираш each и получаваш танк.
#
# 20. Литерален синтаксис общо взето навсякъде, където е възможно.
#
# 21. method_missing е доста удобен и някак си елегантен на вид начин за
# метапрограмиране. Комбинирано с това, че по всяко време може да се отвори
# даден клас и да се добавя / променя функциоиналност имаме доста сериозен
# badass в лицето на Ruby откъм метапрограмиране
#
# 22. За пръв път commit-вам в git пач промени от файл. (Мноу яко)

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

Христо обнови решението на 22.01.2014 00:11 (преди около 10 години)

+REPOSITORY = 'http://github.com/hhursev/ruby-retrospective-3'
+
+# Двадесет неща, които научих.
+#
+# 1. разбрах, че мога, а и е добре откъм четимост, да подавам блокове не само на
+# map и each, ами и на none?, any?, all?
+#
+# 2. на 1ва задача в prime_factors няма абсолютно никакъв смисъл да проверяваме
+# дали числото, до което сме стигнали итерацията, е prime
+#
+# 3. 1.upto(self).map { |number| Rational(1, number) }.reduce(:+) е много по
+# четимо от (1..abs).reduce { |sum, n| sum += 1 / n.to_r }.to_r
+#
+# 4. Ако имаме inline блок, в който условието става прекалено тежко за четене,
+# е доста вероятно да не се възползваме оптимално от вградената
+# функционалност която Ruby ни дава
+#
+# 5. Да слагам скобички около аргументите при дефенирането на метод.
+# (Винаги ги изтървам при initialize метода например)
+#
+# 6. Новия синтаксис на ламбата не ми харесва, но пък пести ценни колони
+#
+# 7. something.(task) е грозноват и неприятен за четене синтаксис на
+# something.call(task), но пести колони
+#
+# 8. да не правя нечетими работи, само за да пестя колони.. Смисъла на
+# ограниченията в колоните е да станат нещата по-четими, а не по-кратки...
+#
+# 9. в констурктура на Criteria е по подходящо да подаваме направо блок а не
+# lambda / proc аргумент (this is RUBY)
+#
+# 10. когато имаме атрибут на клас, който едновременно с това има attr_reader,
+# някак си предпочитам вътрешно в класа да го използвам с @, за да е
+# по-удобно за разчитане после. Все пак на моменти става доста грозно
+#
+# 11. freeze е добре да се ползва за да укажем че даден стринг е immutable.
+# предава по ясна представа как точно се ползва дадения стринг, не толкова
+# откъм повишаване на ефикасност на кода
+#
+# 12. Hash > масив от масиви в някои случаи. Като например в задачатa за
+# Canvas-а. Реших да ползвам hash в проекта си и там е по-добре да се
+# ползва масив от масиви. (shit happens)
+#
+# 13. join_pixels_in(line) метода, който беше дефинирал в решението на задачата
+# с canvas-а, може на пръв поглед да е доста ненужен, но повишава значително
+# четимостта на кода. Добре е да се хващат и създават подобни методи.
+#
+# 14. true/false за стойности на координатите в canvas-а има няколко на брой
+# значими предимства пред 1 / 0. (особено в Ruby където всичко е True
+# освен нещата, които се оценят на False :D)
+#
+# 15. Изключително приятна имплементация на Renderers модула. Може доста време
+# човек да си я гледа. Елегантно използване на ООП моделиране, разбиване
+# на методи, преизползване на такива, наследяване и т.н.
+#
+# 16. Да не оставям дреболии за "по-нататъшно" оправяне
+# (не заменянето на на attr_accessor с reader ми изгърмява тестове на 3-та)
+#
+# 17. Ако имам модул и в него класове обвързани един с друг, и ако който и да е
+# метод да променя, от който и да е клас, чупи функционалността на поне
+# 2 други значи нещо не е правилно в организацията на класовете
+# (bawtibabababa..)
+#
+# 18. Хубаво е методи, които дефинираме и няма да се използват извън класа да са
+# private. Чете се по-лесно кода след това.
+#
+# 19. Ако имаш кола: include-ваш Enumerable, дефинираш each и получаваш танк.
+#
+# 20. Литерален синтаксис общо взето навсякъде, където е възможно.
+#
+# 21. method_missing е доста удобен и някак си елегантен на вид начин за
+# метапрограмиране. Комбинирано с това, че по всяко време може да се отвори
+# даден клас и да се добавя / променя функциоиналност имаме доста сериозен
+# badass в лицето на Ruby откъм метапрограмиране
+#
+# 22. За пръв път commit-вам в git пач промени от файл. (Мноу яко)