Ивайло обнови решението на 19.01.2015 01:22 (преди почти 10 години)
+REPOSITORY = 'https://github.com/prelibiton/ruby-retrospective-4
+'
+# Седемнадесет неща, които научих.
+#
+# 1. С case(вместо if) кодът изглежда по-четим,особено когато
+# броят на if-овете е >= 2.
+#
+# 2. Има по-добри варианти за име на функция от 'get_element'
+#
+# 3. Във втора задача при дефинирането на оператор << може да
+# се ползва << при добавяне на елемент в масив.(вместо push)
+#
+# 4. Вместо да се създава блок,да се yield-ват един по един елементите,
+# може да се ползва &block като в @numbers_list.each &block.
+#
+# 5. Операторите & и | се дефинират в класа Filter,който се наследява от
+# другите два филтъра.
+#
+# 6. В initialize на TypeFilter и SignFilter се ползва
+# super() в комбинация с блок.
+#
+# 7. Операторите [] са излишни във филтрите TypeFilter и SignFilter.
+# Стъпката на филтриране може да стане още в initialize.
+#
+# 8. Вместо да се ползват няколко return-а при филтрирането,се ползва
+# оператор case.
+#
+# 9.В трета задача в parse на File могат да се направят доста промени.
+# string_data.split(":",2) може да се присвои на splitted и да се изнесе
+# преди case.А пък splitted да се разглежда като двойка,като първата част
+# може да достъпим с first,втората с last.
+#
+# 10. В data_type Fixnum,Float може да се замени с Numeric.
+#
+# 11. nil може да се пропусне в when 'nil' then nil и да стане
+# when nil then
+#
+# 12. Вместо две проверки дали стрингът е true или false,може да се провери
+# с една проверка дали splitted.last == 'true'
+#
+# 13. По-лесно е вместо @hash = Hash.new{ |hash, key| hash[key] = Hash.new } и
+# съответно да се създадат @hash['file'] и @hash['directories'] просто да се
+# създадат два хеша @files и @directories.
+#
+# 14. При дефинирането на оператор [] е по-добре да се използва
+# @directories[name] || @files[name]
+#
+# 15. От задача 4 научих за фукнцията ljust,която действа върху стринг
+# по следния начин: ако аргументът и е число,по-малко от дължината на стринга
+# връща самия стринг,ако е по-голямо и няма други аргументи функцията връща
+# стринга + празно място до достигане на числото,ако има втори аргумент,то
+# празното място се запълва с него.
+#
+# 16. Направи ми впечатление,че в initialize на Component има присвоена
+# анонимна фукнция,която връща стринг и се използва с такава цел в другите
+# класове.
+#
+# 17. Друго,което ми направи впечатление е,че VerticalGroup и
+# HorizontalGroup наследяват Container,а в самият Container се създават
+# обекти от класовете VerticalGroup и HorizontalGroup.
Миналото време на думата split
е split
, не splitted
. :)