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").walkinclude เพิ่มเมธอดอินสแตนซ์
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.stampextend เพิ่มเมธอดคลาส
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.privilegesinclude กับ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การกำหนดมอดูล
- include และ extend
- Comparable และ Enumerable
- prepend และการค้นหาเมธอด