Courses
Ruby Advanced - Metaprogramming & Design Patterns
0/12selesai
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