Table of contentsClick link to navigate to the desired location
This content has not been translated yet.We're showing the original Ukrainian content below.
Memoization - це коли Ruby "запам’ятовує" результат обчислення, щоб не рахувати знову. Використовується для оптимізації - особливо, коли метод викликається багато разів.
Як працює @x ||= ...
@x ||= fetch_x
означає:
Якщо @x ще не має значення (тобто nil або false), тоді виконай fetch_x і збережи результат у @x. Інакше - просто поверни вже збережене.
Різниця з простим присвоєнням
@x = fetch_x # виконує fetch_x КОЖЕН раз @x ||= fetch_x # виконує fetch_x тільки ПЕРШИЙ раз
Наприклад:
def expensive puts "Calculating..." 42 end def answer @answer ||= expensive end answer # => Calculating... 42 answer # => 42 (без обчислення вдруге!)
Але обережно:
||= не спрацює, якщо значення може бути false:
@flag ||= true # якщо @flag = false, Ruby вважатиме це "порожнім" і перепише його на true
Якщо потрібно зберегти навіть false, краще писати:
@flag = true if @flag.nil?
This post doesn't have any additions from the author yet.