Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Ruby

9 คุณสมบัติใหม่ใน Ruby 2.6

Ruby เวอร์ชันใหม่มาพร้อมกับฟีเจอร์ใหม่และการปรับปรุงประสิทธิภาพ

คุณต้องการติดตามการเปลี่ยนแปลงหรือไม่

มาดูกัน!

ช่วงที่ไม่มีที่สิ้นสุด

Ruby 2.5 และเวอร์ชันเก่ากว่ารองรับรูปแบบหนึ่งช่วงที่ไม่มีที่สิ้นสุดแล้ว (ด้วย Float::INFINITY ) แต่ Ruby 2.6 ยกระดับขึ้นไปอีกระดับ

ช่วงที่ไม่มีที่สิ้นสุดใหม่ มีลักษณะดังนี้:

(1..)

ซึ่งแตกต่างจากช่วงปกติเนื่องจากไม่มีค่าสิ้นสุดเช่น (1..10) .

ตัวอย่างการใช้งาน :

["a", "b", "c"].zip(1..)
# [["a", 1], ["b", 2], ["c", 3]]

[1,2,3,4,5][1..]
# [2, 3, 4, 5]

(1..).step(5).take(100)
# [1, 6, 11, 16, 21, 26, 31, 36, 41, 46]

มีตัวอย่างอะไรอีกบ้างที่คุณคิดได้

นับได้::ลำดับเลขคณิต

มีการแนะนำวัตถุ Enumerable ชนิดใหม่ใน Ruby 2.6

ฉันกำลังพูดถึง Enumerable::ArithmethicSequence .

ขณะนี้มีสองวิธีที่ให้คุณ ArithmethicSequence :

  • ช่วง#ขั้นตอน
  • ตัวเลข#ขั้นตอน

มีอะไรพิเศษเกี่ยวกับเรื่องนี้บ้าง

ลำดับเลขคณิต รู้ว่ามีองค์ประกอบกี่องค์ประกอบ อะไรคือองค์ประกอบแรกและองค์ประกอบสุดท้าย

ตัวอย่าง :

(1..10).step(2).first
# 1

(1..10).step(2).last
# 9

ก่อนเหล่านี้ &สุดท้าย ไม่มีเมธอดก่อน Ruby 2.6 และนั่นคือสาเหตุที่ ArithmethicSequence มีอยู่แล้ว!

ความแตกต่างอีกอย่างหนึ่ง :

(1..10).step(2) == (1..10).step(2)
# false - Ruby 2.5 (and older)

(1..10).step(2) == (1..10).step(2)
# true - Ruby 2.6

ลำดับเลขคณิตสามารถเปรียบเทียบกันได้ใน 2.6

ผสาน Hash เข้ากับหลายอาร์กิวเมนต์

หากคุณต้องการรวมแฮชหลายอันเข้าด้วยกันเพื่อให้คุณสามารถรวมเป็นหนึ่งเดียว...

คุณทำได้ :

a = { a: 1 }
b = { b: 2 }
c = { c: 3 }

a.merge(b).merge(c)
# {:a=>1, :b=>2, :c=>3}

Ruby 2.6 เพิ่มวิธีใหม่ :

a.merge(b, c)
# {:a=>1, :b=>2, :c=>3}

ผลลัพธ์เหมือนเดิม แต่คุณต้องเรียกใช้เมธอดเพียงครั้งเดียว!

ตัวเลือกข้อยกเว้นใหม่

เมื่อคุณใช้วิธีการแปลงเช่น Integer คุณจะได้รับข้อยกเว้นหากไม่สามารถแปลงค่าได้

ตัวอย่าง :

Integer("a")
# ArgumentError (invalid value for Integer(): "a")

Ruby 2.6 เพิ่ม ข้อยกเว้น . ใหม่ อาร์กิวเมนต์คำหลักเพื่อ:

  • จำนวนเต็ม()
  • โฟลต()
  • เหตุผล()
  • คอมเพล็กซ์()

คุณสามารถควบคุมพฤติกรรมของวิธีการเหล่านี้ได้ด้วยคำหลักนี้

ตัวอย่าง :

Integer("a", exception: false)
# nil

Random.bytes

หากคุณต้องการไบต์สุ่ม Ruby 2.6 ให้เพิ่ม bytes . ใหม่ วิธีการ สุ่ม ชั้นเรียน

นี่คือตัวอย่าง :

Random.bytes(10)
# "\xCD\r\xE6Wz\xBA)\x02\xC4\xDB"

นี่ไม่ใช่ฟังก์ชันใหม่ทั้งหมด เนื่องจากมีให้บริการผ่าน securerandom . เสมอ โมดูล

require 'securerandom'

SecureRandom.bytes(10)

ทำไมต้องกังวลกับวิธีการใหม่นี้?

Random.bytes แลกเปลี่ยนความปลอดภัยเพื่อความเร็ว ซึ่งเร็วกว่า SecureRandom 8 เท่า .

ช่วง#%

%ใหม่ % เพิ่มเมธอดใน Range . แล้ว ใน Ruby 2.6

ตัวอย่าง :

((0..) % 2).take(5)

# [0, 2, 4, 6, 8]

วิธีนี้เทียบเท่ากับ Range#step .

TracePoint#parameters

TracePoint class ช่วยให้คุณติดตามเหตุการณ์ต่างๆ เช่น การเรียกใช้เมธอด การกำหนดคลาส &เธรด

Ruby 2.6 เพิ่ม parameters ใหม่ วิธีการ

ด้วยวิธีการใหม่นี้ คุณสามารถพิมพ์รายการพารามิเตอร์สำหรับวิธีการที่ถูกเรียกได้

ตัวอย่าง :

TracePoint.trace(:call, :b_call, :c_call) do |tp|
  p [tp.event, tp.parameters]
end

def orange(a,b,c*)
end

orange(1,2,3)

ผลลัพธ์ใน :

[:call, [[:req, :a], [:req, :b], [:rest, :c]]]

กองชั่วคราว

ฮีปชั่วคราวคือการปรับปรุงประสิทธิภาพสำหรับออบเจ็กต์อายุสั้นที่มีจุดมุ่งหมายเพื่อลดปัญหาการแตกแฟรกเมนต์หน่วยความจำ &การเรียกใช้ malloc ที่ช้า

Malloc เป็นวิธีที่ล่าม Ruby (และโปรแกรม C ส่วนใหญ่) ขอหน่วยความจำ จากระบบปฏิบัติการ

ตามรายการ NEWS เรากำลังดูการเร่งความเร็ว 6-7%

ฉันใช้เกณฑ์มาตรฐาน:

ดูเหมือนว่าจะมีประสิทธิภาพมากที่สุดเมื่อสร้างแฮชจำนวนมาก องค์ประกอบที่มีขนาดเล็กกว่า 10 รายการ .

9 คุณสมบัติใหม่ใน Ruby 2.6

แฮชที่ใหญ่ขึ้นจะช้าลงใน Ruby 2.6 (ตัวอย่าง 3) ตามผลลัพธ์เหล่านี้

วัตถุอื่นๆ ที่สามารถ ได้ประโยชน์จาก Transient Heap :

  • อาร์เรย์
  • โครงสร้าง
  • อ็อบเจ็กต์ปกติ (จากคลาสที่คุณสร้าง)

Array#union &Array#difference

สองวิธีใหม่ ยูเนี่ยน &ความแตกต่าง ถูกเพิ่มใน Array คลาสใน Ruby 2.6

ตัวอย่าง :

[1,2,3,4,5].difference([3])
# [1, 2, 4, 5]

[1,2,3,4,5].union([5,6,7])
# [1, 2, 3, 4, 5, 6, 7]

วิธีการใหม่เหล่านี้มีหลายอาร์กิวเมนต์

สรุป

Ruby 2.6 มาพร้อมกับคุณสมบัติใหม่ที่มีประโยชน์เพื่อช่วยให้คุณเขียนโค้ดได้ดีขึ้นในเวลาที่น้อยลง ฟีเจอร์ใหม่ที่เกี่ยวข้องกับประสิทธิภาพ MJIT (Method Based Just-in-TIme Compiler) จะกล่าวถึงในบทความเฉพาะ

ทับทิม 2.6 คาดว่าจะวางจำหน่ายใน 25 ธันวาคม 2018 .

หากคุณต้องการติดตามการเปลี่ยนแปลง พัฒนาทักษะ Ruby ของคุณและเป็นนักพัฒนา Ruby ที่ยอดเยี่ยม อย่าลืมเข้าร่วมจดหมายข่าว Ruby ของฉันวันนี้

ขอบคุณสำหรับการอ่าน!