4 คะแนน โดย ffdd270 2020-07-30 | 3 ความคิดเห็น | แชร์ทาง WhatsApp

ตั้งแต่ Ruby 3 เป็นต้นไป จะมีการเพิ่ม Type Annotation แบบเดียวกับ TypeScript เข้ามา บทความนี้อธิบายว่า Matz และทีม Ruby Committer มีแนวคิดอย่างไรในการนำ static type เข้ามาสู่ Ruby และใช้แนวทางใดในการแก้ปัญหา โดยด้านล่างคือสรุป

ใน Ruby 3 มีการเพิ่มภาษาใหม่ชื่อ RBS และมาพร้อมกับ Ruby 3

RBS เป็นภาษาสำหรับ Type Annotation ของ Ruby

  • ที่มาของการนำมาใช้

( แปล untype เป็น dynamic type )

ประเภทและ dynamic type เป็นข้อถกเถียงที่มีมาอย่างยาวนานในภาษาการเขียนโปรแกรม โดย dynamic type ช่วยให้พัฒนาได้รวดเร็ว แต่มีปัญหาเมื่อขยายทีมและ code base ส่วนประเภทนั้นเหมาะกับระบบขนาดใหญ่ แต่มีความยืดหยุ่นน้อยกว่า

เพื่อให้ได้ข้อดีของทั้งสองแนวทาง C# จึงมีฟีเจอร์ dynamic ที่เลื่อนการตรวจสอบประเภทไปจนถึง runtime, PHP และ Python มีตัวเลือกสำหรับการตรวจสอบประเภท ส่วน TypeScript เลือกใช้ภาษาประเภทที่สร้างขึ้นสำหรับภาษาที่เดิมไม่ได้ระบุประเภทไว้

Ruby จึงสร้างภาษาแยกแยะประเภทมาตรฐานอย่าง RBS ขึ้นมาเพื่อให้ได้ข้อดีของทั้งสองแบบ

  • RBS มีหน้าตาอย่างไร?

RBS คล้ายกับ .h ของ C/C++/ObjC หรือ .d.ts ของ TypeScript ข้อดีของแนวทางนี้คือ สามารถรับประโยชน์จากการตรวจสอบประเภทได้โดยไม่ต้องแก้ไขไฟล์ Ruby ที่มีอยู่เดิม

ใน RBS มีการนิยามคุณสมบัติของคลาสและประเภทของเมธอด RBS เป็นภาษาที่ใช้อธิบายโครงสร้างของโปรแกรม Ruby และให้ภาพรวมของโค้ด รวมถึงคลาสและเมธอดที่นิยามไว้แก่ผู้พัฒนา ข้อดีที่ใหญ่ที่สุดคือ สามารถตรวจสอบนิยามรูปแบบได้ทั้งในส่วนของ implementation และการทำงานจริง

  • ความสามารถหลักของ RBS

การพัฒนาระบบประเภทสำหรับภาษา dynamic นั้นแตกต่างจากภาษาที่มี static type อยู่แล้ว ในโลกนี้มีโค้ด Ruby อยู่เป็นจำนวนมาก และระบบประเภทสำหรับ Ruby จำเป็นต้องรองรับโค้ดให้ได้มากที่สุดเท่าที่จะทำได้

ดังนั้นจึงมีการแนะนำคุณลักษณะสำคัญสองประการของโค้ด Ruby และวิธีที่ RBS ใช้แก้ปัญหา

  • Duck Typing

Duck typing คือเทคนิคการเขียนโดยไม่รู้ประเภทแน่ชัด แต่คาดว่าต้องมีเมธอดบางอย่างอยู่ RBS รองรับแนวทางนี้ด้วยการนำ interface เข้ามา ทำให้สามารถตรวจสอบได้ว่าอาร์กิวเมนต์มีเมธอดนั้นหรือไม่

  • ความไม่สม่ำเสมอ

นี่คืออีกแพตเทิร์นหนึ่งของโค้ดที่ทำให้นิพจน์สามารถมีค่าจากหลายประเภทที่ต่างกันได้ ซึ่งเป็นแนวทางที่นิยมใน Ruby เช่นกัน และ RBS ก็รองรับสิ่งนี้ผ่าน union type และ method overload

  • การเขียนโปรแกรม Ruby ร่วมกับประเภท

แนะนำข้อดีหลักของ RBS

  • ค้นพบบั๊กได้มากขึ้น

  • ความปลอดภัยของ nil

  • การทำงานร่วมกับ IDE ที่ดีกว่าเดิม

  • แนวทางสำหรับ Duck Typing

3 ความคิดเห็น

 
heycalmdown 2020-07-30

https://crystal-lang.org - น่าสนใจว่าคริสตัลจะวางความสัมพันธ์กับ RBS อย่างไร (Crystal เป็นภาษาแบบคอมไพล์ที่ยืมไวยากรณ์ของ Ruby มาใช้)

 
ffdd270 2020-07-30

; m; เนื้อหาถูกตัดกลางทางอยู่เรื่อย ๆ เลยลบโค้ดทั้งหมดออกแล้วครับ/ค่ะ ต้องขออภัยที่กลายเป็นสแปมโดยไม่ตั้งใจ T_T..

 
xguru 2020-07-30

อ๊ะ น่าจะเป็นเพราะมี `