คุณหยุดโปรแกรม Ruby ก่อนเวลาอย่างไร?
ปกติโปรแกรม จะรันจนเสร็จ การประมวลผลคำสั่งทั้งหมด
หรือจนกว่าจะมีข้อยกเว้น (exception) ที่ไม่ได้รับการจัดการเกิดขึ้น
แต่ถ้าคุณกำลังเขียน โปรแกรม Ruby ที่ไม่จำเป็นต้องรันตลอดเวลา คุณอาจต้องการหยุดโปรแกรมก่อนเวลาด้วยเหตุผลบางอย่าง
คุณสามารถทำได้ด้วยเมธอด exit
เมธอด exit นี้ทำงานอย่างไร?
มาแชทกันเลย!
วิธีต่างๆ ในการหยุดโปรแกรม
เมื่อคุณเรียก exit โปรแกรมของคุณ จะไม่หยุดทันที
สิ่งที่เกิดขึ้นคือ:
Ruby ยกเลิกข้อยกเว้น SystemExit ซึ่งให้ส่วนอื่นของโปรแกรมโอกาสในการทำความสะอาด
คุณสามารถรันโค้ดนี้เพื่อดูการสาธิต:
begin exit rescue SystemExit p 123 end
สิ่งนี้พิมพ์ 123 ก่อนออก
หากคุณต้องการให้โปรแกรมข้ามกระบวนการทำความสะอาดนี้ คุณสามารถใช้ exit! ได้
ตัวอย่าง:
begin exit! rescue SystemExit p 123 end
สังเกตว่านี้จะ ไม่ พิมพ์ 123 ก่อนที่โปรแกรมจะจบ
คุณยังสามารถใช้เมธอดอีกตัวหนึ่งได้
มันชื่อว่า abort
ด้วยเมธอดนี้คุณสามารถระบุข้อความข้อผิดพลาดได้
เช่นนี้:
abort "No Bacon Left"
ซึ่งเทียบเท่ากับ:
warn "No Bacon Left!" exit 1
เมธอด warn พิมพ์ข้อความข้อผิดพลาดไปที่ standard error
แต่ 1 อาร์กิวเมนต์นี้สำหรับ exit คืออะไร?
นั่นคือหัวข้อถัดไป!
การทำความเข้าใจรหัสสถานะ (Status Codes)
เมื่อโปรแกรมจบ ไม่ใช่แค่โปรแกรม Ruby แต่อะไรก็ตาม มันจะทิ้งรหัสสถานะไว้
สิ่งที่คุณต้องรู้:
- รหัสสถานะ
0หมายถึงโปรแกรมจบปกติ - รหัสสถานะอื่นๆ (ไม่ใช่
0) ใช้ส่งสัญญาณเงื่อนไขข้อผิดพลาด - ผลของการคืนรหัสสถานะที่ไม่ใช่ศูนย์ ขึ้นอยู่กับสภาพแวดล้อมปัจจุบันของคุณ
สิ่งนี้ มีประโยชน์ เพราะระบบปฏิบัติการ หรือโปรแกรมทั่วไป สามารถใช้รหัสสถานะนี้ สำหรับการตรวจสอบ บันทึก log และแม้แต่การรีสตาร์ทโปรแกรมที่ล้มเหลวโดยอัตโนมัติ
ใน Linux คุณสามารถใช้ echo $? เพื่อหา exit status code ของโปรแกรมล่าสุด
กลับมาที่ Ruby:
เมื่อคุณเรียก exit รหัสสถานะคือ 0 โดยค่าเริ่มต้น
คุณสามารถส่งรหัสสถานะอื่นเป็นอาร์กิวเมนต์ได้
นั่นคือเหตุผลที่เมื่อคุณเรียก abort รหัสสถานะจะถูกตั้งเป็น 1 เมธอด abort ใช้เพื่อส่งสัญญาณข้อผิดพลาด
การหยุดลูป (Loop)
หากคุณไม่อยากหยุดโปรแกรมทั้งหมด แค่ลูป คุณต้องใช้สิ่งอื่น
คุณสามารถใช้คีย์เวิร์ด break:
while 1 == 1 break end
สิ่งนี้ทำงานภายในบล็อกได้เช่นกัน ไม่ใช่แค่ while loops
การออกจากเมธอด (Method)
เมธอด Ruby จบตามธรรมชาติที่บรรทัดสุดท้ายของโค้ด
หากคุณอยากออกก่อน...
ใช้คีย์เวิร์ด return
ตัวอย่าง:
def apples return "I had my two apples today" "bacon" end
โค้ดนี้ไม่เคยถึง "bacon" เพราะ return ก่อนเวลา
โบนัส: การหยุดลูปอันลانهائية
มันเกิดขึ้น
บางครั้งคุณลืมเพิ่มตัวนับ และสร้าง ลูปอันลانهائية (infinite loop) ขึ้นมา
เพื่อหยุดโปรแกรม คุณสามารถกดชุดปุ่ม:
CTRL+C
สรุป
คุณได้เรียนรู้เกี่ยวกับเมธอด exit ใน Ruby เมธอด abort รหัสสถานะการออก และวิธี break ออกจากลูป
อย่าลืมแชร์บทความนี้เพื่อให้คนอื่นเพลิดเพลินไปกับมัน
ขอบคุณที่อ่าน! 🙂