Computer >> Máy Tính >  >> Lập trình >> Ruby

7 phương pháp Ruby ít được biết đến để giúp bạn viết mã tốt hơn

Bạn có biết rằng sử dụng đúng phương pháp Ruby có thể giúp bạn tiết kiệm rất nhiều công việc không?

Bạn càng quen thuộc với nhiều phương pháp thì bạn càng có thể tạo mã làm việc nhanh hơn &mã này sẽ càng tốt, cả về hiệu suất và chất lượng.

Đó là lý do tại sao hôm nay tôi muốn giới thiệu với bạn 7 phương pháp thú vị mà bạn có thể chưa từng thấy trước đây.

Nội dung

  • Phương pháp 1 số nguyên # chữ số (Ruby 2.4)
  • 2 Phương pháp Nhấn
  • 3 Mảng # giá_trị_at
  • 4 Băm # biến_giá_trị (Ruby 2.4)
  • 5 Kernel # chính nó (Ruby 2.2)
  • 6 Số mảng
  • 7 Chu kỳ # có thể đếm được
  • 8 Tóm tắt
    • 8.1 Có liên quan

Phương pháp # số nguyên (Ruby 2.4)

Đây là một phương pháp mới được giới thiệu trong Ruby 2.4 và nó rất hữu ích nếu bạn muốn làm việc với các chữ số riêng lẻ của một Số nguyên.

Lưu ý :Trong trường hợp bạn không bắt kịp các thay đổi của Ruby 2.4, Fixnum &Bignum hiện không được dùng nữa và cả hai đều được hợp nhất thành Integer.

Bạn có thể nghĩ rằng việc sử dụng lập chỉ mục giống mảng có thể hoạt động :

2[0]

# 0

2[1]

# 1

Nhưng những gì bạn nhận được không phải là các chữ số, mà là các bit nhị phân tạo nên con số này.

Vì vậy, các chữ số trước digits phương pháp giải pháp điển hình là chuyển đổi số thành một chuỗi, sau đó ngắt chuỗi đó thành một mảng ký tự bằng cách sử dụng các ký tự digits và cuối cùng chuyển đổi mọi chuỗi trở lại thành một số nguyên.

Ví dụ :

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

[3, 2, 1]

Nhưng ở dạng hậu digits thế giới phương pháp, bạn có thể chỉ cần thực hiện điều này:

123.digits

[3, 2, 1]

Tốt hơn nhiều, phải không?

Video :

Phương pháp Nhấn

Đôi khi bạn muốn tạo một đối tượng, gọi một số phương thức trên nó và trả về cùng một đối tượng đó.

Bạn sẽ phải làm điều gì đó như thế này :

user = User.new

user.name = "John"

user

Vấn đề là chúng ta phải xử lý biến tạm thời này.

Đây là nơi tap phương pháp giải cứu!

Với tap ví dụ cuối cùng trở thành thế này:

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

Lưu ý rằng biến tạm thời đã biến mất như thế nào, đó là một điều tốt 🙂

Mảng # giá_trị

Nếu bạn muốn nhận nhiều giá trị không tuần tự từ một mảng hoặc một hàm băm, bạn có thể thực hiện điều này:

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

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

Hoặc bạn có thể sử dụng values_at phương pháp:

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

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

Điều này cũng hoạt động với một hàm băm :

hash = {bacon: 300, chocolate: 200}

p hash.values_at(:bacon, :chocolate)

# [300, 200]

Băm # biến_hàm (Ruby 2.4)

Giả sử bạn có một hàm băm và muốn thay đổi tất cả các giá trị vì một lý do nào đó.

Sắp xếp những gì bạn sẽ làm với Array#map .

Sự cố với map là bạn sẽ nhận được một mảng-mảng (mảng nhiều chiều) thay vì một hàm băm. Ngoài ra, không có bản đồ Hash#map! .

Vì vậy, một giải pháp có thể là đây :

h = {bacon: 200, coconut: 300}

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

Trong ví dụ này, chúng tôi nhân mỗi giá trị với hai lần.

Kết quả nào dẫn đến :

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

Vì Ruby 2.4 nên có một cách tốt hơn để thực hiện việc này :

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

Đây là một trong những phương pháp khác đến từ Rails, hiện đã có sẵn bên ngoài khuôn khổ 🙂

Kernel # chính nó (Ruby 2.2)

Nếu lúc đầu bạn nói với tôi rằng phương pháp này trông không thú vị lắm, tôi sẽ đồng ý với bạn.

Nhưng lý do là bạn cần xem một số ví dụ điển hình.

Vì vậy, giả sử chúng tôi có một mảng với các từ lặp lại và chúng tôi muốn đếm chúng…

Mặc dù có nhiều cách để thực hiện việc này, nhưng tôi nghĩ đây là một trường hợp tuyệt vời để thử nghiệm người bạn mới của chúng ta:Kernel#itself .

Ví dụ :

words = %w(cat cat tiger dog cat)

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

Lưu ý cách tôi cũng kết hợp điều này với Hash#transform_values !

Nếu transform_values không có sẵn, bạn có thể làm điều này:

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

Video :

Lưu ý :itself phương thức hiển thị trong Object trong tài liệu, nhưng phương thức được xác định trên Kernel mô-đun.

Số lượng mảng

Đôi khi bạn chỉ cần đếm một cái gì đó.

Thay vì sử dụng vòng lặp + bộ đếm điển hình, bạn có thể sử dụng count phương pháp!

Ví dụ :

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

letters.count("a")

# 4

Phiên bản mảng của phương pháp này cũng có một khối, vì vậy bạn có thể thực hiện việc đếm phức tạp hơn.

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

numbers.count(&:even?)

# 3

Video :

# chu kỳ có thể đếm được

Bạn có muốn lặp lại một số mẫu không? Hoặc có thể bạn cần một nút bật / tắt dễ dàng?

Sau đó, Enumerable#cycle có thể là những gì bạn đang tìm kiếm!

Ví dụ :

array = %w(a b c)

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

Nhưng cách sử dụng yêu thích của tôi cho cycle là tạo đối tượng "chuyển đổi" hoặc "chuyển đổi".

switch = %w(on off).cycle

switch.next

Điều thú vị về điều này là bạn không cần phải kiểm tra giá trị hiện tại của công tắc để cập nhật nó theo cách thủ công.

Bạn chỉ có thể gọi next &Ruby sẽ biết chính xác những gì phải làm 🙂

Tóm tắt

Bạn đã tìm hiểu về một số phương pháp hữu ích mới:Số nguyên # chữ số, Kernel # tap, Mảng # giá_trị_at, Băm # biến_giá_trị, Bản thân hạt nhân #, Mảng # đếm, Chu kỳ # có thể đếm được.

Nếu bạn đã biết về những điều tuyệt vời này! Nếu không, tôi hy vọng bạn thấy chúng hữu ích 🙂

Rất thích bài viết này? Sau đó, chia sẻ nó với bạn bè của bạn để họ cũng có thể tận hưởng nó!