Александър обнови решението на 13.10.2013 21:34 (преди около 12 години)
Малко бележки:
- За
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 като нищо.
