Sam Schlinkert is a user on octodon.social. You can follow them or interact with them if you have an account anywhere in the fediverse. If you don't, you can sign up here.
Sam Schlinkert @schlink

Is the first way the "Ruby way" (how I wrote it) and the second more functional/the Golang way (from a Golang video tutorial)?

(Also, really warming up to my new Vim colorscheme...) octodon.social/media/1wicQXUJE

· Web · 0 · 0

@schlink Hm. I dunno much about Golang, but in Ruby I think I'd write:

def factorial(num):
if num <= 1:
return 1
end
num * factorial(num - 1)
end

@noelle huh. I was taught not to have `return` statements early in methods (unless error checking), which I first resisted but eventually came around to as it can improve readability if you're consistent about it.

I'm actually not 100% how your method works!! I'd have thought it would always return a 1...

@schlink It should only return 1 if num is less than or equal to 1 (<= 1). return statements in the final position are apparently unRubyic, so I got rid of it, but you could just as easily write

return num * factorial(num - 1)

@schlink As for having return statements early in methods - have return statements wherever it makes sense to have them. Not having them early in functions means you're giving up on a lot of input checking. There's no real value in reserving return statements until the end of a function; it doesn't /actually/ improve readability and it's just arbitrary.

@noelle I at first thought

return n * factorial(n-1)

was the sleekest Ruby solution but I'm getting a "stack level too deep" error when I run it.

@noelle oh I see-- you were showing that I could use the `return` keyword. The only reason I used it in the first screenshot is I think Go requires it. I'm all for implicit returns in Ruby!

So `return 1` is basically a loop break out of your method. That's interesting and new to me! Thanks!