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

7 วิธีทับทิมที่รู้จักกันน้อยเพื่อช่วยให้คุณเขียนโค้ดได้ดีขึ้น

คุณรู้หรือไม่ว่าการใช้วิธี Ruby ที่ถูกต้องสามารถช่วยคุณได้มาก

ยิ่งคุณคุ้นเคยกับวิธีการต่างๆ มากเท่าใด ยิ่งสร้างรหัสการทำงานได้เร็วเท่านั้น และโค้ดนี้จะยิ่งดีขึ้นทั้งในด้านประสิทธิภาพและคุณภาพ

วันนี้เลยอยากมาแนะนำ 7 วิธีที่น่าสนใจที่คุณอาจไม่เคยเห็นมาก่อน

สารบัญ

  • เมธอด 1 Integer#digits (ทับทิม 2.4)
  • 2 วิธีการแตะ
  • 3 Array#values_at
  • 4 แฮช#transform_values ​​(ทับทิม 2.4)
  • 5 Kernel#itself (ทับทิม 2.2)
  • 6 อาร์เรย์#จำนวน
  • 7 นับได้#รอบ
  • 8 สรุป
    • 8.1 ที่เกี่ยวข้อง

วิธีจำนวนเต็ม#หลัก (ทับทิม 2.4)

นี่เป็นวิธีการใหม่ใน Ruby 2.4 และมีประโยชน์มากหากคุณต้องการทำงานกับตัวเลขแต่ละตัวของจำนวนเต็ม

หมายเหตุ :ในกรณีที่คุณไม่สามารถทำการเปลี่ยนแปลง Ruby 2.4 ได้ทัน ขณะนี้ Fixnum &Bignum เลิกใช้แล้ว และทั้งสองอย่างรวมกันเป็นจำนวนเต็ม

คุณอาจคิดว่าการใช้การจัดทำดัชนีแบบอาร์เรย์อาจใช้งานได้ :

2[0]

# 0

2[1]

# 1

แต่สิ่งที่คุณได้รับไม่ใช่ตัวเลข แต่เป็นไบนารีบิตที่ประกอบเป็นตัวเลขนี้

ดังนั้นก่อน-digits วิธีการแก้ปัญหาทั่วไปคือการแปลงตัวเลขเป็นสตริง จากนั้นแบ่งสตริงนั้นเป็นอาร์เรย์ของอักขระโดยใช้ chars เมธอด และสุดท้ายแปลงทุกสตริงกลับเป็นจำนวนเต็ม

ตัวอย่าง :

123.to_s.chars.map(&:to_i).reverse

[3, 2, 1]

แต่ในโพสต์-digits method world คุณสามารถทำได้ง่ายๆ:

123.digits

[3, 2, 1]

ดีขึ้นมากใช่มั้ย

วิดีโอ :

วิธีการแตะ

บางครั้งคุณต้องการสร้างวัตถุ เรียกใช้วิธีการบางอย่างบนวัตถุนั้นแล้วส่งคืนวัตถุนั้น

คุณจะต้องทำสิ่งนี้ :

user = User.new

user.name = "John"

user

ปัญหาคือเราต้องจัดการกับตัวแปรชั่วคราวนี้

นี่คือที่ที่ tap วิธีการมาช่วย!

ด้วย tap ตัวอย่างสุดท้ายกลายเป็นสิ่งนี้:

User.new.tap { |user| user.name = "John" }

สังเกตว่าตัวแปรชั่วคราวหมดไปซึ่งเป็นสิ่งที่ดี 🙂

อาร์เรย์#values_at

หากคุณต้องการรับค่าที่ไม่ต่อเนื่องกันหลายค่าจากอาร์เรย์หรือแฮช คุณสามารถทำได้:

arr = [1,2,3,4,5]

a, b, c = arr[0], arr[1], arr[4]

หรือคุณสามารถใช้ values_at วิธีการ:

arr = [1,2,3,4,5]

a, b, c = arr.values_at(0, 1, 4)

วิธีนี้ใช้ได้กับแฮชด้วย :

hash = {bacon: 300, chocolate: 200}

p hash.values_at(:bacon, :chocolate)

# [300, 200]

แฮช#transform_values ​​(ทับทิม 2.4)

สมมติว่าคุณมีแฮชและต้องการเปลี่ยนค่าทั้งหมดด้วยเหตุผลบางประการ

ประเภทของสิ่งที่คุณจะทำกับ Array#map .

ปัญหาเกี่ยวกับ map คือคุณจะได้อาร์เรย์ของอาร์เรย์ (อาร์เรย์หลายมิติ) แทนที่จะเป็นแฮช นอกจากนี้ยังไม่มี Hash#map! .

ทางออกหนึ่งอาจเป็นสิ่งนี้ :

h = {bacon: 200, coconut: 300}

h.each { |k,v| h[k] = v*2 }

ในตัวอย่างนี้ เราคูณแต่ละค่าด้วยสอง

ซึ่งส่งผลใน :

{:bacon=>400, :coconut=>600}

ตั้งแต่ Ruby 2.4 มีวิธีที่ดีกว่านี้ :

h.transform_values! { |v| v * 2 }

นี่เป็นอีกวิธีหนึ่งที่มาจาก Rails ซึ่งขณะนี้มีให้ใช้งานนอกเฟรมเวิร์กแล้ว 🙂

เคอร์เนล#มันเอง (Ruby 2.2)

หากคุณบอกฉันว่าวิธีนี้ดูไม่ค่อยน่าสนใจในตอนแรก ฉันจะเห็นด้วยกับคุณ

แต่เหตุผลก็คือคุณต้องดูตัวอย่างที่ดีบ้าง

สมมติว่าเรามีอาร์เรย์ที่มีคำซ้ำกัน และเราต้องการนับมัน...

แม้ว่าจะมีหลายวิธีในการทำเช่นนี้ ฉันคิดว่านี่เป็นกรณีที่ดีสำหรับการทดสอบเพื่อนใหม่ของเรา:Kernel#itself .

ตัวอย่าง :

words = %w(cat cat tiger dog cat)

words.group_by(&:itself).transform_values(&:size)

สังเกตว่าฉันรวมสิ่งนี้กับ Hash#transform_values . ได้อย่างไร !

ถ้า transform_values ไม่พร้อมใช้งาน คุณสามารถทำได้:

words
  .group_by(&:itself)
  .each_with_object({}) { |(k,v), hash| hash[k] = v.size }

วิดีโอ :

หมายเหตุ :itself เมธอดปรากฏขึ้นภายใต้ Object ในเอกสารประกอบ แต่มีการกำหนดวิธีการใน Kernel โมดูล

อาร์เรย์#จำนวน

บางครั้งคุณก็แค่ต้องนับอะไรบางอย่าง

แทนที่จะใช้ตัวนับ + วนซ้ำ คุณสามารถใช้ count วิธีการ!

ตัวอย่าง :

letters = %w(a a a b c d a)

letters.count("a")

# 4

เวอร์ชันอาร์เรย์ของเมธอดนี้ยังใช้การบล็อก คุณจึงทำการนับที่ซับซ้อนยิ่งขึ้นได้

numbers = [1,2,3,4,5,6]

numbers.count(&:even?)

# 3

วิดีโอ :

นับได้#รอบ

คุณต้องการทำซ้ำรูปแบบบางอย่างหรือไม่? หรือคุณอาจต้องการสวิตช์เปิด/ปิดอย่างง่าย

จากนั้น Enumerable#cycle อาจเป็นสิ่งที่คุณกำลังมองหา!

ตัวอย่าง :

array = %w(a b c)

# Same as array * 3
array.cycle(3).to_a

แต่ฉันชอบใช้ cycle คือการสร้างวัตถุ "สวิตช์" หรือ "สลับ"

switch = %w(on off).cycle

switch.next

ข้อดีของสิ่งนี้คือคุณไม่จำเป็นต้องตรวจสอบค่าปัจจุบันของสวิตช์เพื่ออัปเดตด้วยตนเอง

โทรมาได้เลย next &Ruby จะรู้แน่ว่าต้องทำยังไง 🙂

สรุป

คุณได้เรียนรู้เกี่ยวกับวิธีการใหม่ที่มีประโยชน์:Integer#digits, Kernel#tap, Array#values_at, Hash#transform_values, Kernel#itself, Array#count, Enumerable#cycle

ถ้าคุณรู้เรื่องพวกนี้ดีอยู่แล้ว! ถ้าไม่ ฉันหวังว่าคุณจะพบว่ามีประโยชน์ 🙂

ชอบบทความนี้หรือไม่? จากนั้น แบ่งปันกับเพื่อนของคุณ เพื่อให้พวกเขาได้สนุกไปกับมันด้วย!