오래된 (그리고 "답변 된") 질문이지만 대답으로 2 센트를 던질 것입니다.
TL; DR-반드시 그럴 필요는 없지만 코드를 좀 더 명확하게 만들 수 있습니다.
명시적인 리턴을 사용하지 않는 것이 "루비 방식"일 수 있지만, 익숙하지 않은 코드를 사용하거나이 루비의 기능에 익숙하지 않은 프로그래머에게는 혼란 스러울 수 있습니다.
다소 고안된 예이지만, 전달 된 숫자에 1을 더하고이를 인스턴스 변수에 할당하는 이와 같은 작은 기능이 있다고 상상해보십시오.
def plus_one_to_y(x)
@y = x + 1
end
이것은 값을 반환하는 함수입니까? 인스턴스 변수를 할당하고 할당 된 값을 반환하기 때문에 개발자가 의미하는 바를 말하기가 실제로 어렵습니다.
훨씬 나중에 다른 프로그래머 (아마도 루비가 마지막으로 실행 된 코드 라인을 기반으로 반환하는 방법에 익숙하지 않은)가 와서 로깅을 위해 인쇄 문을 넣고 싶다고 가정하면 함수는 다음과 같습니다.
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
end
무엇이든 반환 값을 기대하면 함수가 중단 됩니다 . 아무것도 반환 값을 기대하지 않으면 괜찮습니다. 분명히 코드 체인 아래로 이동하면 무언가를 반환하는 것이 반환 된 값을 기대하고 있으며 예상대로 돌아 가지 않으므로 실패합니다.
실제 질문은 이것입니다. 실제로 반환 값을 기대하는 것이 있습니까? 이 문제가 발생 했습니까? 앞으로 무언가가 깨질까요? 누가 알아! 모든 통화에 대한 전체 코드 검토 만 알려줍니다.
따라서 적어도 모범 사례 접근 방식은 중요한 경우 무언가를 반환한다는 것을 명시 적으로 나타내거나 그렇지 않을 때는 아무것도 반환하지 않는 것입니다.
작은 데모 함수의 경우 값을 반환하기를 원한다고 가정하면 다음과 같이 작성됩니다.
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
return @y
end
그리고 그것은 어떤 프로그래머에게나 그것이 가치를 반환한다는 것을 분명히 알 수 있으며, 그것을 깨닫지 않고 깨뜨리기가 훨씬 더 어렵습니다.
또는 다음과 같이 작성하고 return 문을 생략 할 수 있습니다 ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
그런데 왜 귀환이라는 단어를 남기지 않겠습니까? 왜 거기에 넣고 무슨 일이 일어나고 있는지 100 % 명확하게 만드십시오. 말 그대로 코드의 성능에 영향을 미치지 않습니다.