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