Решение на Десета задача от Станимира Влаева

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

Към профила на Станимира Влаева

Резултати

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

Код

REPOSITORY = 'https://github.com/sis0k0/ruby-retrospective-2015-2'
# Двадесет неща, които научих + 1 бонус :)
#
# * 5 задача *
# 1. Класовете Commit и Branch е добре да бъдат nested
# в класа ObjectStore. Логически по-правилно е
# да не могат да се инстанциират сами без да са част
# от хранилище.
#
# 2. Мога да си направя модул с 2 помощни метода
# за създаване на OperationMessage-s,
# съответно success и error.
# Необходимо е единствено след това да миксирам
# модула в класовете, в които използвам OperationMessage.
#
# 3. Не е добра практика да се ползва unless в комбинация с else.
# По-умно е първо да поставяме положителния случай.
#
# 4. Интерполацията на стрингове е по-бърза в сравнение с
# конкатенацията.
#
# * 6 задача *
# 5. Мога да използвам метода String#%, когато искам да интерполирам
# в единични кавички:
#
# '<td style="opacity: %.2f"></td>' % cell_intensity
#
# 6. https://github.com/bbatsov/ruby-style-guide препоръчва използването
# на format или sprintf, вместо String#% :
#
# format('<td style="opacity: %.2f"></td>', cell_intensity)
#
# 7. Методът Canvas#max_frequency може да работи върху instance променлива,
# вместо всеки път да му подавам аргумент.
# Така мога да използвам го използвам в много методи, като предварително съм запазила
# необходимата променлива (в случая матрица) като instance променлива.
#
# 8. Ако имам метод, който конструира таблица, той трябва да добавя всеки ред
# един по един. Във всеки ред трябва да добавя всяка клетка отново една по една.
# (?)Може би е добра идея да разделя този метод на 3:
# 1. Обхожда матрицата и вика метод, добавящ всеки ред (метод 2)
# 2. Обхожда реда и вика метод, добавящ всяка клетка (метод 3)
# 3. Форматира клетката и я добавя
# Това би спомогнало за четимостта на кода.
#
# 9. Когато искам да конкатенирам множество стрингове,
# вместо да използвам масив, в който да добавям 1 по 1 стринговете,
# мога просто да ползвам #map в комбинация с #join.
#
# 10. Разбрах как мога да използвам % в метода Turtle#move,
# за да "вкарам" @x и @y в граници.
#
# @x %= @matrix.column_count
# @y %= @matrix.row_count
#
# * 7 задача *
# 11. Мога да използвам методът Array#compact, за да премахна
# nil от даден масив.
#
# 12. Мога да използвам next, за да skip-на итерация не само във
# for, while, loop и т.н., но и например в map и each.
#
# 13. Ако имам #map, който връща nil стойности, единият вариант е
# да ги премахна с Array#compact.
# Но като се замисля, може би не е супер идея #map да връща nil.
# Мога да го заменя с #reject, за да "изключа" невалидните стойности
# или първо със #select да избера правилните и после с #map да ги обработя.
#
# * 8 задача *
# 14. Мога да си направя pattern за ArgumentsError под формата на константа и да го ползвам,
# като променям единствено името на формулата и броя на expected-actual променливите:
#
# ARGUMENTS_ERROR = "Wrong number of arguments for '%s': %s"
#
# 15. Мога да взема инстанцията на метод с method(:method_name), където
# method_name е някой дефиниран/миксиран метод.
#
# 16. Методът Method#arity е много полезен за определяне на броя
# на аргументите, които приема един метод.
# Method#arity връща броят на аргументите, ако той е фиксиран,
# или -n-1, където n е броят на задължителните аргументи,
# ако имаме и незадължителни.
#
# 17. Вместо Formulas модул, мога да използвам клас FormulaFactory,
# който се грижи да провери дали аргументите са необходимия брой,
# да калкулира резултата и да го форматира.
#
# 18. Добра идея е методът calculate на FormulaFactory, който
# се грижи за изчислението на формулата да е class method,
# а самият клас FormulaFactory да не може да се инстанциира, т.е.
# да е абстрактен.
# * Всъщност не съм сигурна доколко това е добра идея.
#
# 19. FormulaFactory може да е просто клас Formula, който
# да може да се инстанциира и да работи като обикновен клас.
#
# 20. Няма нужда да създавам отделни методи за всяка формула.
# Мога просто да използвам hash с ключове - имената на формулите
# и стойности - lambda expressions.
#
# * Бонус *
# 21. Мога да синхронизирам форкнато repo със следните команди:
#
# git fetch upstream
# git merge upstream/master
#
# където upstream е главното repo.

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

From https://github.com/fmi/ruby-retrospective-2015-2
 * branch            master     -> FETCH_HEAD
HEAD is now at 512294b Modify a test in task 8 to not include empty cells
Cloning into 'submission'...
HEAD is now at 5e623d4 Rewrites FormulaFactory class to be just Formula class
From /tmp/ruby-retrospective-2015-2/checker
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> upstream/master

Changes URL:
https://github.com/sis0k0/ruby-retrospective-2015-2/compare/512294b6dde...5e623d44cbd

‘solutions/08.rb’ -> ‘/tmp/ruby-retrospective-2015-2/checker/solutions/08.rb’
‘solutions/05.rb’ -> ‘/tmp/ruby-retrospective-2015-2/checker/solutions/05.rb’
‘solutions/07.rb’ -> ‘/tmp/ruby-retrospective-2015-2/checker/solutions/07.rb’
‘solutions/06.rb’ -> ‘/tmp/ruby-retrospective-2015-2/checker/solutions/06.rb’
OK
..............................

Finished in 0.02584 seconds
30 examples, 0 failures
OK
..............

Finished in 0.01007 seconds
14 examples, 0 failures
OK
...............................

Finished in 0.01041 seconds
31 examples, 0 failures
OK
........................................

Finished in 0.02648 seconds
40 examples, 0 failures
From https://github.com/fmi/ruby-homework
 * branch            master     -> FETCH_HEAD
HEAD is now at 9dd040c Modify a test in task 8 to not include empty cells
.

Finished in 0.00166 seconds
1 example, 0 failures

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

Станимира обнови решението на 25.01.2016 23:29 (преди почти 9 години)

+REPOSITORY = 'https://github.com/sis0k0/ruby-retrospective-2015-2'
+
+# Двадесет неща, които научих + 1 бонус :)
+#
+# * 5 задача *
+# 1. Класовете Commit и Branch е добре да бъдат nested
+# в класа ObjectStore. Логически по-правилно е
+# да не могат да се инстанциират сами без да са част
+# от хранилище.
+#
+# 2. Мога да си направя модул с 2 помощни метода
+# за създаване на OperationMessage-s,
+# съответно success и error.
+# Необходимо е единствено след това да миксирам
+# модула в класовете, в които използвам OperationMessage.
+#
+# 3. Не е добра практика да се ползва unless в комбинация с else.
+# По-умно е първо да поставяме положителния случай.
+#
+# 4. Интерполацията на стрингове е по-бърза в сравнение с
+# конкатенацията.
+#
+# * 6 задача *
+# 5. Мога да използвам метода String#%, когато искам да интерполирам
+# в единични кавички:
+#
+# '<td style="opacity: %.2f"></td>' % cell_intensity
+#
+# 6. https://github.com/bbatsov/ruby-style-guide препоръчва използването
+# на format или sprintf, вместо String#% :
+#
+# format('<td style="opacity: %.2f"></td>', cell_intensity)
+#
+# 7. Методът Canvas#max_frequency може да работи върху instance променлива,
+# вместо всеки път да му подавам аргумент.
+# Така мога да използвам го използвам в много методи, като предварително съм запазила
+# необходимата променлива (в случая матрица) като instance променлива.
+#
+# 8. Ако имам метод, който конструира таблица, той трябва да добавя всеки ред
+# един по един. Във всеки ред трябва да добавя всяка клетка отново една по една.
+# (?)Може би е добра идея да разделя този метод на 3:
+# 1. Обхожда матрицата и вика метод, добавящ всеки ред (метод 2)
+# 2. Обхожда реда и вика метод, добавящ всяка клетка (метод 3)
+# 3. Форматира клетката и я добавя
+# Това би спомогнало за четимостта на кода.
+#
+# 9. Когато искам да конкатенирам множество стрингове,
+# вместо да използвам масив, в който да добавям 1 по 1 стринговете,
+# мога просто да ползвам #map в комбинация с #join.
+#
+# 10. Разбрах как мога да използвам % в метода Turtle#move,
+# за да "вкарам" @x и @y в граници.
+#
+# @x %= @matrix.column_count
+# @y %= @matrix.row_count
+#
+# * 7 задача *
+# 11. Мога да използвам методът Array#compact, за да премахна
+# nil от даден масив.
+#
+# 12. Мога да използвам next, за да skip-на итерация не само във
+# for, while, loop и т.н., но и например в map и each.
+#
+# 13. Ако имам #map, който връща nil стойности, единият вариант е
+# да ги премахна с Array#compact.
+# Но като се замисля, може би не е супер идея #map да връща nil.
+# Мога да го заменя с #reject, за да "изключа" невалидните стойности
+# или първо със #select да избера правилните и после с #map да ги обработя.
+#
+# * 8 задача *
+# 14. Мога да си направя pattern за ArgumentsError под формата на константа и да го ползвам,
+# като променям единствено името на формулата и броя на expected-actual променливите:
+#
+# ARGUMENTS_ERROR = "Wrong number of arguments for '%s': %s"
+#
+# 15. Мога да взема инстанцията на метод с method(:method_name), където
+# method_name е някой дефиниран/миксиран метод.
+#
+# 16. Методът Method#arity е много полезен за определяне на броя
+# на аргументите, които приема един метод.
+# Method#arity връща броят на аргументите, ако той е фиксиран,
+# или -n-1, където n е броят на задължителните аргументи,
+# ако имаме и незадължителни.
+#
+# 17. Вместо Formulas модул, мога да използвам клас FormulaFactory,
+# който се грижи да провери дали аргументите са необходимия брой,
+# да калкулира резултата и да го форматира.
+#
+# 18. Добра идея е методът calculate на FormulaFactory, който
+# се грижи за изчислението на формулата да е class method,
+# а самият клас FormulaFactory да не може да се инстанциира, т.е.
+# да е абстрактен.
+# * Всъщност не съм сигурна доколко това е добра идея.
+#
+# 19. FormulaFactory може да е просто клас Formula, който
+# да може да се инстанциира и да работи като обикновен клас.
+#
+# 20. Няма нужда да създавам отделни методи за всяка формула.
+# Мога просто да използвам hash с ключове - имената на формулите
+# и стойности - lambda expressions.
+#
+# * Бонус *
+# 21. Мога да синхронизирам форкнато repo със следните команди:
+#
+# git fetch upstream
+# git merge upstream/master
+#
+# където upstream е главното repo.

Еха, 329 additions and 329 deletions.. Личи си, че си вложила доста време в ретроспективните задачи.
Харесва ми също, че си commit-вала често и си се постарала с описанието им. Браво!

Единствено използвай сегашно време от първо лице за първия ред на съобщенията. Например

Simplifies Date#to_s method

Realized that the provided string is the same as the one, that the #to_s method returns.

->

Simplify Date#to_s

I realized that the provided string is the same as the one the #to_s method returns.