Решение на Четвърта задача от Елена Иванова

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

Към профила на Елена Иванова

Резултати

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

Код

REPOSITORY = 'http://github.com/eivanova/ruby-retrospective-1'
# Двадесет неща, които научих.
#
# 1. Припомних си yield, когато методът проема блок като
# аргумент.
# Много готино може да се използва в първа задача в
# Аrrray#index_by
# 2. Научих за each_cons метода на Enumerable и как може да се # приложи в Array#subarray_count
# 3. Как да върна стойност по подразбиране ако в хеш няма даден # ключ - Hash.new { |key, value| 0} или само Hash.new 0
# 4. Kaк мога да излолзвам [true, false].all? вместо да правя
# inject
# 5. Добра идея е да изфилтрирам първо положителните и
# отрицателни тагове на песните и да ползвам операции с
# множества вместо булеви променливи
# 6. Много по-добре изглежда ако цялото мачване на песен е в 1
# метод и по-хубаво и блока да си обработя в Song
# 7. Масивите могат да получават елементи с <<
# 8. Методи от рода на map могат да получават функция като
# аргумент map(&:chop)
# 9. Регулярните изрази имат и по-хубав синтаксис от r%{} - /../
# 10. Мога да присвоявам стойности на няколко променливи
# едновременно:
# name, artist, genres, tags = song.split(/\.\s*/).map(&:strip)
# 11. В последната задача - не само промоциите, но и купоните
# могат да имат отделни класове
# 12. Null Object pattern
# 13. По-добре да ползваме по-прости структури, когато може, а
# по-конкретно - масив вместо хеш
# 14. Мога да си дефинирам [] оператор за обекти различни от
# масив и хеш
# 15. Методът Hash.first и как може много по-удобно да се
# използва
# @fullPriceNum, @discount = hash.first вместо
# @fullPriceNum = hash.keys[0]
# @discount = hash.values[0]
# 16. Доста по-красиви имена на методи са discount и
# discount_string вместо get_discount и get_discount_string
# 17. Как се инициализира клас, който е в модул (::)
# 18. Методът detect - доста удобно, на няколко пъти досега ми
# трябваше
# 19. items_price ... това име нещо все ми убягваше
# 20. Как можем да изплзваме mixin за инициализация на правилния
# тип. По-рано имах метод за това... на много по-неподходящо
# място.
# 21. Как се инициализират mixins
# 22. Защо на Руби не му трябваат интерфейси, не се бях
# замисляла за ролята на тестовете от тази гледна точка. И все
# пак не ми стана ясно защо Стефан 3 пъти си е дефинирал псевдо-
# интерфейс с ексепшъни ако някой метод не е имплементиран...
# Или поне така каза на лекция...
# 23. А, да, и една груба грешка.. някъде из нета гледах
# примери, в които полетата бяха кемъл кейс, та се подведох :(
# За съжаление се подсещам в момента на работа и няма да мога да
# си пусна тестовете, ако ги оправя.

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

Елена обнови решението на 13.11.2011 16:16 (преди около 13 години)

+REPOSITORY = 'http://github.com/eivanova/ruby-retrospective-1'
+
+# Двадесет неща, които научих.
+#
+# 1. Припомних си yield, когато методът проема блок като
+# аргумент.
+# Много готино може да се използва в първа задача в
+# Аrrray#index_by
+# 2. Научих за each_cons метода на Enumerable и как може да се # приложи в Array#subarray_count
+# 3. Как да върна стойност по подразбиране ако в хеш няма даден # ключ - Hash.new { |key, value| 0} или само Hash.new 0
+# 4. Kaк мога да излолзвам [true, false].all? вместо да правя
+# inject
+# 5. Добра идея е да изфилтрирам първо положителните и
+# отрицателни тагове на песните и да ползвам операции с
+# множества вместо булеви променливи
+# 6. Много по-добре изглежда ако цялото мачване на песен е в 1
+# метод и по-хубаво и блока да си обработя в Song
+# 7. Масивите могат да получават елементи с <<
+# 8. Методи от рода на map могат да получават функция като
+# аргумент map(&:chop)
+# 9. Регулярните изрази имат и по-хубав синтаксис от r%{} - /../
+# 10. Мога да присвоявам стойности на няколко променливи
+# едновременно:
+# name, artist, genres, tags = song.split(/\.\s*/).map(&:strip)
+# 11. В последната задача - не само промоциите, но и купоните
+# могат да имат отделни класове
+# 12. Null Object pattern
+# 13. По-добре да ползваме по-прости структури, когато може, а
+# по-конкретно - масив вместо хеш
+# 14. Мога да си дефинирам [] оператор за обекти различни от
+# масив и хеш
+# 15. Методът Hash.first и как може много по-удобно да се
+# използва
+# @fullPriceNum, @discount = hash.first вместо
+# @fullPriceNum = hash.keys[0]
+# @discount = hash.values[0]
+# 16. Доста по-красиви имена на методи са discount и
+# discount_string вместо get_discount и get_discount_string
+# 17. Как се инициализира клас, който е в модул (::)
+# 18. Методът detect - доста удобно, на няколко пъти досега ми
+# трябваше
+# 19. items_price ... това име нещо все ми убягваше
+# 20. Как можем да изплзваме mixin за инициализация на правилния
+# тип. По-рано имах метод за това... на много по-неподходящо
+# място.
+# 21. Как се инициализират mixins
+# 22. Защо на Руби не му трябваат интерфейси, не се бях
+# замисляла за ролята на тестовете от тази гледна точка. И все
+# пак не ми стана ясно защо Стефан 3 пъти си е дефинирал псевдо-
+# интерфейс с ексепшъни ако някой метод не е имплементиран...
+# Или поне така каза на лекция...
+# 23. А, да, и една груба грешка.. някъде из нета гледах
+# примери, в които полетата бяха кемъл кейс, та се подведох :(
+# За съжаление се подсещам в момента на работа и няма да мога да
+# си пусна тестовете, ако ги оправя.