Решение на Пета задача от Ивайло Георгиев

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

Към профила на Ивайло Георгиев

Резултати

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

Код

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.

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

Ивайло обнови решението на 19.01.2015 01:22 (преди над 9 години)

+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.