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

include และ extend

ผสมพฤติกรรมเข้าไป

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

การผสมพฤติกรรมเข้าด้วยกัน

พลังที่แท้จริงของโมดูลอยู่ที่ มิกซ์อิน ซึ่งช่วยแบ่งปันเมธอดระหว่างคลาสต่าง ๆ โดยไม่ต้องสืบทอดคลาส เครื่องมือหลักสองอย่างคือ include และ extend

module Walkable
  def walk
    "#{name} is walking"
  end
end
class Person
  include Walkable
  attr_reader :name
  def initialize(name)
    @name = name
  end
end
puts Person.new("Ada").walk

include เพิ่มเมธอดอินสแตนซ์

include ผสมเมธอดของโมดูลเข้ามาเป็น เมธอดอินสแตนซ์ ออบเจ็กต์ทุกตัวของคลาสจะมีเมธอดเหล่านี้

module Sayable
  def say(msg)
    "#{msg}!"
  end
end
class Dog
  include Sayable
end
puts Dog.new.say("Woof")

นำกลับมาใช้ซ้ำในหลายคลาส

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

module Timestamped
  def stamp
    "created"
  end
end
class Post; include Timestamped; end
class Comment; include Timestamped; end
puts Post.new.stamp
puts Comment.new.stamp

extend เพิ่มเมธอดคลาส

extend ผสมเมธอดของโมดูลเข้ามาเป็น เมธอดคลาส หรือเมธอดที่อยู่บนออบเจ็กต์คลาสโดยตรง

module Findable
  def find(id)
    "Finding record #{id}"
  end
end
class User
  extend Findable
end
puts User.find(42)

extend กับออบเจ็กต์หนึ่งรายการ

คุณสามารถใช้ extend กับออบเจ็กต์เพียงรายการเดียว เพื่อให้ออบเจ็กต์นั้นมีเมธอดเพิ่มขึ้น โดยไม่กระทบออบเจ็กต์อื่น

module Admin
  def privileges
    "all access"
  end
end
user = Object.new
user.extend(Admin)
puts user.privileges

include กับ extend

โปรดจำความแตกต่างดังนี้:

  • include => เมธอดจะกลายเป็นเมธอด อินสแตนซ์
  • extend => เมธอดจะกลายเป็นเมธอด คลาส/ออบเจ็กต์
module Helper
  def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.help

โมดูลมองเห็นเมธอดของออบเจ็กต์เจ้าภาพ

เมธอดที่ถูกผสมจะทำงานในบริบทของออบเจ็กต์เจ้าภาพ จึงสามารถเรียกใช้เมธอดของเจ้าภาพเองและเข้าถึงข้อมูลของเจ้าภาพได้

module Describable
  def describe
    "I am #{role}"
  end
end
class Worker
  include Describable
  def role; "a worker"; end
end
puts Worker.new.describe

ฮุก included

กำหนด self.included(base) เพื่อให้โค้ดทำงานโดยอัตโนมัติเมื่อมีการนำโมดูลไปใช้ รูปแบบคลาสสิกคือการเพิ่มเมธอดคลาสไปพร้อมกัน

module Trackable
  def self.included(base)
    puts "Trackable added to #{base}"
  end
end
class Order
  include Trackable
end

การตรวจสอบการเป็นสมาชิก

is_a? และ ancestors แสดงให้เห็นว่าโมดูลที่ถูกนำไปใช้จะกลายเป็นส่วนหนึ่งของสายประเภทของออบเจ็กต์

module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestors

การรวมมิกซ์อินหลายรายการ

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

module Swimmable; def swim; "swimming"; end; end
module Runnable; def run; "running"; end; end
class Athlete
  include Swimmable
  include Runnable
end
a = Athlete.new
puts a.swim
puts a.run

นำทุกอย่างมาประกอบกัน

มิกซ์อินช่วยแบ่งปันพฤติกรรมได้อย่างยืดหยุ่น:

  • include สำหรับเมธอดอินสแตนซ์
  • extend สำหรับเมธอดคลาสหรือออบเจ็กต์เพียงรายการเดียว
  • เมธอดที่ถูกผสมจะทำงานในบริบทของออบเจ็กต์เจ้าภาพ
  • ประกอบโมดูลขนาดเล็กหลายรายการเข้าด้วยกัน
module Greet
  def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hi

ตรวจความเข้าใจ

ทดสอบความเข้าใจเกี่ยวกับ include และ extend ของคุณ

ทบทวน

คุณได้เรียนรู้เรื่องมิกซ์อินดังนี้:

  • include => เมธอดอินสแตนซ์
  • extend => เมธอดคลาสหรือออบเจ็กต์เพียงรายการเดียว
  • เมธอดที่ถูกผสมจะทำงานในบริบทของออบเจ็กต์เจ้าภาพ
  • ฮุก included จะทำงานเมื่อมีการนำโมดูลไปใช้
module Loud
  def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")

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

บทเรียน “include และ extend” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “include และ extend”

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

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

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

บทเรียน “include และ extend” ใช้เวลานานแค่ไหน

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

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

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

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

  1. การกำหนดมอดูล
  2. include และ extend
  3. Comparable และ Enumerable
  4. prepend และการค้นหาเมธอด
← กลับไปที่ Ruby Academy