Мая обнови решението на 10.10.2014 16:28 (преди около 10 години)
- Какво са
first
иsecond
? Може би първият и вторият ред на редицата. Но после стават на нещо друго. - Много се радвам, че си видяла за множественото присвояване на един ред. Но като цяло избягвай да го използваш в цикли - не винаги е най-четимото нещо, а и създава масиви зад завесите. По принцип не гоним оптималност на кода, но spawn-ването на количество short lived обекти не е добра практика.
- В подобна ситуация се предпочита
x.upto(y)
за конструиране наRange
...
и...
обикновено се ползват в комбинация с===
илиwhen
.
Ще е супер ако успееш да адресираш горните точки и останеш с ясен код. Ако не - обмисли дали можеш да пренапишеш имплементацията си на calculate_member
.
- Опционално може да експериментираш дали
if
-elsif
-else
илиcase
безreturn
-и биха повишили естетичността на кода :)
Благодаря за бързия коментар!
Абсолютно съгласна съм с първа точка. Много ми се искаше да измисля някакво кратко и хитро решение, но изглежда само на кратко го докарах... Осъзнавам, че съм нарушила поне два основни принципа.
По втора точка, наистина не знаех какво се случва "зад завесите", благодаря.
По трета точка, признавам, че въобще не зная Ruby и едва ли не останах с впечатлението, че съдържа множество взаимозаменяеми конструкции/методи/... И че някак просто трябва да си харесам тази, която ми допада (: . Имам много да чета, дааа. Ще го махна това.
По опционалната точка - след лекцията с коментарите по решенията на първото предизвикателство, си помислих, че такъв обратен запис + ранен return са по-привлекателни от if
- elsif
- else
. Още повече, че ми спестиха редове, с case
skeptic ми пищеше. Наистина ли не е естетично? Признавам си, че на мен ми харесва така и, ако не е подсъдимо, бих го оставила.
За всичко друго, благодаря още веднъж! Ще поровя документация, ще помисля и ще опитам да подобря!
Никога не се притеснявай от незнанието си, още повече за неща, които все още не сме преподали. (: Точно обратното - радвай се, че си се сблъскала с тях.
Ясно и кратко е за предпочитане пред кратко и хитро. Само ясно - също.
Да, в Ruby има много синоними/алтернативни форми. Може да се каже, че спадат в една от три категории:
- Едното от двете е за предпочитане в 99-100% от случаите и не трябва да използваш другото изобщо или освен ако не знаеш защо.
- И двете се използват, но за различни ситуации.
- И двете се използват в еднаква ситуация и е въпрос на автора да реши кое е по-благозвучно в конкретния случай.
Начините за получаване на Range
спадат повече към втората категория.
За case
- можеш да се вместиш в ограниченията с when
- then
. Не, return x if y
не е лошо, но аз не бих го ползвал ако ще го сложа на всеки ред, освен последния.