Решение на Четвърта задача от Венета Денчева

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

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

Резултати

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

Код

REPOSITORY = 'http://github.com/vdencheva/ruby-retrospective-1/'
# Двадесет неща, които научих.
#
# от задача 1:
# 01. Да кръщавам променливите с имена в normal_snake_case. Освен това,
# че имената е добре да са по-дълги и ясни за разбиране.
# 02. Няма нужда да уточнявам със self извикването на методи #each,
# #inject и т.н.
# 03. Научих за #each_cons и #count и като цяло да търся дали има метод,
# който прави това, което искам да постигна.
# 04. Че мога да използвам #tap, когато искам след обработката да върна
# същия обект.
#
# от задача 2:
# 05. Че мога да подавам направо '&:strip' като параметър на #map, вместо
# да описвам в блок извикването на #strip над всеки от елементите.
# 06. Да използвам += с масиви, вместо да конструирам #each и да добавям
# всеки елемент с #push.
# 07. Че има методи #chop и #chomp и как да ги използвам.
# 08. Да използвам метода #all?(съответно #any?, #none?, #one?), вместо
# да правя цикъл с #each и да проверявам изпълнени ли са нужните условия.
# 09. Че в Ruby фунцкията xor се представя с '^'.
# 10. Да кръщавам методите по-ясно. На пример: #name? -> #matches_name?,
# #artist? -> #matches_artist?, #tags_by_artist -> #add_tags_for_artist.
# 11. Осъзнах, че е излишно да връщам '@artist == artist ? true : false',
# когато ефектът ще е същия от '@artist == artist'.
# 12. Да се старая методите ми да изпълняват точно една функция. За това отделих
# обработката на входните данни в метода #create_song на класа Collection.
# 13. Преместих филтрирането на песните в класа Song. По този начин Collection
# няма нужда да знае подробности за структурата на Song(освен че метод
# #matches?), а при добавяне на нов критерий за търсене, се налага промяна
# само в класа Song, но не и в Collection.
#
# от задача 3:
# 14. Че има метод #min в Enumerable, който връща елемента с най-малка стойност.
# 15. Да разделям по-сложните аритметични изрази в отделни променливи,
# за да е ясно как и какво всъщност се изчислява в тях.
# 16. Да използвам константи в Ruby.
# 17. Да използвам - дефинирам и извиквам setter-и.
# 18. Да използвам Null Objects(NoDiscount и NoCoupon). Така не се налага
# да правя проверки дали обектите са nil или не.
# 19. Да отделям свързаните класовете(като тези за отстъпките и купоните)
# в модули.
# 20. Класовете да имат точно една отговорност.
# За това съм отделила методите за отпечатване на фактурата в нов клас Invoice
# и съм създала нов клас CartItem, който изчислява цените и отстъпките на
# продуктите, добавени в количката.

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

Венета обнови решението на 13.11.2011 14:04 (преди над 12 години)

+REPOSITORY = 'http://github.com/vdencheva/ruby-retrospective-1/'
+
+# Двадесет неща, които научих.
+#
+# от задача 1:
+# 01. Да кръщавам променливите с имена в normal_snake_case. Освен това,
+# че имената е добре да са по-дълги и ясни за разбиране.
+# 02. Няма нужда да уточнявам със self извикването на методи #each,
+# #inject и т.н.
+# 03. Научих за #each_cons и #count и като цяло да търся дали има метод,
+# който прави това, което искам да постигна.
+# 04. Че мога да използвам #tap, когато искам след обработката да върна
+# същия обект.
+#
+# от задача 2:
+# 05. Че мога да подавам направо '&:strip' като параметър на #map, вместо
+# да описвам в блок извикването на #strip над всеки от елементите.
+# 06. Да използвам += с масиви, вместо да конструирам #each и да добавям
+# всеки елемент с #push.
+# 07. Че има методи #chop и #chomp и как да ги използвам.
+# 08. Да използвам метода #all?(съответно #any?, #none?, #one?), вместо
+# да правя цикъл с #each и да проверявам изпълнени ли са нужните условия.
+# 09. Че в Ruby фунцкията xor се представя с '^'.
+# 10. Да кръщавам методите по-ясно. На пример: #name? -> #matches_name?,
+# #artist? -> #matches_artist?, #tags_by_artist -> #add_tags_for_artist.
+# 11. Осъзнах, че е излишно да връщам '@artist == artist ? true : false',
+# когато ефектът ще е същия от '@artist == artist'.
+# 12. Да се старая методите ми да изпълняват точно една функция. За това отделих
+# обработката на входните данни в метода #create_song на класа Collection.
+# 13. Преместих филтрирането на песните в класа Song. По този начин Collection
+# няма нужда да знае подробности за структурата на Song(освен че метод
+# #matches?), а при добавяне на нов критерий за търсене, се налага промяна
+# само в класа Song, но не и в Collection.
+#
+# от задача 3:
+# 14. Че има метод #min в Enumerable, който връща елемента с най-малка стойност.
+# 15. Да разделям по-сложните аритметични изрази в отделни променливи,
+# за да е ясно как и какво всъщност се изчислява в тях.
+# 16. Да използвам константи в Ruby.
+# 17. Да използвам - дефинирам и извиквам setter-и.
+# 18. Да използвам Null Objects(NoDiscount и NoCoupon). Така не се налага
+# да правя проверки дали обектите са nil или не.
+# 19. Да отделям свързаните класовете(като тези за отстъпките и купоните)
+# в модули.
+# 20. Класовете да имат точно една отговорност.
+# За това съм отделила методите за отпечатване на фактурата в нов клас Invoice
+# и съм създала нов клас CartItem, който изчислява цените и отстъпките на
+# продуктите, добавени в количката.