การแปลงจำนวนเต็มอย่างปลอดภัยใน Ruby
เมื่อทำงานกับสตริงใน Ruby คุณอาจพบว่าตัวเองต้องการแปลงมันเป็นจำนวนเต็ม อย่างไรก็ตาม งานนี้อาจกลายเป็นเรื่องยุ่งยากเนื่องจากความเสี่ยงที่จะพบกับสตริงที่ไม่ถูกต้องหรือไม่คาดคิด ลองนึกภาพว่าคุณมีสตริงอย่าง 'lolipops'
— ถ้าคุณพยายามแปลงมันโดยตรงโดยใช้วิธี to_i
คุณจะได้ผลลัพธ์เป็น 0
ซึ่งทำให้ไม่สามารถบอกได้ว่าข้อมูลที่ป้อนมานั้นเป็นตัวเลขที่ถูกต้องหรือไม่ ในบล็อกโพสต์นี้เราจะสำรวจวิธีการแปลงจำนวนเต็มจากสตริงอย่างปลอดภัย โดยมั่นใจว่าหากมีข้อมูลที่ไม่ถูกต้องจะสร้างข้อยกเว้นที่เหมาะสม
ปัญหา: การแปลงสตริงเป็นจำนวนเต็ม
เรามาเริ่มต้นด้วยสตริงที่ง่าย:
some_string = '123'
เมื่อคุณใช้วิธี to_i
แบบนี้:
some_string.to_i # => 123
ระบบทำงานได้อย่างสมบูรณ์สำหรับสตริงที่เป็นตัวเลข แต่จะเกิดอะไรขึ้นถ้าสตริงนั้นมีตัวอักษรที่ไม่ใช่ตัวเลข?
invalid_string = 'lolipops'
puts invalid_string.to_i # => 0
ในกรณีนี้ to_i
จะคืนค่าเป็น 0
ซึ่งหมายความว่าคุณสูญเสียข้อมูลที่สำคัญเกี่ยวกับสตริงต้นฉบับ คุณจะไม่รู้ว่าข้อมูลที่ป้อนเป็นเพียง 0
หรือว่าเป็นสตริงที่ไม่ถูกต้องซึ่งควรทำให้เกิดข้อผิดพลาด ดังนั้น การใช้วิธีการที่ปลอดภัยกว่าในการจัดการการแปลงเหล่านี้จึงเป็นสิ่งจำเป็นเพื่อความสมบูรณ์ของข้อมูลของคุณ
โซลูชัน: ใช้ Integer
Method
Ruby มีวิธีในตัวที่เรียกว่า Integer
ซึ่งมีจุดประสงค์เฉพาะสำหรับการทำเช่นนี้ มันสามารถสร้างข้อยกเว้นสำหรับข้อมูลที่ไม่ถูกต้อง ซึ่งตรงตามความกังวลของเรา นี่คือวิธีการทำงาน:
ตัวอย่างการใช้งาน Integer
:
valid_number = Integer('1001') # => 1001
invalid_number = Integer('1001 nights') # Raises ArgumentError
ในกรณีนี้ การพยายามแปลงสตริงที่ไม่ถูกต้องจะทำให้เกิด ArgumentError
ซึ่งช่วยให้คุณสามารถจับปัญหานี้ได้ทันที
การจัดการฐานตัวเลขที่แตกต่างกัน
เมื่อทำงานกับ Integer
คุณต้องตระหนักถึงวิธีที่ Ruby ตีความสตริงที่มีรูปแบบเฉพาะ ตัวอย่างเช่น:
Integer('0x23') # => 35 (เลขฐานสิบหก)
Integer('023') # => 19 (เลขฐานแปด) โดยค่าเริ่มต้น
เพื่อหลีกเลี่ยงความประหลาดใจเหล่านี้ Ruby 1.9.2 ได้เปิดตัวอาร์กิวเมนต์ที่สองซึ่งเป็นออปชันสำหรับ Integer
เพื่อให้คุณสามารถระบุฐานของตัวเลขได้:
Integer('23', 10) # => 23
Integer('0x23', 10) # Raises ArgumentError
Integer('023', 10) # => 23 (ตีความเป็นเลขฐานสิบ)
โดยการส่งฐาน คุณสามารถควบคุมวิธีการที่สตริงที่มีรูปแบบที่แปลกประหลาดถูกแปลง ทำให้คุณมั่นใจว่ากำลังจัดการกับค่าที่คาดหวังอยู่เสมอ
บทสรุป
โดยสรุป การแปลงจำนวนเต็มจากสตริงใน Ruby สามารถทำได้อย่างปลอดภัยโดยการใช้วิธี Integer
ซึ่งสร้างข้อยกเว้นสำหรับข้อมูลที่ไม่ถูกต้อง แยกแยะจากศูนย์ที่เป็นจำนวนตัวเลขที่ถูกต้อง วิธีการนี้มีความน่าเชื่อถือมากขึ้นในการจัดการการแปลงสตริงโดยมั่นใจถึงความสมบูรณ์ของข้อมูลเชิงตัวเลขของคุณ
การใช้วิธี Integer
ร่วมกับฐานที่ระบุช่วยให้นักพัฒนาสามารถบรรเทาปัญหาที่อาจเกิดขึ้นด้วยวิธีที่มีความเข้มงวดน้อยกว่า เช่น to_i
อย่าลืมจัดการข้อผิดพลาดอย่างถูกต้อง โดยการจับ ArgumentError
และมั่นใจว่าแอปพลิเคชันของคุณทำงานตามที่คาดหวังเมื่อเผชิญกับข้อมูลที่ไม่ถูกต้อง
ตอนนี้คุณมีความรู้ในการแปลงจำนวนเต็มอย่างปลอดภัยใน Ruby แล้ว นำวิธีการเหล่านี้ไปใช้ในโค้ดของคุณ และเพิ่มความแข็งแกร่งให้กับแอปพลิเคชันของคุณให้ดียิ่งขึ้น!