Веселин обнови решението на 22.01.2014 17:28 (преди почти 11 години)
Имаш дребни проблеми със 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.