Решение на Пета задача от Милан Миланов

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

Към профила на Милан Миланов

Код

REPOSITORY = 'https://github.com/milanov/ruby-retrospective-2'
# Двадесет неща, които научих.
#
# Общи:
# 0) Малко дисциплина. Въпреки заканите на първата лекция, не очаквах да е наистина
# токова сериозен курса. Поздравления. Донякъде. :D
# 1) Много по-добре е домашните да се предават рано отколкото късно. Дори и да не бъдат
# максимално изпипани feedback-а от преподавател е много по-ценен от търсене в Google.
# 2) Да се замислям как си именовам променливите. Откакто карам курса забелязвам как
# добрите ми преподаватели по програмиране винаги се замислят преди да измислят име на
# променливите си. Ако бързат или в краен случаи поне се извиняват за curpos и т.н. :)
# 3) Научих се да си стилизирам кода по-добре или по-скоро да не си държа прекалено много
# на собствения стил (да не навлизам в прекалено тесни рамки). Много вероятно е и на работа
# да ми се налага да спазвам вече изградени "ръководства за стил", така че добре да свиквам
# отрано.
# 4) Добих много по-голяма представа за това как работят функционалните езици. Не че
# Ruby е изцяло такъв, но се научих да използвам малко по-разумно ламбда функциите, map,
# filter, а и разбрах малко по-добре модела на средите.
# 5) Какво в общи линии е TestDriven Development, ролята на тестовете и защо е хубаво да ги има.
#
# Първа задача:
# 6) Научих, че в Ruby съществува модул Enumerable. В него има прекрасни функции като #all?,
# #any?, #none?, #one? и т.н.
# 7) Разликата между приоритета на операторите &&/|| и and/or.
# 8) Да не използвам #each толкова грозно, когато решението с #map е толкова по-лесно, четимо,
# разбираемо, интуитивно и още толкова позитивни определения.
# 9) Разнообразието от синонимни функции в Ruby. Разбрах също, че дори и да има няколко
# "еднакви" функции, Ruby community-то винаги си има своя любима (или поне вие двамата).
#
# Втора задача:
# 10) Къде да поставям методите attr_reader/writer/accessor. Може и да е на пръв поглед нещо
# малко, но според мен е важно. Така първото нещо, което виждаме в класа ни е как той работи
# (или поне част от неговия интерфейс), което е почти сигурно това, което търсим.
# 11) Къде точно се пазят класовите методи, синтаксиса за тяхното дефиниране, Singleton класа,
# каква е връзката между него и самия клас и др.
# 12) Възможността да подавам направо '&:method' като параметър на #map/#select/т.н., вместо
# да описвам в блок извикването на #method над всеки от елементите.
# 13) Добре разбрах (поне така мисля) видовете променливи - класови, локални(?) и инстанционни.
# До първия feedback на тази задача не знаех дали и къде мога да използвам всеки от видовете.
# 14) Какво е множествено присвояване.
# 15) Разбрах в малко по-големи детайли какво са блоковете/proc-овете и че в случая е можело да
# използвам и двете. Също колко по-добре изглежда решението с блокове.
#
# Трета задача:
# 16) Трябва да си купя и да прочета книга за шаблони за дизайн. Възможно е и за запиша
# курса във ФМИ, важното е само да добия спешно представа поне за най-основните. Самостоятелното
# ми решение на задачата, без да използвам примерната йерархия бе със скромните 60-80 реда по-дълго
# от средните дължини на решенията на другите. След немалка "помощ" от страна на авторовото решение
# стигнах до мое такова, което обаче ме научи, че имам още доста да уча.
# 17) Колко ефективно може да е понякога предефинирането на операторите. В общия случай колко
# полезно е да се прави refactoring на кода.
#
# Четвърта задача:
# 18) Малко метапрограмиране. Хубаво е да си "начешеш крастата" понякога с късо и спретнато решение,
# използващо само един или два метода за да дефинира десетки.
# 19) Да съм по-концентриран при предаването на домашните. Най-хубавото ми (според мен естествено)
# решение досега, най-краткото и мета-решение не мина тестовете само заради няколко символа (^-$ vs
# \A-\z) (multiline режима на Ruby). Още нещо - тестовете ви са подли.
# 20) Да използвам магическите променливи от Perl. Не са чак толкова страшни в крайна сметка.

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

Милан обнови решението на 29.12.2012 02:52 (преди над 11 години)

+REPOSITORY = 'https://github.com/milanov/ruby-retrospective-2'
+
+# Двадесет неща, които научих.
+#
+# Общи:
+# 0) Малко дисциплина. Въпреки заканите на първата лекция, не очаквах да е наистина
+# токова сериозен курса. Поздравления. Донякъде. :D
+# 1) Много по-добре е домашните да се предават рано отколкото късно. Дори и да не бъдат
+# максимално изпипани feedback-а от преподавател е много по-ценен от търсене в Google.
+# 2) Да се замислям как си именовам променливите. Откакто карам курса забелязвам как
+# добрите ми преподаватели по програмиране винаги се замислят преди да измислят име на
+# променливите си. Ако бързат или в краен случаи поне се извиняват за curpos и т.н. :)
+# 3) Научих се да си стилизирам кода по-добре или по-скоро да не си държа прекалено много
+# на собствения стил (да не навлизам в прекалено тесни рамки). Много вероятно е и на работа
+# да ми се налага да спазвам вече изградени "ръководства за стил", така че добре да свиквам
+# отрано.
+# 4) Добих много по-голяма представа за това как работят функционалните езици. Не че
+# Ruby е изцяло такъв, но се научих да използвам малко по-разумно ламбда функциите, map,
+# filter, а и разбрах малко по-добре модела на средите.
+# 5) Какво в общи линии е TestDriven Development, ролята на тестовете и защо е хубаво да ги има.
+#
+# Първа задача:
+# 6) Научих, че в Ruby съществува модул Enumerable. В него има прекрасни функции като #all?,
+# #any?, #none?, #one? и т.н.
+# 7) Разликата между приоритета на операторите &&/|| и and/or.
+# 8) Да не използвам #each толкова грозно, когато решението с #map е толкова по-лесно, четимо,
+# разбираемо, интуитивно и още толкова позитивни определения.
+# 9) Разнообразието от синонимни функции в Ruby. Разбрах също, че дори и да има няколко
+# "еднакви" функции, Ruby community-то винаги си има своя любима (или поне вие двамата).
+#
+# Втора задача:
+# 10) Къде да поставям методите attr_reader/writer/accessor. Може и да е на пръв поглед нещо
+# малко, но според мен е важно. Така първото нещо, което виждаме в класа ни е как той работи
+# (или поне част от неговия интерфейс), което е почти сигурно това, което търсим.
+# 11) Къде точно се пазят класовите методи, синтаксиса за тяхното дефиниране, Singleton класа,
+# каква е връзката между него и самия клас и др.
+# 12) Възможността да подавам направо '&:method' като параметър на #map/#select/т.н., вместо
+# да описвам в блок извикването на #method над всеки от елементите.
+# 13) Добре разбрах (поне така мисля) видовете променливи - класови, локални(?) и инстанционни.
+# До първия feedback на тази задача не знаех дали и къде мога да използвам всеки от видовете.
+# 14) Какво е множествено присвояване.
+# 15) Разбрах в малко по-големи детайли какво са блоковете/proc-овете и че в случая е можело да
+# използвам и двете. Също колко по-добре изглежда решението с блокове.
+#
+# Трета задача:
+# 16) Трябва да си купя и да прочета книга за шаблони за дизайн. Възможно е и за запиша
+# курса във ФМИ, важното е само да добия спешно представа поне за най-основните. Самостоятелното
+# ми решение на задачата, без да използвам примерната йерархия бе със скромните 60-80 реда по-дълго
+# от средните дължини на решенията на другите. След немалка "помощ" от страна на авторовото решение
+# стигнах до мое такова, което обаче ме научи, че имам още доста да уча.
+# 17) Колко ефективно може да е понякога предефинирането на операторите. В общия случай колко
+# полезно е да се прави refactoring на кода.
+#
+# Четвърта задача:
+# 18) Малко метапрограмиране. Хубаво е да си начешеш крастата понякога с късо и спретнато решение,
+# използващо само един или два метода за да дефинира десетки.
+# 19) Да съм по-концентриран при предаването на домашните. Най-хубавото ми (според мен естествено)
+# решение досега, най-краткото и мета-решение не мина тестовете само заради няколко символа (^-$ vs
+# \A-\z) (multiline режима на Ruby). Още нещо - тестовете ви са подли.
+# 20) Да използвам магическите променливи от Perl. Не са чак толкова страшни в крайна сметка.

Милан обнови решението на 30.12.2012 19:23 (преди над 11 години)

REPOSITORY = 'https://github.com/milanov/ruby-retrospective-2'
# Двадесет неща, които научих.
#
# Общи:
# 0) Малко дисциплина. Въпреки заканите на първата лекция, не очаквах да е наистина
# токова сериозен курса. Поздравления. Донякъде. :D
# 1) Много по-добре е домашните да се предават рано отколкото късно. Дори и да не бъдат
# максимално изпипани feedback-а от преподавател е много по-ценен от търсене в Google.
# 2) Да се замислям как си именовам променливите. Откакто карам курса забелязвам как
# добрите ми преподаватели по програмиране винаги се замислят преди да измислят име на
# променливите си. Ако бързат или в краен случаи поне се извиняват за curpos и т.н. :)
# 3) Научих се да си стилизирам кода по-добре или по-скоро да не си държа прекалено много
# на собствения стил (да не навлизам в прекалено тесни рамки). Много вероятно е и на работа
# да ми се налага да спазвам вече изградени "ръководства за стил", така че добре да свиквам
# отрано.
# 4) Добих много по-голяма представа за това как работят функционалните езици. Не че
# Ruby е изцяло такъв, но се научих да използвам малко по-разумно ламбда функциите, map,
# filter, а и разбрах малко по-добре модела на средите.
# 5) Какво в общи линии е TestDriven Development, ролята на тестовете и защо е хубаво да ги има.
#
# Първа задача:
# 6) Научих, че в Ruby съществува модул Enumerable. В него има прекрасни функции като #all?,
# #any?, #none?, #one? и т.н.
# 7) Разликата между приоритета на операторите &&/|| и and/or.
# 8) Да не използвам #each толкова грозно, когато решението с #map е толкова по-лесно, четимо,
# разбираемо, интуитивно и още толкова позитивни определения.
# 9) Разнообразието от синонимни функции в Ruby. Разбрах също, че дори и да има няколко
# "еднакви" функции, Ruby community-то винаги си има своя любима (или поне вие двамата).
#
# Втора задача:
# 10) Къде да поставям методите attr_reader/writer/accessor. Може и да е на пръв поглед нещо
# малко, но според мен е важно. Така първото нещо, което виждаме в класа ни е как той работи
# (или поне част от неговия интерфейс), което е почти сигурно това, което търсим.
# 11) Къде точно се пазят класовите методи, синтаксиса за тяхното дефиниране, Singleton класа,
# каква е връзката между него и самия клас и др.
# 12) Възможността да подавам направо '&:method' като параметър на #map/#select/т.н., вместо
# да описвам в блок извикването на #method над всеки от елементите.
# 13) Добре разбрах (поне така мисля) видовете променливи - класови, локални(?) и инстанционни.
# До първия feedback на тази задача не знаех дали и къде мога да използвам всеки от видовете.
# 14) Какво е множествено присвояване.
# 15) Разбрах в малко по-големи детайли какво са блоковете/proc-овете и че в случая е можело да
# използвам и двете. Също колко по-добре изглежда решението с блокове.
#
# Трета задача:
# 16) Трябва да си купя и да прочета книга за шаблони за дизайн. Възможно е и за запиша
# курса във ФМИ, важното е само да добия спешно представа поне за най-основните. Самостоятелното
# ми решение на задачата, без да използвам примерната йерархия бе със скромните 60-80 реда по-дълго
# от средните дължини на решенията на другите. След немалка "помощ" от страна на авторовото решение
# стигнах до мое такова, което обаче ме научи, че имам още доста да уча.
# 17) Колко ефективно може да е понякога предефинирането на операторите. В общия случай колко
# полезно е да се прави refactoring на кода.
#
# Четвърта задача:
-# 18) Малко метапрограмиране. Хубаво е да си начешеш крастата понякога с късо и спретнато решение,
+# 18) Малко метапрограмиране. Хубаво е да си "начешеш крастата" понякога с късо и спретнато решение,
# използващо само един или два метода за да дефинира десетки.
# 19) Да съм по-концентриран при предаването на домашните. Най-хубавото ми (според мен естествено)
# решение досега, най-краткото и мета-решение не мина тестовете само заради няколко символа (^-$ vs
# \A-\z) (multiline режима на Ruby). Още нещо - тестовете ви са подли.
# 20) Да използвам магическите променливи от Perl. Не са чак толкова страшни в крайна сметка.