Memoization in Ruby

อีกหนึ่งเทคนิคที่มักพบเห็น และนำมาใช้กันในภาษา Ruby ก็คือ Memoization แต่ถ้าดูจากชื่อก็น่าจะงงๆ กันบ้างว่าเป็นมันคืออะไร แต่เชื่อผมเถอะว่าในโค้ดของคุณไม่มากก็น้อย ต้องเคยมีการใช้เทคนิคดังกล่าวแน่ๆ เพียงแค่คุณไม่รู้จักชื่อเท่านั้น ซึ่งเทคนิค Memoization จะช่วยเพิ่มความเร็วในการทำงานให้กับโปรแกรมของคุณไม่น้อยเลยทีเดียว

Memoization คืออะไร

Memoization is the process of storing a computed value to avoid duplicated work by future calls.

ถ้าแบ่งเป็นขั้นตอนจะมีด้วยกัน 3 ขั้นด้วยกันคือ

ถ้าอ่านคำอธิบายข้างต้นแล้วยังงง มาดูรายละเอียดพร้อมกับโค้ดตัวอย่างกันเลยดีกว่า น่าจะทำให้เข้าได้ดียิ่งขึ้น

def user_score
  User.find_by(name: 'Sam').try(:score)
end

Memoization มักจะใช้เครื่องหมาย ||=

def user_score
  @user_score ||= User.find_by(name: 'Sam').try(:score)
end

พูดง่ายๆ Memoization ก็เป็นการ Caching ข้อมูลนั้นเอง

References