Илия обнови решението на 13.10.2015 19:19 (преди над 9 години)
Значи знам, че последната е грешна :) просто исках feedback, понеже съм я писал от горе, от долу и ще я поправя малко де :)
Имам един въпрос във връзка с return, когато не става много ясно от метода какво се връща, ок ли е да го ползваме ?
Освен това, понеже изискване беше да не променяме аргументите, аз го разбирам, че трябва да правим копие на референтният аргумент, примерно Snake и да боравим с неги, тоест да си имаме друга променлива, която да сочи към друго място в паметта и да боравим с този обект, а първоначалният въобще да не го пипаме, може ли малко feedback и тук ? :) Ами това е, мерси.
Относно първият ти въпрос - Може ли да използваме return
, ако не е ясно какво връща метода? - не съм сигурен, че те разбирам напълно. Какво имаш предвид?
- Методът има някакъв произволен елемент в него и не е детерминистичен? Тогава да - стига от името на метода да е достатъчно ясно, че това е така.
- Методът е някакви пълни спагети, и ми трябваше за да преобразувам тези спагети, които имам тук в тези спагети, който искам да подам там? Ако това е случаят, проблемът не е в самия
return
statement. Трябва да се помисли как да се оправи самия метод (или заобикалящите го такива).
За втория въпрос - правилно си го разбрал - трябва да се направи копие и да се мутира/връща него.
Малко насоки за подобрение на началната версия - главното нещо е, че доста преоткриваш колелото. Главната цел на тази задача беше да се поровите сред безкрайните методи на Array
, понеже няма време (и смисъл) да ги минем един по един на лекциите. Разглеждайки документацията на Object
, на Array
и на Enumerable
ще откриеш методи за
- Правене на копие
- Копие без първия елемент
- Първи/последен/произволен елемент
- Много други
Колекциите в Ruby имат utility методи за всякакви често срещани операции, не се ограничавай само до итерация и индексиране.
Поиграй си малко с имената:
-
move_helper
не е ясно какво прави преди човек да прочете имплементацията. -
mutable_snake
е подвеждащо, първоначалната змия също е mutable. - Защо
points
като е само един point. Също от името не се разбира какво е значимото на този point. -
coordinate
звучи като самоx
координата или самоy
координата. - Не използвай еднобуквени имена освен в известни математически/физични формули.
Ще видиш, че доста от проблемите с имената ще изчезнат след като разглеждаш наличните методи.
Още идеи:
- Опитай се да измислиш как можеш да имплементираш
next_coordinates
без да изброяваш всеки отделен случай. - Малко проблеми с whitespaces