Георги обнови решението на 14.10.2014 22:55 (преди около 10 години)
Малко бележки:
Не спазваш всички конвенции, които ръководството по стил препоръчва, като например:
- Трябва да има интервали около "операторите" като
<=
,-
,+
,?
,==
,:
и т.н. - Избягвай да използваш тернарния оператор; неговата употреба е уместна само в много малко, редки случаи; обикновено нарушава четимостта и простотата на кода.
- Празните редове помагат за четимостта, но в кода си имаш няколко излишни – първият ред, десети ред, деветнайсти ред са излишни.
-
Форматирането ти на речника в
series
е лошо. За да спазиш ограничението за дължина на ред, си го подредил зле. Ето така се подреждат многоредови хешове, в твоя код:temp = { 'fibonacci' => lambda { |n| fibonacci(n) }, 'lucas' => lambda { |n| lucas(n) }, 'summed' => lambda { |n| fibonacci(n) + lucas(n) }, }
Забележи следните неща:
- Къде съм сложил интервали.
- Как съм подравнил символа
=>
за четимост. - Че съм сложил скоби около аргументите на методите в ламбдата.
- Че съм сложил запетая след третия елемент в речника, което е практика.
Допълнително, няма нужда да използваш речник и lambda в series. Има как да се напише и по-семпло и ясно. Погледни внимателно този слайд от лекциите, за принципите за добър дизайн на Кент Бек. Принтирай си го и си го закачи до екрана.
Името temp
е окей да се ползва сигурно в 0.001% от случаите. Във всички останали случаи, това име е много лоша идея. Полагай усилия да намериш правилните имена на променливите си, на методите си и на класовете си, защото това ти е основният инструмент за писане на ясен, прост и четим код, който лесно да се поддържа и развива впоследствие. Всички променливи са temp
. Всички променливи са data
. Всяка променлива, чиято стойност е речник, е hash
. Това са все лоши имена. Лоши имена са и еднобуквените променливи, с много малки изключения. Тук n
е едно изключение. В цикъл, i
може да се приеме за изключение. Във всички останали случаи, еднобуковени променливи също са лоша идея.
В конкретния случай, вместо temp
, би могъл да ползваш име като series_by_type
или нещо такова. И това име не е много добро и проблемът да измислиш добро име е сигнал, че може би дизайнът трябва да се промени така, че да няма нужда от променлива там изобщо.