+1

Cải thiện code ruby với một số thủ thuật

Sử dụng Lambda Literal ->

  • Với -> ta có thể tạo lambda một cách dễ dàng:
  pry(main)> lambda  = -> {2 + 3}
  => #<Proc:0x00558f4751eab0@(pry):6 (lambda)>
  pry(main)> lambda.call
  => 5

  pry(main)> lambda = -> (variable) {variable + 10}
  => #<Proc:0x00558f47202750@(pry):8 (lambda)>
  pry(main)> lambda.call(20)
  => 30

Tạo Hash từ danh sách giá trị

  • Ta có thể tạo một Hash từ danh sách các giá trị bằng cách sử dụng Hash[...]
   pry(main)> Hash['name', 'Ruby on rails', 'age', 20, 'location', 'Da Nang']

   => {"name"=>"Ruby on rails", "age"=>20, "location"=>"Da Nang"}

Sử dụng double star (**)

  • Để hiểu rõ hơn ta tìm hiểu thông qua method sau:
  def test_method(a, *b, **c)
    return a, b, c
  end

  // a là tham số bình thường
  // b là tham số kiểu mảng
  // c là tham số kiểu hash

Ta kiểm tra giá trị return ứng với các tham số.

  • Chỉ chứa một tham số:
   pry(main)> test_method('a')
  
  => ["a", [], {}]
  • Chứa nhiều hơn 1 tham số
 pry(main)> test_method('a', 'b', 'c', 'd')

 => ["a", ["b", "c", "d"], {}]
  • Chứa tham số kiểu hash:
  pry(main)> test_method('a', 'b', 'c', 'd', e:1, f:2)
  
  => ["a", ["b", "c", "d"], {:e=>1, :f=>2}]

Khởi tạo giá trị mặc định cho hash

  • Theo mặc định, khi cố gắng truy cập một giá trị không được định nghĩa trong một hash, bạn sẽ nhận được nil. Ta có thể thay đổi điều này khi khởi tạo.
# khởi tạo giá trị mặc định 0

irb(main):012:0> hash = Hash.new(0)
rb(main):013:0> hash[:key]    # key khong ton tai
=> 0  # gia tri mac dinh luc khoi tao

# vi du khac
hash = Hash.new({})
hash[:key]
=> {}

Tạo mảng chữ số hoặc chữ cái

 # a -> z

  irb(main):014:0> ('a'..'z').to_a
=> ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z"]

# 1 -> 30
 irb(main):016:0> (1..30).to_a
=> [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30]

Tham số mảng băm bắt buộc

  • Tìm hiểu thông qua 1 ví dụ sau
   
  def hash_demo(a:, b:, c: 'default')
    return a, b, c
 end

irb(main):050:0> hash_demo(a: 10) 
=> # ArgumentError: missing keyword: b

# c có giá trị mặc định.
irb(main):051:0> hash_demo(a: 10, b: 3)
=> [10, 3, "default"]

# đủ cả 3 tham số

irb(main):052:0> hash_demo(a: 10, b: 3, c: 20)
=> [10, 3, 20]

Sử dụng values_at

# Gan gia trị khi không sử dụng values_at với mảng
arr = [1,2,3,4,5]
a, b, c = arr.values_at(0, 1, 4)

# sử dụng values_at với mảng

arr = [1,2,3,4,5]
 
a, b, c = arr.values_at(0, 1, 4)

Với hash

hash = {height: 300, lenght: 200}
 
p hash.values_at(:height, :lenght)
 
# [300, 200]

All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí