0Pricing
Ruby Academy · บทเรียน

การกำหนดเมธอดแบบไดนามิก

เรียนรู้การกำหนดและเรียกใช้เมธอดแบบไดนามิกด้วย define_method และ method_missing

การกำหนดเมธอดแบบไดนามิก เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน

การสร้างเมธอดแบบไดนามิก

การกำหนดเมธอดแบบไดนามิก

ใน Ruby คุณสามารถสร้างเมธอดแบบไดนามิกขณะทำงานได้

ความสามารถนี้ช่วยให้โค้ดยืดหยุ่นและนำกลับมาใช้ใหม่ได้มากขึ้น

การกำหนดเมธอดแบบไดนามิก — ภาพประกอบ 1

การใช้ define_method

การใช้ define_method

เมธอด define_method ช่วยให้กำหนดเมธอดแบบไดนามิกได้

class Person
  define_method(:greet) { puts 'Hello!' }
end

p = Person.new
p.greet

การใช้ define_method พร้อมพารามิเตอร์

การใช้ define_method พร้อมพารามิเตอร์

คุณสามารถส่งอาร์กิวเมนต์ไปยังเมธอดที่สร้างขึ้นแบบไดนามิกได้

class Person
  define_method(:greet) { |name| puts "Hello, #{name}!" }
end

p = Person.new
p.greet('Alice')

การใช้ method_missing

การใช้ method_missing

เมธอด method_missing ดักจับการเรียกใช้เมธอดที่ไม่ได้กำหนดไว้

class Person
  def method_missing(name, *args)
    puts "Method '#{name}' is missing!"
  end
end

p = Person.new
p.unknown_method

การจัดการ method_missing แบบไดนามิก

การจัดการ method_missing แบบไดนามิก

คุณสามารถใช้ method_missing เพื่อกำหนดการจัดการเมธอดที่ยืดหยุ่นได้

class DynamicPerson
  def method_missing(name, *args)
    if name.to_s.start_with?('say_')
      puts "You asked me to say: #{name.to_s.split('_')[1..-1].join(' ')}"
    else
      super
    end
  end
end

p = DynamicPerson.new
p.say_hello_world

การเขียนทับ respond_to_missing?

การเขียนทับ respond_to_missing?

เพื่อจัดการการตรวจสอบเมธอดอย่างถูกต้อง ให้เขียนทับ respond_to_missing?

class DynamicPerson
  def method_missing(name, *args)
    if name.to_s.start_with?('say_')
      puts "Saying: #{name.to_s.split('_')[1..-1].join(' ')}"
    else
      super
    end
  end
  
  def respond_to_missing?(name, include_private = false)
    name.to_s.start_with?('say_') || super
  end
end

p = DynamicPerson.new
puts p.respond_to?(:say_hello)

การใช้ method_missing สำหรับตัวอ่านและตัวกำหนดค่าแบบไดนามิก

การใช้ method_missing สำหรับตัวอ่านและตัวกำหนดค่าแบบไดนามิก

คุณสามารถสร้างแอตทริบิวต์แบบไดนามิกโดยใช้ method_missing

class DynamicPerson
  def initialize
    @data = {}
  end
  
  def method_missing(name, *args)
    attribute = name.to_s.sub(/=$/, '')
    if name.to_s.end_with?('=')
      @data[attribute] = args.first
    else
      @data[attribute]
    end
  end
end

p = DynamicPerson.new
p.name = 'Alice'
puts p.name

ความเสี่ยงด้านความปลอดภัยของ method_missing

ความเสี่ยงด้านความปลอดภัยของ method_missing

การใช้ method_missing อย่างไม่เหมาะสมอาจทำให้เกิดความเสี่ยง:

  • พฤติกรรมที่ไม่คาดคิดขณะจัดการเมธอดที่ไม่รู้จัก
  • ปัญหาด้านประสิทธิภาพที่อาจเกิดขึ้นจากการค้นหาเมธอดมากเกินไป
  • ช่องโหว่ด้านความปลอดภัยหากใช้ร่วมกับข้อมูลเข้าจากผู้ใช้

ทบทวนเมธอดแบบไดนามิก

ขอแสดงความยินดี!

คุณได้เรียนรู้วิธีกำหนดและเรียกใช้เมธอดแบบไดนามิกใน Ruby แล้ว

ถัดไป คุณจะได้สำรวจคลาสเปิดและการแพตช์ลิง

การกำหนดเมธอดแบบไดนามิก — ภาพประกอบ 10

คำถามที่พบบ่อย

บทเรียน “การกำหนดเมธอดแบบไดนามิก” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “การกำหนดเมธอดแบบไดนามิก” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “การกำหนดเมธอดแบบไดนามิก”

เรียนรู้การกำหนดและเรียกใช้เมธอดแบบไดนามิกด้วย define_method และ method_missing คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “การกำหนดเมธอดแบบไดนามิก” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม

ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. เมตาโปรแกรมมิงคืออะไร
  2. การกำหนดเมธอดแบบไดนามิก
  3. คลาสเปิดและการแพตช์แบบลิง
  4. การใช้ send และ eval
← กลับไปที่ Ruby Academy