Ruby Advanced - Metaprogramming & Design Patterns

Lesson 1
25 min

Introduction to Metaprogramming

Metaprogramming adalah kemampuan program untuk menulis kode saat runtime.

Apa itu Metaprogramming?

Metaprogramming adalah teknik di mana kode Ruby dapat:

  • Introspect dirinya sendiri
  • Memodifikasi struktur class/module saat runtime
  • Generate methods dinamis
  • Memanipulasi object model

Mengapa Metaprogramming?

  • Mengurangi code repetition (DRY)
  • Membuat DSL (Domain-Specific Language)
  • Framework magic (Rails menggunakan metaprogramming heavily)

Iklan

Object Model Ruby

class Person def initialize(name) @name = name end end person = Person.new("Alice") # Introspection puts person.class # Person puts Person.superclass # Object puts Object.superclass # BasicObject # Check methods puts person.methods.sort # List all methods puts person.respond_to?(:name) # false (no getter)

Open Classes

Ruby memungkinkan Anda membuka class yang sudah ada dan menambahkan methods:

# Menambahkan method ke String class String def shout self.upcase + "!!!" end end puts "hello".shout # "HELLO!!!"

⚠️ Monkey Patching Warning: Hati-hati mengubah core classes!

send Method

class Calculator def add(a, b) a + b end def subtract(a, b) a - b end end calc = Calculator.new # Normal call puts calc.add(5, 3) # 8 # Dynamic call with send operation = :add puts calc.send(operation, 5, 3) # 8 operation = :subtract puts calc.send(operation, 10, 4) # 6

public_send vs send

class Account def balance @balance end private def secret_method "Secret!" end end account = Account.new # send can call private methods puts account.send(:secret_method) # "Secret!" # public_send only calls public methods # account.public_send(:secret_method) # Error!

Iklan