Александър обнови решението на 13.10.2013 21:34 (преди около 11 години)
Малко бележки:
- За
prime?
виж дали не можеш да използваш някак методитеall?
,any?
илиnone?
-
number
е по-добро име отx
на ред 5 - Предпочитаме вариантите с думи на проверката за делимост, т.е.
remainder(number)
,zero?
иnonzero?
- Имена като
num
,h
,x
,c
,size1
,size2
са лоши; съкращавайки няколко символа, не печелиш нищо, а губиш много; стреми се да спазваш clarity over brevity - На ред 11 може би си искал да напишеш
return [number] if number.prime?
:) Тук е окей да си ползваш иabs
, няма нужда да го слагаш в отделна променлива - Грешката, която хвърляш на ред 16, има подвеждащ текст, защото 1) никъде не проверяваш за
nil
, 2) "nil", а не "null"; иначе е добре, че се хвърля грешка, в духа на "fail early, fail fast" - Предпочитаме
reduce
предinject
- На ред 17, по-добре да ползваш
sum
, вместоh
иnumber
вместоn
-
self.
се "подразбира", когато предшества извикване на метод (ще го кажем по-натам) и е излишен; в почти всички такива случаи се пропуска (напр. ред 10, 21, 28, 34, ...) - За ред 21 виж
String#chars
и опитай да измислиш по-добро име заc
- Да дам пример за
result
вcombine_with
- по-добре ще е да еcombined
, например (поне) - Пак там, вместо size1, size2, направи си едно
smaller_size = [size, other.size].min
и ползвай него - И внимавай - мутираш списъците в този метод! Пренапиши го, за да не триеш елементи
- И пак там -- внимавай какво връщаш; в момента може да е и
nil
Много благодаря за полезните коментари. Това не е финална версия, тъй като някои от тестовете ми fail-ват, не съм имплемвнтирал препоръките от stуle guide-а и разни други неща. Утре ще рефакторирам, а и ще внимавам за обещаните хинтове по време на лекция. Отново благодаря за бързия feedback :)
P.S.. За грешката на ред 16 - писал съм null
, защото имам предвид null
като нула, а не nil
като нищо.