การบังคับประเภทคือการเปลี่ยนประเภทของวัตถุไปเป็นประเภทอื่นพร้อมกับค่าของมัน ตัวอย่างเช่น การเปลี่ยนจำนวนเต็มเป็นสตริงด้วย 00 หรือลอยเป็นจำนวนเต็มด้วย 12 . 29 ที่อาจจะไม่ค่อยมีใครรู้จัก และ 32รหัส> วิธีที่ออบเจ็กต์บางตัวนำไปใช้นั้นทำเหมือนกันตั้งแต่แรกเห็น แต่มีความแตกต่างบางประการ
ใน AppSignal Academy ฉบับนี้ เราจะเจาะลึกถึงการคัดเลือกนักแสดงอย่างชัดเจนและการบังคับใช้ประเภทต่างๆ ใน Ruby ในขณะที่บรรยายสรุปเกี่ยวกับนักแสดงประเภทการพิมพ์ เราจะพูดถึงความแตกต่างระหว่างทั้งสองวิธี และอภิปรายถึงวิธีใช้งาน
ก่อนอื่น มาดูกันว่าโดยปกติแล้วเราบังคับค่าประเภทต่างๆ ใน Ruby ด้วยตัวช่วยแคสต์ที่ชัดเจนอย่างไร
ตัวช่วยแคสต์ที่ชัดเจน
ตัวช่วยในการแคสต์ที่พบบ่อยที่สุดคือ 40 , 50รหัส> , 65รหัส> และ 73รหัส> . นี่เป็นวิธีการหล่อที่ชัดเจน ช่วยให้เราแปลงค่าจากประเภทหนึ่งไปอีกประเภทหนึ่งได้อย่างง่ายดาย
ผู้ช่วยเหลือที่ชัดเจนมาพร้อมกับคำมั่นสัญญาที่ชัดเจน เมื่อใดก็ตามที่ 82 ถูกเรียกบนวัตถุ มันจะ เสมอ ส่งคืนสตริงแม้ว่าวัตถุจะแปลงเป็นสตริงได้ไม่ดีก็ตาม มันเหมือนกับการคัดเลือก Michael Keaton เป็น Batman คุณจะได้แบทแมน แม้ว่านักแสดงตลกจะไม่เหมาะกับบทนี้เป็นพิเศษก็ตาม
Ruby นำเสนอวิธีการช่วยเหลือเหล่านี้ในเกือบทุกวัตถุพื้นฐานในไลบรารีมาตรฐาน Ruby
วิธีการเหล่านี้ โดยเฉพาะ 91 ถูกนำไปใช้กับประเภทพื้นฐานส่วนใหญ่ใน Ruby แม้ว่าการแคสต์จะส่งคืนค่ากลับมาเกือบทุกครั้ง แต่ผลลัพธ์อาจไม่เป็นอย่างที่เราคาดหวัง
กำลังเรียก 105 , 114รหัส> , 129รหัส> และ 133รหัส> ตัวช่วยบังคับค่าใดๆ ให้เป็นประเภทที่เลือก โดยส่งคืนการแสดงประเภทที่ถูกบังคับ โดยไม่คำนึงว่าจะเกิดอะไรขึ้นกับค่านั้น
วิธีการบังคับโดยนัย
การเรียกวิธีการส่งประเภทกับค่าที่ไม่ทำหน้าที่เหมือนกับประเภทที่เรากำลังส่งไปอาจทำให้เกิดข้อผิดพลาดหรือสูญเสียข้อมูลได้ Ruby ยังมีวิธีการบีบบังคับโดยนัยซึ่งจะคืนค่าเฉพาะเมื่อวัตถุทำหน้าที่เหมือนชนิดเท่านั้น วิธีนี้ทำให้เรามั่นใจได้ว่าค่าจะทำหน้าที่เหมือนกับประเภทที่เราต้องการ วิธีการบังคับโดยนัยเหล่านี้คือ 148 , 159รหัส> , 168รหัส> และ 170 .
การบังคับขู่เข็ญโดยปริยายก็เหมือนกับการเลือกลีโอนาร์ด นิมอยเป็นบทบาทอื่นๆ ยกเว้นสป็อค พวกเขาจะได้ผลหากตัวละครอยู่ใกล้สป็อคมากพอ แต่จะล้มเหลวหากไม่ได้อยู่ใกล้ 181รหัส> ผู้ช่วย พยายาม เพื่อแปลงเป็นสตริง แต่จะเพิ่ม 194 หากวัตถุไม่ได้ใช้วิธีการและไม่สามารถถูกบังคับโดยปริยายได้
เราจะเห็นได้ว่า Ruby มีความเข้มงวดมากขึ้นเล็กน้อยในตอนนี้ในสิ่งที่ทำ และไม่ได้บังคับประเภทที่ร้องขอ หากไม่สามารถบังคับได้ ให้ระบุ 208 วิธีการไม่ได้ถูกนำมาใช้กับวัตถุและการเรียกมันทำให้เกิด 218 .
เมื่อใช้การบังคับโดยปริยาย เช่น 220รหัส> เราขอให้ฟังก์ชันส่งคืนออบเจ็กต์ String เฉพาะในกรณีที่ประเภทดั้งเดิมทำหน้าที่เหมือน String ด้วย ด้วยเหตุนี้ 232 ใช้งานเฉพาะกับ String ใน Ruby Standard Library เท่านั้น
วิธีที่ Ruby ใช้การบังคับโดยนัย
นอกจากจะแม่นยำมากขึ้นในสิ่งที่เราขอระหว่างการบังคับขู่เข็ญแล้ว การบังคับโดยนัยยังมีประโยชน์อะไรอีกบ้าง? ปรากฎว่า Ruby ใช้การบังคับโดยนัยในสถานการณ์ที่ค่อนข้างยุติธรรม ตัวอย่างเช่น เมื่อรวมวัตถุเข้ากับ 241 .
ที่นี่ เราเห็น Ruby เพิ่ม 256 เนื่องจากไม่สามารถทำการแปลงโดยนัยจาก 269 ได้ พิมพ์เป็น 273 .
หากเราใช้ 287 ในชั้นเรียน Ruby รู้วิธีบังคับ 291 ประเภท.
เช่นเดียวกับ Arrays และ 300 .
แต่ 318 ถูกใช้ในสถานการณ์ต่างๆ มากขึ้น เราสามารถใช้เพื่อทำลายโครงสร้าง Array ให้เป็นตัวแปรที่แยกจากกัน
นอกจากนี้ยังทำการแปลงวัตถุให้เป็นพารามิเตอร์บล็อกด้วย
มีสถานการณ์หลายกรณีที่ใช้วิธีการบังคับโดยนัย เช่น 324 ด้วย 335 . วิธีนี้จะบังคับค่าเป็นแฮชด้วย 345 ก่อนที่จะส่งต่อไปยัง 355 วิธีการ.
ประเภทการบังคับใช้
Ruby ยังเสนอวิธีการบังคับที่มีความยืดหยุ่นมากขึ้นเมื่อประเภทนั้นเป็นประเภทที่ไม่รู้จัก และเราต้องการให้แน่ใจว่าเราได้ประเภทที่ถูกต้อง มีหนึ่งรายการสำหรับทุกประเภทพื้นฐาน (366 , 373รหัส> , 382รหัส> , 393รหัส> , 409รหัส> ฯลฯ)
412รหัส> วิธีแรกพยายามโทร 421 กับค่า และเมื่อล้มเหลว ระบบจะเรียกมันว่า 435 วิธีการ ไม่ใช่ทุกวัตถุที่กำหนด 445 วิธีการจึงตรวจสอบทั้งการบังคับโดยนัย (456 ) และชัดเจน (464 ) วิธีการส่งจะเพิ่มโอกาสที่การแปลงสตริงจะทำงานและคุณจะได้รับค่าที่คุณต้องการ โดยการเรียกร้องการบังคับโดยนัยในครั้งแรก เรามีแนวโน้มที่จะได้รับผลลัพธ์ที่มีค่าเท่ากัน แต่เป็นประเภทการบังคับ และไม่ใช่สิ่งที่คล้ายกับ 479 .
คุณควรใช้วิธีการส่งโดยนัยสำหรับวัตถุที่ทำหน้าที่เหมือนประเภทที่จะถูกบังคับให้บังคับเท่านั้น เช่น 482รหัส> สำหรับคลาส String ของคุณเอง
นอกเหนือจากการพยายามบังคับโดยปริยายครั้งแรก 490 ตัวช่วยก็ตรวจสอบแบบที่ส่งคืนด้วย 507รหัส> เป็นเพียงวิธีการที่สามารถส่งคืนค่าประเภทใดก็ได้ แม้จะไม่ใช่สตริงก็ตาม เพื่อให้แน่ใจว่าเราได้รับค่าประเภทที่ร้องขอ 514 เพิ่ม 524 หากประเภทไม่ตรงกัน
ที่นี่เราจะเห็นได้ว่า Ruby ละเว้นผลลัพธ์ของ 538 เพราะมันส่งคืน 544 ซึ่งไม่ใช่ประเภท String แต่จะกลับไปเป็น 555 แทน ผลลัพธ์
ถ้า 567 ส่งคืน 579 ด้วย และไม่ใช่ประเภทที่ถูกต้อง 583 จะเพิ่ม 596 .
แม้ว่าอาจมีความน่าเชื่อถือมากกว่าในการบังคับใช้ประเภทการบังคับ แต่โปรดทราบว่าวิธีการช่วยเหลือการคัดเลือก (604 , 611รหัส> ฯลฯ) มักจะช้ากว่าเล็กน้อยเนื่องจากจำเป็นต้องตรวจสอบค่าที่กำหนดเพิ่มเติม
โดยสรุป
เมื่อคุณต้องการให้แน่ใจว่าคุณกำลังจัดการกับข้อมูลประเภทที่ถูกต้องสำหรับออบเจ็กต์ การบังคับประเภทถือเป็นกระบวนการที่มีประโยชน์ ในโพสต์นี้ เราได้รีเฟรชความรู้ของเราเกี่ยวกับตัวช่วยในการแคสต์ที่ชัดเจน เช่น 626 , 630รหัส> , 640รหัส> และ 656รหัส> . นอกจากนี้เรายังดูกรณีที่ผู้ช่วยเหลือโดยนัยเช่น 662 , 675รหัส> , 683รหัส> และ 693 มีประโยชน์และวิธีใช้งานโดย Ruby เอง
เราหวังว่าคุณจะพบว่าภาพรวมของการบังคับประเภทนี้มีประโยชน์ และวิธีที่คุณพบว่าการเปรียบเทียบการพิมพ์ของนักแสดง และเช่นเคย โปรดแจ้งให้เราทราบหากมีหัวข้อที่คุณต้องการให้เรากล่าวถึง หากคุณมีคำถามหรือความคิดเห็น อย่าลังเลที่จะส่งอีเมลหาเราที่ @AppSignal