Решение на Пета задача от Борислава Аладжова

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

Към профила на Борислава Аладжова

Резултати

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

Код

REPOSITORY = 'https://github.com/baladzhova/ruby-retrospective-3'
# Двадесет неща, които научих.
#
# 1. (x..y) е по-четимо от x.upto(y) за по-кратки аргументи.
# 2. Ако имаме нужда от променлива като result, да помислим дали не трябва да променим дизайна.
# 3. Преди да пишем метод да проверим дали вече няма такъв в стандартната библиотека.
# 4. Да се използва #map(&:) при прилагане на един и същ метод на последователност от аргументи.
# 5. Да не се дава неоправдан достъп до полетата или методите на клас.
# 6. Да не се използват излишни скоби, които могат да бъдат объркващи и да попречат на четимостта на кода.
# 7. Ако една задача може да се извърши в рамките на класа, да се избягва излишно използване на друга функционалност, освен ако това няма да доведе до повтаряне на много код.
# (1)
# def task_todo
# @todo_list.count { |task| task.status == :todo }
# end
#
# (2)
# def tasks_todo
# tasks_information :todo
# end
#
# def tasks_information(status)
# filter(Criteria.status status).count
# end
#
# filter създава нов TodoList, Criteria.status - нов Criteria, а в крайна сметка пак достига до сравняване полетата на съответния task.
#
# 8. Ако имаме дублиране на код, да помислим за по-оптимално решение.
# 9. Винаги да помислим за по-кратък и по-прост начин на записване.
# (1)
# def tasks_todo
# tasks.select { |task| task.status == :todo }.size
# end
#
# (2)
# def tasks_todo
# @entries.count { |entry| entry.status == :todo }
# end
#
# 10. При chain-ване на методи в скоби се слагат аргументите, а не отделните методи.
# 11. Да се използват синоними, ако трябва да има няколко метода с еднаква функционалност.
# 12. Comparable използва <=> за да имплементира останалите оператори за сравнение, не е нужно да се дефинират поотделно.
# 13. Вместо [] << object << object... може да се използва литерален синтаксис, който е по-четим - [object, object, ....].
# 14. Методите на клас/модул не трябва да зависят от вътрешната имплементация на обекти от други класове/модули, които използват.
# 15. Стрингове и други променливи, които се използват в клас/модул, но не са полета, могат да се пазят в константа, в случай че се наложи промяна на значението им в бъдеще. Друг вариант е да се създаде метод, чиято единствена функционалност е да връща съответната стойност.
# 16. Може да се използва placeholder, когато искаме да вмъкнем текст на произволно място в друг текст.
# 17. Когато подаваме блок операции, може просто да дефинираме method_missing, който да връща аргумента като символ.
# 18. Ако искаме всеки метод от подаден блок операции да изпълнява една и съща функционалност, може да използваме define_method. А за специфичните за всеки метод операции - отделна функция, например, с when.
# 19. Да се подравняват аргументите в масив /хеш, разположен на няколко реда.
# 20. Да предпочитаме Struct, ако единствените методи са за достъпване на полетата.

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

Борислава обнови решението на 22.01.2014 11:51 (преди почти 11 години)

+REPOSITORY = 'https://github.com/baladzhova/ruby-retrospective-3'
+
+# Двадесет неща, които научих.
+#
+# 1. (x..y) е по-четимо от x.upto(y) за по-кратки аргументи.
+# 2. Ако имаме нужда от променлива като result, да помислим дали не трябва да променим дизайна.
+# 3. Преди да пишем метод да проверим дали вече няма такъв в стандартната библиотека.
+# 4. Да се използва #map(&:) при прилагане на един и същ метод на последователност от аргументи.
+# 5. Да не се дава неоправдан достъп до полетата или методите на клас.
+# 6. Да не се използват излишни скоби, които могат да бъдат объркващи и да попречат на четимостта на кода.
+# 7. Ако една задача може да се извърши в рамките на класа, да се избягва излишно използване на друга функционалност, освен ако това няма да доведе до повтаряне на много код.
+# (1)
+# def task_todo
+# @todo_list.count { |task| task.status == :todo }
+# end
+#
+# (2)
+# def tasks_todo
+# tasks_information :todo
+# end
+#
+# def tasks_information(status)
+# filter(Criteria.status status).count
+# end
+#
+# filter създава нов TodoList, Criteria.status - нов Criteria, а в крайна сметка пак достига до сравняване полетата на съответния task.
+#
+# 8. Ако имаме дублиране на код, да помислим за по-оптимално решение.
+# 9. Винаги да помислим за по-кратък и по-прост начин на записване.
+# (1)
+# def tasks_todo
+# tasks.select { |task| task.status == :todo }.size
+# end
+#
+# (2)
+# def tasks_todo
+# @entries.count { |entry| entry.status == :todo }
+# end
+#
+# 10. При chain-ване на методи в скоби се слагат аргументите, а не отделните методи.
+# 11. Да се използват синоними, ако трябва да има няколко метода с еднаква функционалност.
+# 12. Comparable използва <=> за да имплементира останалите оператори за сравнение, не е нужно да се дефинират поотделно.
+# 13. Вместо [] << object << object... може да се използва литерален синтаксис, който е по-четим - [object, object, ....].
+# 14. Методите на клас/модул не трябва да зависят от вътрешната имплементация на обекти от други класове/модули, които използват.
+# 15. Стрингове и други променливи, които се използват в клас/модул, но не са полета, могат да се пазят в константа, в случай че се наложи промяна на значението им в бъдеще. Друг вариант е да се създаде метод, чиято единствена функционалност е да връща съответната стойност.
+# 16. Може да се използва placeholder, когато искаме да вмъкнем текст на произволно място в друг текст.
+# 17. Когато подаваме блок операции, може просто да дефинираме method_missing, който да връща аргумента като символ.
+# 18. Ако искаме всеки метод от подаден блок операции да изпълнява една и съща функционалност, може да използваме define_method. А за специфичните за всеки метод операции - отделна функция, например, с when.
+# 19. Да се подравняват аргументите в масив /хеш, разположен на няколко реда.
+# 20. Да предпочитаме Struct, ако единствените методи са за достъпване на полетата.

За съжаление не ти минават няки тестове и няма как да ти дам точки. На едно място имаш проблем с идентацията. Като изключим това, решенията ти изглеждат окей.

От друга страна, нещата, които си описала като научени, ми харесват, затова ще ти дам бонус точки.