Борис обнови решението на 30.10.2011 11:27 (преди около 13 години)
- Ruby се идентира с два интервала, а не с табове.
-
String#end_with?
е по-добре, отtag.rindex('!') == tag.size -1
- Дълги, едноредови
if
-ове сelse
са гадни. Запиши#flatten_string
така: if string.rindex("!") == string.size - 1 string.chop else string end - Около скобите на блоковете в Ruby се слагат интервали:
array.map { |item| flatten_string(item) }
-
should_exclude?
може да се имплементира сexcluding_tags.any? do |tag|
. Така ще се чете по-лесно и ще бъде по-кратко. - Не си погледнал какво правят
Array('foo')
иArray(['foo', 'bar'])
. Ако погледнеш, може да опростиш част от кода си. - Част от методите в
Collection
би трябвало да саprivate
. -
song_string.lines
е далеч по-добре отsong_string.split("\n")
.
Стефан, благодаря ти за предварителният коментар по кода, въпреки че направо се стресирах колко много неща не са ти харесали. Каквото мога ще поправя, но все пак да отбележа някои неща по ред на забележките ти.
1) За идентацията не го разбирам? Ползвам gedit и ползвам табове да, но съм го настроил табулацията да ми е 2. Какво не правя както трябва?
2) Това за едноредовият if...първоначалната версия на кода ми беше точно такава както ти си го написал, но мислех че в Руби се предпочитат едноредовите, ще го имам предвид :)
3) Разстояния около скобите на блоковете също съм сложил, погледнах си кода, не знам какво се е объркало тука...
4) Прав си не съм погледнал подсказките...нямам оправдание за там
5) song_string.split("\n") пробвах да го заменя със song_string.lines защото е по-интуитивно и би трябвало да е аналогично...но не се получи, тестовете ми фейлнаха когато го направих, а не че не съм се сетил за него, беше в подсказката
Отново благодаря :)
1) Ок оправих табулацията, било е от настройките на gedit 2) lines се оказа че не работело щото накрая поставяло \n което не се сетих да го погледна в документацията 3) За подсказката още не чаткам, ама нищо като излязат решенията на колегите ще разбера какво точно си имал предвид :)
Не си оправил идентацията.
Отвори си решението и виж как изглежда:
Нека да си дам моите две стотинки за lines. Не че не се бях сетил за него, но според мене е по-добре да се ползва split. Защото първо split е по-разпознаваемо, мисля че се среща по-често в другите платформи. От друга страна lines добавя \n което си е излишно и после трябва да го коригирам.
Така и така трябва да коригираш новя ред накрая със strip
, понеже нищо не ти гарантира, че няма trailing и leading whitespace. Можеш да напишеш string.split(/\s*\n\s*/)
, но така читателя трябва да парси регулярен израз string.lines.map(&:strip)
е по-разпознаваемо.
"среща се по-често в другите платформи" не е критерий за четим код, както опитах да обясня в понеделник.
Ето още няколко коментара:
-
unless criteria[:tags].nil?
е доста по-криптично от по-простотоif criteria[:tags]
. - Брояча в
may_include?
е странен. Там трябваше да минеш просто с един#all?
. - Инициализираш празен
Song
и после му викаш setter-и. Щеше да е по-добре просто да подадеш петте параметъра в конструктора наSong
. Може би дори като хеш.