กรณีใช้งานจริง
แยกวิเคราะห์ข้อมูลที่มีโครงสร้าง
กรณีใช้งานจริง เป็นบทเรียน Ruby Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Ruby Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
เหตุใดการจับคู่รูปแบบจึงโดดเด่น
การจับคู่รูปแบบเหมาะที่สุดเมื่อจัดการกับ ข้อมูลที่มีโครงสร้าง เช่น ผลตอบกลับจาก API ต้นไม้การตั้งค่า และไฟล์ที่ผ่านการ parse โดยแทนที่การตรวจสอบ if/dig ที่ซ้อนกันด้วยนิพจน์เดียวที่อ่านได้ง่าย
require 'json'
resp = JSON.parse('{"ok":true,"data":42}', symbolize_names: true)
case resp
in { ok: true, data: }
puts(data)
endการจัดการผลสำเร็จและข้อผิดพลาดจาก API
จับคู่รูปร่างการตอบกลับที่แตกต่างกันในแขนงที่แยกจากกัน พร้อมดึงฟิลด์ที่เหมาะสมสำหรับแต่ละรูปแบบ
def handle(resp)
case resp
in { status: 'ok', result: }
"got #{result}"
in { status: 'error', message: }
"error: #{message}"
end
end
puts(handle({ status: 'error', message: 'bad input' }))การ parse อาร์กิวเมนต์คำสั่ง
จับคู่อาร์เรย์ของอาร์กิวเมนต์เพื่อเลือกคำสั่งให้ทำงานได้อย่างเป็นระเบียบ
def run(args)
case args
in ['add', a, b]
a.to_i + b.to_i
in ['echo', *rest]
rest.join(' ')
end
end
puts(run(['add', '3', '4']))
puts(run(['echo', 'hi', 'there']))การตรวจสอบรูปร่างระเบียน
ใช้รูปแบบเพื่อยืนยันว่าระเบียนมีฟิลด์และชนิดข้อมูลที่จำเป็นก่อนประมวลผล
def valid?(rec)
case rec
in { name: String, age: Integer => a } if a >= 0
true
else
false
end
end
puts(valid?({ name: 'Ada', age: 36 }))
puts(valid?({ name: 'X', age: -1 }))การแยกโครงสร้างการตั้งค่าที่ซ้อนกัน
ดึงค่าการตั้งค่าที่อยู่ลึกออกมาในการจับคู่ครั้งเดียว แทนการค้นหาต่อเนื่องหลายครั้ง
cfg = { server: { host: 'localhost', port: 8081 } }
case cfg
in { server: { host:, port: } }
puts("#{host}:#{port}")
endยูเนียนแบบติดแท็ก
รูปแบบทั่วไปในการเขียนโปรแกรมเชิงฟังก์ชัน คือข้อมูลจะมีแท็กระบุชนิด และระบบจะเลือกการทำงานตามแท็กนั้น
def area(shape)
case shape
in { type: 'circle', r: }
(3.14 * r * r).round(2)
in { type: 'rect', w:, h: }
w * h
end
end
puts(area({ type: 'rect', w: 3, h: 4 }))การจับคู่ด้วย deconstruct
ออบเจ็กต์ที่กำหนดเองจะจับคู่ได้หากกำหนด deconstruct (สำหรับรูปแบบอาร์เรย์) โดย Struct จะทำเช่นนี้ให้โดยอัตโนมัติ
Point = Struct.new(:x, :y)
case Point.new(1, 2)
in [x, y]
puts("#{x},#{y}")
endการจับคู่ด้วย deconstruct_keys
กำหนด deconstruct_keys เพื่อรองรับรูปแบบแฮช Struct ก็มีความสามารถนี้เช่นกัน จึงเปิดใช้งานการจับคู่ตามชื่อ
Point = Struct.new(:x, :y)
case Point.new(3, 4)
in { x:, y: }
puts("x=#{x} y=#{y}")
endคลาสพร้อมรูปแบบ
รวมรูปแบบชนิดข้อมูลเข้ากับรูปแบบแฮช เพื่อจับคู่คลาสเฉพาะ และฟิลด์ของคลาสนั้น
User = Struct.new(:name, :admin, keyword_init: true)
case User.new(name: 'Ada', admin: true)
in User(admin: true, name:)
puts("#{name} is an admin")
endทางเลือกสำรองที่ปลอดภัย
ให้มี else เสมอเมื่ออินพุตอาจจับคู่ไม่ได้ เพื่อเปลี่ยนข้อยกเว้นให้เป็นการจัดการอย่างเหมาะสม
def parse(data)
case data
in { id: Integer => id }
"id #{id}"
else
'unrecognized'
end
end
puts(parse({ name: 'x' }))นำทุกอย่างมารวมกัน
ลำดับการทำงานที่สมจริงคือ parse JSON จับคู่รูปร่าง ตรวจสอบด้วยเงื่อนไขกำกับ และดำเนินการ ทั้งหมดนี้ทำได้ในนิพจน์เดียวที่เป็นระเบียบ
require 'json'
event = JSON.parse('{"kind":"purchase","amount":150}', symbolize_names: true)
case event
in { kind: 'purchase', amount: Integer => amt } if amt > 100
puts("big purchase: #{amt}")
in { kind: 'purchase', amount: }
puts("purchase: #{amount}")
endตรวจสอบอย่างรวดเร็ว
คลาสที่กำหนดเองต้องกำหนดเมธอดใดเพื่อรองรับการจับคู่รูปแบบ แฮช เช่น in { x:, y: }
สรุปทบทวน: กรณีใช้งานจริง
คุณได้นำการจับคู่รูปแบบไปใช้กับปัญหาจริงแล้ว:
- เลือกการทำงานตามผลตอบกลับจาก API และคำสั่ง
- ตรวจสอบรูปร่างระเบียนด้วยเงื่อนไขกำกับ
- แยกโครงสร้างการตั้งค่าที่ซ้อนกันและยูเนียนแบบติดแท็ก
deconstruct/deconstruct_keysสำหรับออบเจ็กต์ที่กำหนดเอง- เพิ่ม
elseเสมอเพื่อให้มีทางเลือกสำรองที่ปลอดภัย
คุณเรียนจบหลักสูตรการจับคู่รูปแบบใน Ruby แล้ว
case { type: 'circle', r: 2 }
in { type: 'circle', r: } then puts(3.14 * r * r)
endคำถามที่พบบ่อย
บทเรียน “กรณีใช้งานจริง” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “กรณีใช้งานจริง” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Ruby Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Ruby Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “กรณีใช้งานจริง”
แยกวิเคราะห์ข้อมูลที่มีโครงสร้าง คุณปฏิบัติ Ruby Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Ruby Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Ruby Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน
บทเรียน “กรณีใช้งานจริง” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Ruby Academy นี้ได้ไหม
ได้ บทเรียน Ruby Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- พื้นฐาน case/in
- รูปแบบอาร์เรย์และแฮช
- รูปแบบ Find และการ์ด
- กรณีใช้งานจริง