Решение на Седма задача - ретроспекция от Виктор Маринов

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

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

Резултати

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

Код

REPOSITORY = 'https://github.com/ViktorMarinov/ruby-retrospective-2016'
# Двадесет неща, които научих.
#
# 1. Няма смисъл да се прави излишна проверка с цел оптимизиране на малка операция, защото кода изглежда по-сложен.
# 2. Ако имаме два близки по смисъл хеша с еднакви ключове, може да ги обединим.
#
# 3. Няма нужда от clone при използване на map, защото map не променя обекта.
# 4. Вместо string#partition може да се използва string#split с ограничение на елементите.
# 5. По-добре да има малко дублиране на код в две функции, отколкото да имаме обща функция, която се съобразява с двете извикващи я.
# 6. Вместо each_with_object({}) може да се използва map + to_h
#
# 7. Вместо да конструираме дълъг низ с +, е по-добре да се приравни на променлива и да добавяме към нея с <<.
# 8. Когато няма нужда допълнителните класове, които използваме, да се виждат навън, е по-добре да са дефинирани вътре в класа, в който ги използваме.
# 9. Няма нужда всеки литерален низ или число да се ползва през константа (както например в Java).
# 10. Няма нужда от attr_accessor-и ако ги използваме само в класа.
#
# 11. Може да се използва "expect(something).to be <оператор_за_сравнение> other_thing" вместо expect(сравнението).to be(true)
# 12. Подреждането на скобите на последователните сходни извиквания на expect дава по-добър вид и тестът е по-разбираем.
# 13. Вместо method_defined? може да се използва matcher-a respond_to?
# 14. Вместо expect(something.include?).to be(true) може да се използва expect(somethin).to include.
# 15. Различно е да се тества to be < и not to be >.
# 16. Общ родител DataStore е грешна абстракция, понеже предполага генериране на идентификатори, които може да не са необходими в други DataStores.
# 17. Вместо each.all? може да се използва просто all?.
# 18. При триене на записи, вместо find + delete_if, може да се използва reject!.
# За триенето в HashStore, вместо да се обхождат всички записи и да се проверява дали съвпадат, е по-добре да се обхождат намерените.
# 19. Вътрешно може да представим обекта като Hash, вместо да го преобразуваме всеки път.
# 20. Няма нужда от inherited hook, понеже знаем че се извиква метода attributes.

Лог от изпълнението

From https://github.com/fmi/ruby-retrospective-2016
 * branch            master     -> FETCH_HEAD
HEAD is now at a22cf37 Set rubocop version to 0.46.0 to fix obsolete cop errors
Cloning into 'submission'...
HEAD is now at 91ee34b other tasks refactored
From /tmp/ruby-retrospective-2016/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
https://github.com/ViktorMarinov/ruby-retrospective-2016/compare/1f710b00c26...91ee34b7d79

'tasks/1/solution.rb' -> '/tmp/ruby-retrospective-2016/checker/tasks/1/solution.rb'
'tasks/2/solution.rb' -> '/tmp/ruby-retrospective-2016/checker/tasks/2/solution.rb'
'tasks/3/solution.rb' -> '/tmp/ruby-retrospective-2016/checker/tasks/3/solution.rb'
'tasks/4/solution.rb' -> '/tmp/ruby-retrospective-2016/checker/tasks/4/solution.rb'
'tasks/5/solution.rb' -> '/tmp/ruby-retrospective-2016/checker/tasks/5/solution.rb'
Inspecting 1 file
.

1 file inspected, no offenses detected
.................

Finished in 0.00463 seconds
17 examples, 0 failures
Inspecting 1 file
.

1 file inspected, no offenses detected
...............

Finished in 0.00539 seconds
15 examples, 0 failures
Inspecting 1 file
.

1 file inspected, no offenses detected

...............

Finished in 0.00565 seconds
15 examples, 0 failures
Inspecting 1 file
.

1 file inspected, no offenses detected
....................

Finished in 19.29 seconds
20 examples, 0 failures
Inspecting 1 file
.

1 file inspected, no offenses detected
.........................

Finished in 0.01895 seconds
25 examples, 0 failures
.

Finished in 0.00162 seconds
1 example, 0 failures

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

Виктор обнови решението на 14.01.2017 23:44 (преди почти 8 години)

+REPOSITORY = 'https://github.com/ViktorMarinov/ruby-retrospective-2016'
+
+# Двадесет неща, които научих.
+#
+# 1. Няма смисъл да се прави излишна проверка с цел оптимизиране на малка операция, защото кода изглежда по-сложен.
+# 2. Ако имаме два близки по смисъл хеша с еднакви ключове, може да ги обединим.
+#
+# 3. Няма нужда от clone при използване на map, защото map не променя обекта.
+# 4. Вместо string#partition може да се използва string#split с ограничение на елементите.
+# 5. По-добре да има малко дублиране на код в две функции, отколкото да имаме обща функция, която се съобразява с двете извикващи я.
+# 6. Вместо each_with_object({}) може да се използва map + to_h
+#
+# 7. Вместо да конструираме дълъг низ с +, е по-добре да се приравни на променлива и да добавяме към нея с <<.
+# 8. Когато няма нужда допълнителните класове, които използваме, да се виждат навън, е по-добре да са дефинирани вътре в класа, в който ги използваме.
+# 9. Няма нужда всеки литерален низ или число да се ползва през константа (както например в Java).
+# 10. Няма нужда от attr_accessor-и ако ги използваме само в класа.
+#
+# 11. Може да се използва "expect(something).to be <оператор_за_сравнение> other_thing" вместо expect(сравнението).to be(true)
+# 12. Подреждането на скобите на последователните сходни извиквания на expect дава по-добър вид и тестът е по-разбираем.
+# 13. Вместо method_defined? може да се използва matcher-a respond_to?
+# 14. Вместо expect(something.include?).to be(true) може да се използва expect(somethin).to include.
+# 15. Различно е да се тества to be < и not to be >.
+
+# 16. Общ родител DataStore е грешна абстракция, понеже предполага генериране на идентификатори, които може да не са необходими в други DataStores.
+# 17. Вместо each.all? може да се използва просто all?.
+# 18. При триене на записи, вместо find + delete_if, може да се използва reject!.
+# За триенето в HashStore, вместо да се обхождат всички записи и да се проверява дали съвпадат, е по-добре да се обхождат намерените.
+# 19. Вътрешно може да представим обекта като Hash, вместо да го преобразуваме всеки път.
+# 20. Няма нужда от inherited hook, понеже знаем че се извиква метода attributes.