DEV Community

vamsi pavan mahesh gunturu
vamsi pavan mahesh gunturu

Posted on

Avoid mutation of variables in ruby by extracting a function

Let's say you have the code something like this

def something_else
  2
end

def do_something
  x = 1
  x += 2 if something_else.even?

  puts "#{x} is bla bla" # use x for some other operation
end

If you observe the above code, in the do_something method. We are mutating the variable x based on something_else. So what's wrong with this?

The code can become hard to reason about/understand once you start mutating the variables. It can lead to bugs and control flow is not so nice. Maybe we are unable to perceive that pain in this trivial example, but this could become complicated quickly, once you use this approach in something like rails

So can we make it better? Yes! By extracting the mutation into a function we can write something which is easier to understand and easier to test

def do_something
  x = x_value

  puts "#{x} is bla bla" # use x for some other operation
end

def x_value
  initial_x_value = 1
  return initial_x_value + 2 if something_else.even?

  initial_x_value
end

By extracting the x_value method, we removed the mutation completely from do_something method and it's somewhat easier to follow than tracking what happened to variable x at this point. The bonus is you can easily test the x_value independently without depending on testing do_something method

Oldest comments (0)