Венета обнови решението на 13.11.2011 14:04 (преди около 13 години)
+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, който изчислява цените и отстъпките на
+# продуктите, добавени в количката.