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

กรณีใช้งานจริง

แยกวิเคราะห์ข้อมูลที่มีโครงสร้าง

กรณีใช้งานจริง เป็นบทเรียน 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. พื้นฐาน case/in
  2. รูปแบบอาร์เรย์และแฮช
  3. รูปแบบ Find และการ์ด
  4. กรณีใช้งานจริง
← กลับไปที่ Ruby Academy