Решение на Пета задача от Георги Костов

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

Към профила на Георги Костов

Резултати

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

Код

REPOSITORY = 'https://github.com/joromir/ruby-retrospective-4'
# Двадесет неща, които научих:
# 1. Спазването на ръководството по стил и конвенциите е от голямо значение.
# Кодът се чете повече пъти, отколкото пъти се пише. Научих се
# да подреждам кода си по-добре чрез четенето му отзад-напред - по този
# начин логиката не може да ми отклони вниманието от това да проследя дали са
# правилно подредени различните изрази.
# 2. Когато се върнах назад и прочетох остарелия ми вече код, разбрах,
# че наистина правилното именуване на променливи и методи е много важно нещо.
# 3. Когато дефинираме метод извън даден клас, той става метод на
# класа Object. Това трябва да се избягва, освен в много специални случаи.
# 4. Добра практика е избягването на повторения - повтаряне на идеи,
# писане на код, който наподобява вече написан друг такъв и т.н. Когато
# се използват вече дефинирани методи се скъсява кодът.
# По този начин се подобрява четимостта, кодът става по изчистен и по-ясен.
# 5. Винаги, когато е възможно, трябва да се избягва ползването на
# "monkey patching". Това "замърсява" библиотеките и може да предизвика
# непредсказуемо поведение.
# 6. Следването на SOLID принципа прави кода по-разбираем, а и дава по-малко
# пространство за грешки и бъгове.
# 7. Дефинирането и използването на глобални променливи трябва да се избягва,
# защото това е лош стил на програмиране и е възможно да възникнат проблеми
# със сигурността.
# 8. Когато дефинираме метод each, трябва да мислим и за случая,
# когато не подаваме блок на въпросния метод. По този начин each трябва да
# връща Enumerator. (Enumerable <-> each <-> Enumerator)
# 9. По-интелигентно е при някои ситуации да си създадем помощен клас или
# модул с методи, вместо да трупаме допълнителни такива по останалите класове.
# 10. Не трябва да се забравя, че в case може да използваме "," , за да си
# спестим писането на допълнителни редове, водещи до едно и също нещо.
# 11. Всеки метод, който не е задължително да е public е по-добре да бъде
# private, защото така капсулацията е по-добра.
# 12. Паралелното присвояване в някои случаи ни спестява писането на повече
# код, но за сметка на това кодът става по-труден за четене.
# 13. В рамките на модула RBFS, можем да се обърнем към класа Directory
# по следните два начина: Directory.new и RBFS::Directory.new като за
# предпочитане е първият начин.
# 14. Можем да достигнем до по-елегантно решение на даден проблем, ако
# използваме стойности по подразбиране в методите в дадени ситуации.
# 15. Можем да използваме map, select, reduce и с тази съкратена форма:
# (1..22).reduce(&:+)
# ["banana", "muffin", "YEAH!"].map(&:to_sym)
# [1,2,3,4].select(&:odd?)
# 16. Трябва да include-нем Enumerable и да дефинираме each,
# за да може да викаме в нашите класове методи като reduce, map и други.
# 17. Добре е да се възползваме от функционалните елементи на езика като цяло,
# защото по този начин пестим време и усилия.
# 18. Понякога е по-добре е да използваме ламбда функция вместо да дефинираме
# метод, който се използва само на едно единствено място.
# 19. Може да повтаряме някакъв шаблон с puts, когато го използваме
# по следния начин: puts 'la ' * 4 или puts "ba" + "na" * 2
# 20. ...и не на последно място - от много голямо значение е да се чете
# повече чужд код. :)

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

Георги обнови решението на 18.01.2015 19:26 (преди над 9 години)

+
+
+REPOSITORY = 'https://github.com/joromir/ruby-retrospective-4'
+
+
+# Двадесет неща, които научих:
+
+
+# 1. Спазването на ръководството по стил и конвенциите е от голямо значение.
+# Кодът се чете повече пъти, отколкото пъти се пише. Научих се
+# да подреждам кода си по-добре чрез четенето му отзад-напред - по този
+# начин логиката не може да ми отклони вниманието от това да проследя дали са
+# правилно подредени различните изрази.
+
+# 2. Когато се върнах назад и прочетох остарелия ми вече код, разбрах,
+# че наистина правилното именуване на променливи и методи е много важно нещо.
+
+# 3. Когато дефинираме метод извън даден клас, той става метод на
+# класа Object. Това трябва да се избягва, освен в много специални случаи.
+
+# 4. Добра практика е избягването на повторения - повтаряне на идеи,
+# писане на код, който наподобява вече написан друг такъв и т.н. Когато
+# се използват вече дефинирани методи се скъсява кодът.
+# По този начин се подобрява четимостта, кодът става по изчистен и по-ясен.
+
+# 5. Винаги, когато е възможно, трябва да се избягва ползването на
+# "monkey patching". Това "замърсява" библиотеките и може да предизвика
+# непредсказуемо поведение.
+
+# 6. Следването на SOLID принципа прави кода по-разбираем, а и дава по-малко
+# пространство за грешки и бъгове.
+
+# 7. Дефинирането и използването на глобални променливи трябва да се избягва,
+# защото това е лош стил на програмиране и е възможно да възникнат проблеми
+# със сигурността.
+
+# 8. Когато дефинираме метод each, трябва да мислим и за случая,
+# когато не подаваме блок на въпросния метод. По този начин each трябва да
+# връща Enumerator. (Enumerable <-> each <-> Enumerator)
+
+# 9. По-интелигентно е при някои ситуации да си създадем помощен клас или
+# модул с методи, вместо да трупаме допълнителни такива по останалите класове.
+
+# 10. Не трябва да се забравя, че в case може да използваме "," , за да си
+# спестим писането на допълнителни редове, водещи до едно и също нещо.
+
+# 11. Всеки метод, който не е задължително да е public е по-добре да бъде
+# private, защото така капсулацията е по-добра.
+
+# 12. Паралелното присвояване в някои случаи ни спестява писането на повече
+# код, но за сметка на това кодът става по-труден за четене.
+
+# 13. В рамките на модула RBFS, можем да се обърнем към класа Directory
+# по следните два начина: Directory.new и RBFS::Directory.new като за
+# предпочитане е първият начин.
+
+# 14. Можем да достигнем до по-елегантно решение на даден проблем, ако
+# използваме стойности по подразбиране в методите в дадени ситуации.
+
+# 15. Можем да използваме map, select, reduce и с тази съкратена форма:
+# (1..22).reduce(&:+)
+# ["banana", "muffin", "YEAH!"].map(&:to_sym)
+# [1,2,3,4].select(&:odd?)
+
+# 16. Трябва да include-нем Enumerable и да дефинираме each,
+# за да може да викаме в нашите класове методи като reduce, map и други.
+
+# 17. Добре е да се възползваме от функционалните елементи на езика като цяло,
+# защото по този начин пестим време и усилия.
+
+# 18. Понякога е по-добре е да използваме ламбда функция вместо да дефинираме
+# метод, който се използва само на едно единствено място.
+
+# 19. Може да повтаряме някакъв шаблон с puts, когато го използваме
+# по следния начин: puts 'la ' * 4 или puts "ba" + "na" * 2
+
+# 20. ...и не на последно място - от много голямо значение е да се чете
+# повече чужд код. :)