In Ruby memoization is a performance optimization. It allows you to execute some code, save it in a variable and not have execute that code again if the method is invoked, instead just return the value of a variable.
In the below code
some_method will only execute the
Account.find call the first time the method is invoked in on the object.
class MyClass def some_method @account ||= Account.find(3) end end
I learned recently that you can memoize the return value of a conditional expression as well. To do this wrap the expression in a
begin block and if
some_method is invoked more than once the condition will not be run after the first invocation. During the first invocation the conditions return value was saved to
@account and will be returned on each subsequent call to the method.
class MyClass def some_method @account ||= begin if @organization.has_accounts? Account.find(3) else Account.create(name: "lisa") end end end end
Similar post: How not to memoize in Ruby