Решение на Пета задача от Веселин Генадиев

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

Към профила на Веселин Генадиев

Резултати

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

Код

REPOSITORY = 'https://github.com/Veselin-Genadiev/ruby-retrospective-3'.freeze
#Двадесет неща, които научих.
#
# 1.Monkey patching-a не е хубаво нещo :D.
# 2.Когато връщам стойност във single-line if трябва да пиша return.
# 3.С each_with_object може да се спести някой и друг ред.
# 4.Операторът за степенуване е **.
# 5.По-подходящата конструкция за итериране е x.upTo(y), а не (x..y)
# 6.Никога не бях ползвал Array#flatten.
# 7.За имплементирането на Enumerable е достатъчно да се дефинира само методър each
# 8.Аксесорите (attr_reader, attr_accessor..) се пишат на един ред. По-компактно е и се чете по-лесно
# 9.Пред веднъж дефинираното поле, не е необходимо да се пише '@': при четене (ако има attr_reader) или
# при записване (ако има attr_writer), като не трябва да има локална променлива с това име.
# 10.На константите трябва да им се вика методът 'freeze', за да не могат да бъдат променяни.
# 11.Разделянето на един голям проблем на няколко по-малко може да се постигне чрез дефинирането на нов клас.
# 12.Най-подходящия начин за взимане на хеш код зависещ от няколко променливи е с масив.
# 13.alias method1 method2 може да се използва само с името на методите подадено като константа. Не е
# необходимо да бъде символ.
# 14.Gem-ове се инсталират през конзолата, а не през interactive ruby.
# 15.RubyMine всъщност е доста удобно IDE.
# 16.Struct е удобно за създаване на обекти без логически конструкции (методи).
# 17.Научих се да полузвам Github и Git.
# 18.Хубаво е да си прочетеш условието внимателно, преди да пишеш.
# 19.Вече доста често кодя до късно (4-5 сутринта) с бира под ръка :).
# 20.Пет минути преди краят на срока за домашното се чудя какво да пиша. Май трябваше да навия един приятел да
# запише курса. А и btw: отървах се от Майкрософтските технологии, май е време да си инсталирам Линукс.

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

Веселин обнови решението на 22.01.2014 17:28 (преди над 10 години)

+REPOSITORY = 'https://github.com/Veselin-Genadiev/ruby-retrospective-3'.freeze
+
+#Двадесет неща, които научих.
+#
+# 1.Monkey patching-a не е хубаво нещo :D.
+# 2.Когато връщам стойност във single-line if трябва да пиша return.
+# 3.С each_with_object може да се спести някой и друг ред.
+# 4.Операторът за степенуване е **.
+# 5.По-подходящата конструкция за итериране е x.upTo(y), а не (x..y)
+# 6.Никога не бях ползвал Array#flatten.
+# 7.За имплементирането на Enumerable е достатъчно да се дефинира само методър each
+# 8.Аксесорите (attr_reader, attr_accessor..) се пишат на един ред. По-компактно е и се чете по-лесно
+# 9.Пред веднъж дефинираното поле, не е необходимо да се пише '@': при четене (ако има attr_reader) или
+# при записване (ако има attr_writer), като не трябва да има локална променлива с това име.
+# 10.На константите трябва да им се вика методът 'freeze', за да не могат да бъдат променяни.
+# 11.Разделянето на един голям проблем на няколко по-малко може да се постигне чрез дефинирането на нов клас.
+# 12.Най-подходящия начин за взимане на хеш код зависещ от няколко променливи е с масив.
+# 13.alias method1 method2 може да се използва само с името на методите подадено като константа. Не е
+# необходимо да бъде символ.
+# 14.Gem-ове се инсталират през конзолата, а не през interactive ruby.
+# 15.RubyMine всъщност е доста удобно IDE.
+# 16.Struct е удобно за създаване на обекти без логически конструкции (методи).
+# 17.Научих се да полузвам Github и Git.
+# 18.Хубаво е да си прочетеш условието внимателно, преди да пишеш.
+# 19.Вече доста често кодя до късно (4-5 сутринта) с бира под ръка :).
+# 20.Пет минути преди краят на срока за домашното се чудя какво да пиша. Май трябваше да навия един приятел да
+# запише курса. А и btw: отървах се от Майкрософтските технологии, май е време да си инсталирам Линукс.

Имаш дребни проблеми със skeptic ограниченията в четвръта задача, но освен тях, тестовете и другите задачи са окей.

Виж коментара, който оставих на Моника по втора задача, относно Task.new. Най-добре, обаче, е логиката за parse-ване да бъде изведена в отделен клас, който има точно и само тази отговорност.

По нещата, които си написал:

Точка 2. Когато връщам стойност във single-line if трябва да пиша return.

Това не е специфично само за т.нар. postfix if (това, което ти наричаш single-line if). Трябва да напишеш return, ако искаш да прекратиш работата на функцията по-рано, без значение дали в single или multiline if :)

Точка 5. По-подходящата конструкция за итериране е x.upTo(y), а не (x..y)

upto, а не upTo :)

Точка 8. Аксесорите (attr_reader, attr_accessor..) се пишат на един ред. По-компактно е и се чете по-лесно

Могат, да и до известна степен е удобно. Не трябва да се прекалява с дължината на реда, обаче.

Точка 9. Пред веднъж дефинираното поле, не е необходимо да се пише '@': при четене (ако има attr_reader) или при записване (ако има attr_writer), като не трябва да има локална променлива с това име.

Това с локалната променлива не е точно така. Ако напишеш foo = 5, това винаги ще ти създаде локална променлива. Това е един от случаите, в които трябва да ползваш self: self.foo = 5 ще използва accessor-метода.

Точка 10. На константите трябва да им се вика методът 'freeze', за да не могат да бъдат променяни.

Не е задължително, но е добра практика.

Точка 12. Най-подходящия начин за взимане на хеш код зависещ от няколко променливи е с масив.

На това не бих си заложил живота. Лесно е, със сигурност, но не е най-оптималният начин откъм бързодействие, например. Няма универсални решения.

Точка 13. alias method1 method2 може да се използва само с името на методите подадено като константа. Не е необходимо да бъде символ.

Изказът ти не е точен. alias е синтактична конструкция и това отзад не са точно аргументи; method1 и method2 се интерпретират като идентификатори (имена) на методи. Това не са константи.

Точка 16. Struct е удобно за създаване на обекти без логически конструкции (методи).

Да. Но имам бележка по употребата на Struct (напр. в четвърта задача при теб). Виждам смисъл в това само ако има нужда да се замести клас, т.е. се спестява дефиницията на отделен клас. Употреба като тази: class Mov < Struct.new :destination, :source не намирам за добра. Предпочитам да дефинирам атрибутите с attr_accessor - не само, че е по-кратко, но и е по-праволинейно, просто и ясно. Struct носи допълнителни неща, които в не само, че повечето случаи не са необходими (например, енумерация на атрибутите), ами са и направо излишни.

Точка 17. Научих се да полузвам Github и Git.

"Ползувам" е остаряла форма, която не се ползува вече :) Използвай "ползвам" :)

Точка 20. Пет минути преди краят на срока за домашното се чудя какво да пиша. Май трябваше да навия един приятел да запише курса. А и btw: отървах се от Майкрософтските технологии, май е време да си инсталирам Линукс.

Живот и здраве, идният зимен семестър. Сега запишете Clojure и Python.