Решение на Пета задача от Бетина Иванова

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

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

Резултати

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

Код

REPOSITORY = 'http://github.com/betinaei/ruby-retrospective-4'
# Двадесет неща, които научих.
#
# 1.Научих, че е по-добре да използвам case вместо конструкцията if-
# elsif-else.
# 2.String#split с аргументи разделител и числото 2 е удачно да се
# използва вместо String#partition, когато искаме да пропуснем самия
# разделител и ако имаме паралелно присвояване.
# 3.Когато не сме сигурни как да реализираме дадена функционалност,
# първо да проверим в документацията, за да открием функции, които
# биха ни помогнали за реализирането.
# 4.Сase сравнява с === и премахнах използването на class.to_s, защото # в класът Class е имплементиран този оператор.
# 5.Научих, че когато подаваме блок на функция, можем да извикаме
# Proc.new в тялото на функцията вместо да подаваме блока като обект
# чрез &.
# 6.Научих, че когато include-ваме модул ние всъщност получаваме
# референция към него и следващи промени в модула се отразяват
# навсякъде, където е include-нат.
# 7.Когато дефинираме функция с def и тя не се намира в определен
# клас, тя отива като private метод на класа Object и, че като цяло
# не е добра практика да дефинираме такива функции.
# 8.Рrotected метод може да се извиква от наследниците, но само чрез
# обект от класа, в който е дефиниран метода.
# 9.Когато include-нем модул повторно в наследник на даден клас,
# вторият include се игнорира и при извикване на Module#ancestors
# вторият не е включен в списъка.
# 10.Научих, че има разлика между super и super(). Ако методът в
# родителския клас има задължителни аргументи, извикването на super()
# ще предизвика грешка, а на super – не.
# 11.Научих, че в Ruby всичко е израз и връща някаква стойност. Няма
# нужда да викаме return в повечето случаи, защото оценката на функция
# е оценката на последния израз в нея.
# 12.Когато ползваме класова променлива в наследник на даден клас със
# същото име като на класова променлива в родителя, след промяна на
# тази променлива в наследника се променя и тази в родителя.
# 13.Когато предефинираме метода method_missing винаги трябва да
# дефинираме respond_to_missing?
# 14.Можем да използваме метод на даден клас като обект чрез функцията
# method. След това можем да извикаме метода чрез извикване на call на
# самия обект.
# 15.Когато искаме да дефинираме повече класови методи е по-добре да
# се използва class << self.
# 16.Когато искам да получа списък от променени елементите на друг
# списък да използвам map вместо each.
# 17.Да използвам правилно функцията reduce.
# 18.Можем да дефинираме метод на обект. Този метод отива в singleton
# класа на обекта.
# 19.Когато ползваме require, файлът се зарежда само веднъж.
# 20.Даден gem е просто разархивирана папка с файлове.

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

Бетина обнови решението на 19.01.2015 16:29 (преди над 9 години)

+REPOSITORY = 'http://github.com/betinaei/ruby-retrospective-4'
+
+# Двадесет неща, които научих.
+#
+# 1.Научих, че е по-добре да използвам case вместо конструкцията if-
+# elsif-else.
+# 2.String#split с аргументи разделител и числото 2 е удачно да се
+# използва вместо String#partition, когато искаме да пропуснем самия
+# разделител и ако имаме паралелно присвояване.
+# 3.Когато не сме сигурни как да реализираме дадена функционалност,
+# първо да проверим в документацията, за да открием функции, които
+# биха ни помогнали за реализирането.
+# 4.Сase сравнява с === и премахнах използването на class.to_s, защото # в класът Class е имплементиран този оператор.
+# 5.Научих, че когато подаваме блок на функция, можем да извикаме
+# Proc.new в тялото на функцията вместо да подаваме блока като обект
+# чрез &.
+# 6.Научих, че когато include-ваме модул ние всъщност получаваме
+# референция към него и следващи промени в модула се отразяват
+# навсякъде, където е include-нат.
+# 7.Когато дефинираме функция с def и тя не се намира в определен
+# клас, тя отива като private метод на класа Object и, че като цяло
+# не е добра практика да дефинираме такива функции.
+# 8.Рrotected метод може да се извиква от наследниците, но само чрез
+# обект от класа, в който е дефиниран метода.
+# 9.Когато include-нем модул повторно в наследник на даден клас,
+# вторият include се игнорира и при извикване на Module#ancestors
+# вторият не е включен в списъка.
+# 10.Научих, че има разлика между super и super(). Ако методът в
+# родителския клас има задължителни аргументи, извикването на super()
+# ще предизвика грешка, а на super – не.
+# 11.Научих, че в Ruby всичко е израз и връща някаква стойност. Няма
+# нужда да викаме return в повечето случаи, защото оценката на функция
+# е оценката на последния израз в нея.
+# 12.Когато ползваме класова променлива в наследник на даден клас със
+# същото име като на класова променлива в родителя, след промяна на
+# тази променлива в наследника се променя и тази в родителя.
+# 13.Когато предефинираме метода method_missing винаги трябва да
+# дефинираме respond_to_missing?
+# 14.Можем да използваме метод на даден клас като обект чрез функцията
+# method. След това можем да извикаме метода чрез извикване на call на
+# самия обект.
+# 15.Когато искаме да дефинираме повече класови методи е по-добре да
+# се използва class << self.
+# 16.Когато искам да получа списък от променени елементите на друг
+# списък да използвам map вместо each.
+# 17.Да използвам правилно функцията reduce.
+# 18.Можем да дефинираме метод на обект. Този метод отива в singleton
+# класа на обекта.
+# 19.Когато ползваме require, файлът се зарежда само веднъж.
+# 20.Даден gem е просто разархивирана папка с файлове.