Решение на Пета задача от Христо Хърсев

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

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

Код

REPOSITORY = 'https://github.com/hhursev/ruby-retrospective-2/'
# Двадесет неща, които научих.
#
# 1. Да се пише подредено и да се спазват утвърдени StyleGuides в съответната
# общност от програмисти на даден език. По този начин по-бързо се свиква с
# езика, плюс повече хора ще ти откликват на въпроси свързани с код.
# 2. Всеки език си има своите плюсове и минуси. Например Ruby е по-бавен от
# Assembler. А PHP е уникален език и създаден по такъв начин, че има само
# плюсове. Шегата настрана. Не знам за другите езици, ама Ruby е
# интерпретативен език, има си "боклук" колектор и уж викането на методите
# ставало по-бавно (предполагам заради "паток" писането). Ама вижте ся...
# Тоя duck typing е супер готиното нещо. Има и хиляди полезни gem-ове в нета
# предразполагащи за добро развитие на езика.
# 3. Ruby има код и синтаксис красиви за окото. Едноредовите магиики още в
# първа задача загатват за изтънченост на езика.
# 4. Отворени ми бяха очите за безброй много удобства, който едитора и средата
# в която работиш могат да ти донесат.
# 5. self при обръщание към instance променливи се подразбира и не е нужно да
# се пише
# 6. Методите в Ruby връщат последния оценен ред и така се избягва доста писане
# 7. Масиви, Стрингове, Хешове в Ruby имат дооста функционалност и вградени
# функции. Доброто запознаване на човек с Ruby-doc би му спестило доста
# време в писане на неприятен и грозноват код.
# 8. ОО дизайна е мощно оръжие. Доброто обособяване на различни части в дадена
# задача и разбиването им в различни градивни елементи от едно цяло не
# винаги е лесно, но в последствие спестява много нерви и прави кода
# значително по-лесен за поддържане, оптимизиране и модификация.
# 9. В Ruby присвояване на елементи може да се прави и така: ако имаме str =
# "one two three four"--> едно, две, три, четири = str.split(" ").
# 10. Намирането на подходящи имена на променливи, функции или итератори може
# да се окаже тежка задача някой път, но определено си заслужава търсенето.
# 11. Предефинирането на each оператора от Enumerable модула прави чудеса.
# 12. object.map(&:lambda) ще изпълнява съответната lambda-функция. това се
# отнася и за inject, select, collect, reject и изобщо всички функции,
# които взимат { |item| block }.
# 13. Малко по-сложна и комплексна задача почти сигурно се превръща в истински
# кошмар и изпитание за нервите ако не се прави с TDD.
# 14. Зачудих се защо държите да използваме and над && и прочетох за разликите
# между тях и приоритете им.
# http://www.themomorohoax.com/2008/12/08/and-vs-amperand-in-ruby обясни
# доста неща накратко. Още не съм наясно защо държите на and/or, но
# определено разликите е хубаво човек да ги знае защото са доста неприятни.
# 15. Бинарните оператори, колкото и да бях чувал за тях, за пръв път видях
# някой да ги ползва в решение (едно от решенията на трета задача ползва &)
# 16. \w в Regex имал неприятното свойство да съдържа в себе си и символа "_"
# 17. ако искаме даден Regex да връща True/False Regex ? true : false, е много
# по елегантен начин от явно често ползвания в Ruby (съдейки по форуми)
# Double-Bang оператор !!Regex или дори извращения от сорта на !(Regex.nil?)
# (То го имало и в презентациите ама.. кой да гледа)
# 18. Отделянето на всички Patterns, който ще се ползват, в отделен модул
# определено е правилния стил на писане.
# 19. Ползването на extend self спестява някой път писане, но по-важното е,
# че ме накара да прочета за include / extend mix-ване.
# 20. Ако имаме променлива, чиято стойност никъде не е била инициализирана,
# то тя е nil.

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

Христо обнови решението на 28.12.2012 08:04 (преди около 12 години)

+REPOSITORY = 'https://github.com/hhursev/ruby-retrospective-2/'
+
+# Двадесет неща, които научих.
+#
+# 1. Да се пише подредено и да се спазват утвърдени StyleGuides в съответната
+# общност от програмисти на даден език. По този начин по-бързо се свиква с
+# езика, плюс повече хора ще ти откликват на въпроси свързани с код.
+# 2. Всеки език си има своите плюсове и минуси. Например Ruby е по-бавен от
+# Assembler. А PHP е уникален език и създаден по такъв начин, че има само
+# плюсове. Шегата настрана. Не знам за другите езици, ама Ruby е
+# интерпретативен език, има си "боклук" колектор и уж викането на методите
+# ставало по-бавно (предполагам заради "паток" писането). Ама вижте ся...
+# Тоя duck typing е супер готиното нещо. Има и хиляди полезни gem-ове в нета
+# предразполагащи за добро развитие на езика.
+# 3. Ruby има код и синтаксис красиви за окото. Едноредовите магиики още в
+# първа задача загатват за изтънченост на езика.
+# 4. Отворени ми бяха очите за безброй много удобства, който едитора и средата
+# в която работиш могат да ти донесат.
+# 5. self при обръщание към instance променливи се подразбира и не е нужно да
+# се пише
+# 6. Методите в Ruby връщат последния оценен ред и така се избягва доста писане
+# 7. Масиви, Стрингове, Хешове в Ruby имат дооста функционалност и вградени
+# функции. Доброто запознаване на човек с Ruby-doc би му спестило доста
+# време в писане на неприятен и грозноват код.
+# 8. ОО дизайна е мощно оръжие. Доброто обособяване на различни части в дадена
+# задача и разбиването им в различни градивни елементи от едно цяло не
+# винаги е лесно, но в последствие спестява много нерви и прави кода
+# значително по-лесен за поддържане, оптимизиране и модификация.
+# 9. В Ruby присвояване на елементи може да се прави и така: ако имаме str =
+# "one two three four"--> едно, две, три, четири = str.split(" ").
+# 10. Намирането на подходящи имена на променливи, функции или итератори може
+# да се окаже тежка задача някой път, но определено си заслужава търсенето.
+# 11. Предефинирането на each оператора от Enumerable модула прави чудеса.
+# 12. object.map(&:lambda) ще изпълнява съответната lambda-функция. това се
+# отнася и за inject, select, collect, reject и изобщо всички функции,
+# които взимат { |item| block }.
+# 13. Малко по-сложна и комплексна задача почти сигурно се превръща в истински
+# кошмар и изпитание за нервите ако не се прави с TDD.
+# 14. Зачудих се защо държите да използваме and над && и прочетох за разликите
+# между тях и приоритете им.
+# http://www.themomorohoax.com/2008/12/08/and-vs-amperand-in-ruby обясни
+# доста неща накратко. Още не съм наясно защо държите на and/or, но
+# определено разликите е хубаво човек да ги знае защото са доста неприятни.
+# 15. Бинарните оператори, колкото и да бях чувал за тях, за пръв път видях
+# някой да ги ползва в решение (едно от решенията на трета задача ползва &)
+# 16. \w в Regex имал неприятното свойство да съдържа в себе си и символа "_"
+# 17. ако искаме даден Regex да връща True/False Regex ? true : false, е много
+# по елегантен начин от явно често ползвания в Ruby (съдейки по форуми)
+# Double-Bang оператор !!Regex или дори извращения от сорта на !(Regex.nil?)
+# (То го имало и в презентациите ама.. кой да гледа)
+# 18. Отделянето на всички Patterns, който ще се ползват, в отделен модул
+# определено е правилния стил на писане.
+# 19. Ползването на extend self спестява някой път писане, но по-важното е,
+# че ме накара да прочета за include / extend mix-ване.
+# 20. Ако имаме променлива, чиято стойност никъде не е била инициализирана,
+# то тя е nil.