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 ý ạ.

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

Để tiếp tục với chuỗi bài tìm hiểu các kiểu dữ liệu trong Ruby thì trong bài viết lần này mình xin phép giới thiệu cho các bạn về kiểu Boolean Nil Object trong Ruby.

Boolean là kiểu dữ liệu rất quan trọng, nó được dùng rất nhiều trong những lệnh kiểm tra điều kiện như if else, vì vậy bạn phải hiểu và phân biệt được khái niệm cũng như cách sử dụng nó trong Ruby 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. Boolean trong Ruby

Boolean là kiểu dữ liệu logic, tồn tại hai giá trị duy nhất đó là TrueFalse. Nếu bạn từng làm việc với các ngôn ngữ khác thì sẽ không còn quá xa lạ nữa.

Có một lưu ý khi sử dụng kiểu Boolean đó là không được để các giá trị TrueFalse ở trong dấu ngoặc kép hay là dấu ngoặc đơn, vì nếu chúng ta viết như thế thì kiểu dữ liệu của nó sẽ là kiểu String chứ không phải Boolean.

"true".class
=> String

'true'.class
=> String

Mình có một ví dụng đơn giản về kiểu dữ liệu Boolean này

bool = [true, false].sample

if bool
  puts "Return value true"
else
  puts "Return value false"
end

Như ví dụ ở trên thì bước đầu tiên mình khởi tạo một biết bool với giá trị ngẫu nhiên là True hoặc False. Ở đây mình sử dụng hàm sample trong Ruby, đây là hàm sẽ giúp chúng ta lấy một giá trị ngẫu nhiên từ trong một mảng cho trước.

Sau đó mình check điều kiện nếu bool có giá trị là true thì sẽ nhảy và if và sai thì vào else.

Lưu ý:

Có một lưu ý đối với các bạn mới tiếp xúc với ngôn ngữ lập trình Ruby thì chúng ta không cần dấu đóng mở ngoặc ở những câu điều kiện, các hàm... và cũng không cần dấu chấm phẩy ở cuối như các ngôn ngữ khác vẫn thường làm. Ruby giúp chúng ta ngắn gọn code nhất có thể. Tất nhiên là nếu bạn sử dụng dấu ngoặc đơn hay dấu chấm phẩy thì code của bạn sẽ vẫn chạy. Nhưng thường thường mình thấy khi code Ruby người ta sẽ không sử dụng dấu ngoặc đơn cũng như dấu chấm phẩy.

Đối với việc không sử dụng dấu chấm phẩy cuối đoạn cũng sẽ hạn chế tối đa những lỗi không mong muốn nếu như chúng ta lỡ quên.

Có một điều đặc biệt đối với kiểu dữ liệu Boolean là chúng ta sẽ không có Boolean class như Integer class, String class... Thay vào đó chúng ta có 2 boolean objects chính là True và False.

Trong đó

  • True là đối tượng của TrueClass
  • False là đối tượng của FalseClass

Để kiểm tra thuộc class nào các bạn cứ auto gõ .class là được

true.class
=> TrueClass

false.class
=> FalseClass

Hai class này đều là thuộc Object class chứ không phải cùng thuộc một class Boolean chung như Fixnum và Bignum của class Integer.

TrueClass.ancestors             # => [TrueClass, Object, Kernel, BasicObject]
FalseClass.ancestors            # => [FalseClass, Object, Kernel, BasicObject]

Lý do mà tại sao tác giả của ngôn ngữ Ruby lại tách ra thành 2 class riêng biệt thì có thể hiểu một cách đơn giản nhất đó là 2 object này không cùng chung mục đích. Thì mình có 2 đoạn code như thế này về TrueClass và FalseClass

class TrueClass
  def &(other)
    other
  end

  def |(_)
    self
  end

  def ^(other)
    !other
  end

  def to_s
    'true'
  end
end

class FalseClass
  def &(_)
    self
  end

  def |(other)
    other
  end

  def ^(other)
    other
  end

  def to_s
    'false'
  end
end

Như chúng ta thấy ở 2 đoạn code trên dễ dàng thấy được 2 class này định nghĩa các toán tử của nó như &, |, ^ hay to_s được định nghĩa với những mục đích hoàn toàn khác nhau nên việc viết tách chúng ta thành 2 object của 2 class khác nhau là hoàn toàn dễ hiểu.

2. Nil Object trong Ruby

Khi làm việc với những ngôn ngữ lập trình khác, ắt hẳn nhiều người sẽ biết đến giá trị NULL , thế nhưng trong ngôn ngữ lập trình Ruby thì khái niệm này được gọi là nil. Nil là đối tượng để miêu tả sự không có, hay là không tồn tại của một biến ví dụ như

  • Khi một biến không có giá trị
  • Gọi đến phần tử không tồn tại trong mảng
  • Gọi đến phần tử không tồn tại trong hashes

Nil là một đối tượng thuộc class NilClass.

nil.class
=> NilClass

Để so sánh cách sử dụng nil với NULL mình sẽ so sánh giữ code PHPRuby cho các bạn nhé

Đối với PHP

if ($item == null) {
  echo "Item null"
} else {
  echo "Item not null"
}

Đối với Ruby

if item.nil?
  puts "nil"
else 
  puts "not nil"
end

Thay vì chúng ta kiểm tra một giá trị có bằng NULL bằng cách sử dụng toán tử ==, thì ở Ruby để kiểm tra xem 1 giá trị có nil không chúng ta sẽ sử dụng nil? để kiểm tra giá trị của biến đó có tồn tại hay không.

a = [1,2,3,4]
=> [1, 2, 3, 4]

a[5].nil? // do a[5] không hề tồn tại nên khi kiểm tra giá trị có phải là nil hay không kết quả sẽ là true
=> true

b = 1 // b tồn tại giá trị 1 nên khi kiểm tra nil sẽ trả về false
=> 1

b.nil?
=> false

Chúng ta có thể gọi nil? trên bất cứ đối tượng nào, kể cả gọi tới chính đối tượng nil

nil.nil?
=> true

Một vài tình huống đặc biệt mà kết quả trả về nil

Khi chúng ta gọi một biến instance mà chưa gán giá trị cho nó, mặc định kết quả trả về nil. Nếu chúng ta làm tương tự với biến local hay biến class sẽ lỗi ngay nhé chứ không phải trả về nil đâu :D

@x
=> nil

v

=> Traceback (most recent call last):
        4: from /home/quangphu/.rbenv/versions/2.6.5/bin/irb:23:in `<main>'
        3: from /home/quangphu/.rbenv/versions/2.6.5/bin/irb:23:in `load'
        2: from /home/quangphu/.rbenv/versions/2.6.5/lib/ruby/gems/2.6.0/gems/irb-1.0.0/exe/irb:11:in `<top (required)>'
        1: from (irb):34
NameError (undefined local variable or method `v' for main:Object)

Và 2 method giá trị cũng trả về nil nữa là putsprint

irb(main):035:0> puts "hello"
hello
=> nil
irb(main):036:0> print "hello"
hello=> nil

Truthiness

Trong Ruby, ngoài false mang gía trị false giá thì còn nil cũng mang gía trị false, còn lại tất cả đều mang giá trị true kể cả số 0.

if nil
  p "nil"
else 
  p "not nil"
end

=> "not nil"

0 cũng mang giá trị true

if 0
  puts 123
end
123
=> nil

Như đoạn code trên thì nếu 0 là true thì in ra 123.

3. Kết luận

Vậy trong bài này mình đã giới thiệu được tới các bạn kiểu dữ liệu Boolean và Nil Object trong Ruby. Đây sẽ là 1 trong những kiến thức nền tảng của Ruby để sau này chúng ta có thể làm việc được với ngôn ngữ này.

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 Ranges trong Ruby

Cách sử dụng Ranges trong Ruby

Ví dụ bạn cần tạo ra một dãy từ 1 đến 100 thì có thể…

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 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