Що таке memoization в Ruby?

Обкладинка допису: Що таке memoization в Ruby?
ЗмістНатисність на посилання, щоб перейти до потрібного місця
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?

Цей допис поки що не має жодних доповнень від автора/ки.

Що таке Proc і Lambda в Ruby?
28 жовт., 15:57

Що таке Proc і Lambda в Ruby?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що відбувається, якщо викликати [1, 2, 3].map(&Person)
29 жовт., 17:54

Що відбувається, якщо викликати [1, 2, 3].map(&Person)

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Singleton class (eigenclass) у Ruby: що це і навіщо потрібно
29 жовт., 18:29

Singleton class (eigenclass) у Ruby: що це і навіщо потрібно

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
==, equal?, eql?, === у Ruby: що перевіряють і коли використовувати
29 жовт., 20:47

==, equal?, eql?, === у Ruby: що перевіряють і коли використовувати

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Include, Extend, Prepend у Ruby: як вони працюють і в чому різниця
29 жовт., 21:20

Include, Extend, Prepend у Ruby: як вони працюють і в чому різниця

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
module_function у Ruby: коли методи модуля доступні як модульні та як функції
29 жовт., 21:53

module_function у Ruby: коли методи модуля доступні як модульні та як функції

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
is_a?, kind_of?, instance_of? — як Ruby перевіряє тип об’єкта?
30 жовт., 19:55

is_a?, kind_of?, instance_of? — як Ruby перевіряє тип об’єкта?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
&& vs and — різниця в Ruby, яка може зламати ваш код
30 жовт., 20:23

&& vs and — різниця в Ruby, яка може зламати ваш код

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Змінні у Ruby: @, @@ та class instance variable
30 жовт., 20:54

Змінні у Ruby: @, @@ та class instance variable

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Різниця між blank?, present?, empty? та nil? у Ruby
30 жовт., 21:06

Різниця між blank?, present?, empty? та nil? у Ruby

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska