BẮT ĐẦU
KIỂU DỮ LIỆU
TOÁN TỬ
NÂNG CAO
INTERVIEW
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
Dự án mới của mình là gamehow.net, mời anh em ghé thăm và góp ý ạ.

Cách sử dụng Ranges trong Ruby

Trong bài này chúng ta sẽ tìm hiểu kiểu dữ liệu Ranges trong Ruby, đây là cách giúp bạn tạo ra một phạm vi của một dãy giá trị trong Ruby.

Ví dụ bạn cần tạo ra một dãy từ 1 đến 100 thì có thể sử dụng Ranges. Hoặc bạn muốn tạo dãy các ký tự từ A - Z thì cũng có thể sử dụng Ranges. Chi tiết thế nào thì chugns ta cùng tìm hiểu nhé.

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Ranges là gì ?

Khi làm việc với ngôn ngữ Ruby, bạn sẽ được tiếp xúc với kiểu dữ liệu khá đặc biệt đó là Ranges. Range dịch ra có nghĩa là phạm vi, chức năng của nó cũng sẽ nôm na ngữ nghĩa của nó đó là kiểu dữ liệu này sẽ bao gồm một số giá trị nằm trong một phạm vi nhất định.

Nếu chưa rõ các bạn có thể hiểu đơn giản như: 0 đến 9, tháng 1 đến tháng 12... thì được gọi là Ranges.

Để định nghĩa một Range chúng ta khai báo trong dấu ().

(1..10)

# hoặc

(1...10)

Như các bạn để ý ở trên mình có 2 ví dụ có một chút khác biệt đó là một cái bên trong chứa 2 dấu chấm và một cái bên trong 3 dấu chấm.

Nếu bên trong là 2 dấu chấm nghĩa là giá trị của Range đó sẽ bao gồm từ số 1 đến số 10 chứa cả số 10.

Nếu bên trong là 3 dấu chấm nghĩa là giá trị của Range đó sẽ bao gồm từ số 1 đến số 10 nhưng không chứa cả số 10.

Để xem được giá trị của một Range cách đơn giản nhất các bạn hãy chuyển kiểu dữ liệu này về kiểu Array bằng phương thức to_a.

(1..5).to_a      #=> [1, 2, 3, 4, 5]

('a'..'e').to_a    #=> ["a", "b", "c", "d", "e"]

('a'...'e').to_a   #=> ["a", "b", "c", "d"]

Tất nhiên là những thứ chúng ta cho vào Range thì nó phải có 1 trật tự nhất đinh nhé các cậu, như là thứ tự số hay là chữ.

irb(main):014:0> ("baa".."bat").to_a
=> ["baa", "bab", "bac", "bad", "bae", "baf", "bag", "bah", "bai", "baj", "bak", "bal", "bam", "ban", "bao", "bap", "baq", "bar", "bas", "bat"]

Nhìn qua các ví dụ chúng ta cũng hiểu và hình dung được cách mà Range lưu trữ dữ liệu rồi, và có thể nói về một ví dụ đơn giản mà dễ dàng nhất với vòng lặp để các bạn có thể thấy được sự đơn giản nhanh gọn mà Ruby mang lại cho chúng ta.

Nếu mà trong C++ cú pháp vòng lặp từ 1 đến 10

for(int i = 1; i <= 10; i++) {
  // code
}

Nhưng trong Ruby chỉ cần đơn giản hơn rất nhiều với Range

(1..10).each { // code }

Một đối tượng range thuộc class Range

irb(main):030:0> (1..2).class
=> Range
irb(main):031:0> ('a'..'d').class
=> Range

2. Phương thức Step

Range có một method để làm vòng lặp nhanh hơn bất cứ cái nào đó chính là step phương thức

Nếu chúng ta đang muốn tạo một Range mà mỗi giá trị trong Range đó tăng lên 1 giá trị là n thì step chính là phương thức mà các bạn đang tìm kiếm.

((1..10).step(2)).to_a
=> [1, 3, 5, 7, 9]
((1..12).step(2)).to_a
=> [1, 3, 5, 7, 9, 11]
((1..12).step(3)).to_a
=> [1, 4, 7, 10]

Từng giá trị trong Range tăng lên theo như tham số chúng ta truyền vào

step chỉ làm việc với số dương, nếu bạn bạn truyền vào số âm kết quả sẽ trả về là một khoảng giá trị rỗng

Chúng ta có thể truyền cả số thực vào step

((1..12).step(1.1)).to_a
=> [1.0, 2.1, 3.2, 4.300000000000001, 5.4, 6.5, 7.6000000000000005, 8.700000000000001, 9.8, 10.9, 12.0]

3. Một vài phương thức phổ biến khi làm việc với Range

include(): Phương thức này đùng dể kiểm tra xem một giá trị có tồn tại ở trong Range hay không, nếu tìm thấy sẽ trả về true còn ngược lại trả về false

(1..10).include? 2
=> true
(1..10).include? 11
=> false

Lưu ý nhỏ là hàm này có phân biệt cả hoa thường

('a'..'d').include? 'a'
=> true
('a'..'d').include? 'A'
=> false

min(): Phương thức này dùng để lấy giá trị nhỏ nhất trong một Range

(1..10).min()
=> 1
(-11..10).min()
=> -11

max(): Giống với min() nhưng với max() sẽ lấy giá trị lớn nhất trong Range

(-11..10).max()
=> 10
(-11..10).max
=> 10

first(): Lấy giá trị đầu tiên của một Range

(1..10).first
=> 1

last(): Lấy giá trị cuối cùng của một Range

(1..10).last
=> 10

// Đặc biệt với dấu 3 chấm kết quả vẫn là 10

(1...10).last
=> 10

Ngoài ra chúng ta có thể thêm tham số vào hàm này nếu như muốn lấy bao nhiêu giá trị cuối cùng bằng cách thêm số lượng muốn lấy truyền vào trong hàm last(). Nếu truyền tham số vào kết quả sẽ trả về chuẩn hơn là không truyền tham số.

(1..10).last(3)
=> [8, 9, 10]
(1...10).last(3)
=> [7, 8, 9]

size(): Lấy độ dài của Range

(1..10).size
=> 10

(1...10).size
=> 9

4. Kết luận

Trong bài này mình đã giới thiệu thêm cho các bạn một kiểu dữ liệu mới trong Ruby đó chính là Range. Mình cùng đã giới thiệu với các bạn các phương thức khá phổ biến khi làm việc với Range, các bạn hãy cố gắng nắm kĩ để khi làm việc thực tế tránh những nhầm lẫn không đáng có. Kiểu dữ liệu này cũng tương đối dễ nên chỉ cần đọc qua bài này các bạn cũng đã hình dung được Range là gì và chức năng của nó làm gì.

Cùng chuyên mục:

Block trong Ruby

Block trong Ruby

Block là một khối lệnh được đặt trong ...

Iterator trong Ruby

Iterator trong Ruby

Ở bài trước mình có nói với các bạn về việc sử dụng các vòng…

Vòng lặp trong Ruby: Vòng lặp for / while / until / loop

Vòng lặp trong Ruby: Vòng lặp for / while / until / loop

Khi học một ngôn ngữ lập trình thì không thể không tìm hiểu tới một…

Câu lệnh điều kiện trong Ruby

Câu lệnh điều kiện trong Ruby

Trong bài này chúng ta sẽ học các lệnh điều kiện trong Ruby, đây là…

Các toán tử trong Ruby

Các toán tử trong Ruby

Nói đến toán tử thì dù bạn học ngôn ngữ nào đi nữa thì việc…

Cách sử dụng Array trong Ruby

Cách sử dụng Array trong Ruby

Đây cũng là một trong những kiểu dữ liệu phổ biến nhất, vì vậy bạn…

Kiểu dữ liệu Symbol trong Ruby

Kiểu dữ liệu Symbol trong Ruby

Symbol giống như một String thế nhưng Symbol là một chuỗi bất biến nghĩa là…

Kiểu dữ liệu Text trong Ruby (còn gọi là chuỗi / string)

Kiểu dữ liệu Text trong Ruby (còn gọi là chuỗi / string)

Kiểu dữ liệu Boolean trong Ruby: True, False và Nil

Kiểu dữ liệu Boolean trong Ruby: True, False và Nil

Boolean là kiểu dữ liệu rất quan trọng, nó được dùng rất nhiều trong những…

Kiểu dữ liệu Hashes trong Ruby: Hiểu từ đơn giản đến phức tạp

Kiểu dữ liệu Hashes trong Ruby: Hiểu từ đơn giản đến phức tạp

Nếu bạn đã từng làm việc với một vài ngôn ngữ khác trước khi mà…

Hiểu về Method Missing trong Ruby

Hiểu về Method Missing trong Ruby

Chắc hẳn với các lập trình viên chúng ta ai cũng có thể đôi lần…

Kiểu dữ liệu Number trong Ruby (Kiểu số Integer, Float, ...)

Kiểu dữ liệu Number trong Ruby (Kiểu số Integer, Float, ...)

Trước tiên, chúng ta cùng nhìn qua một bức ảnh tổng quát phân cấp các…

Ruby là gì? Ai đã sáng tạo ra ngôn ngữ viêm kim cương này?

Ruby là gì? Ai đã sáng tạo ra ngôn ngữ viêm kim cương này?

Từ những năm 2008, thời mà mình còn học đại học thì Ruby là ngôn…

Các loại biến và cách sử dụng Module trong Ruby

Các loại biến và cách sử dụng Module trong Ruby

Bất kì một ngôn ngữ lập trình nào đều có khái niệm biến và ruby…

Cách tạo Method - Class và Object trong Ruby

Cách tạo Method - Class và Object trong Ruby

Trong bài này mình sẽ hướng dẫn các bạn cách tạo hàm, gọi hàm. Cách…

Cú pháp trong Ruby - Chạy Hello World

Cú pháp trong Ruby - Chạy Hello World

Tổng quan về cú pháp trong ruby. Hướng dẫn tạo file và chạy hello world…

Hướng dẫn cài đặt Ruby trên Window, Linux và MacOS

Hướng dẫn cài đặt Ruby trên Window, Linux và MacOS

Hướng dẫn chi tiết cách thiết lập môi trường lập trình Ruby trên hệ điều…

Top