Các toán tử trong Ruby
Trong bài này chúng ta sẽ tìm hiểu các toán tử trong Ruby như: toán tử toán học - toán tử gán - toán tử so sánh ... tất cả đều rất quan trọng vì nó giúp ta xây dựng được các ứng dụng theo yêu cầu của khách hàng.
Nói đến toán tử thì dù bạn học ngôn ngữ nào đi nữa thì việc hiểu rõ các toán tử sẽ giúp bạn sử dụng hợp lý hơn, biết sử dụng toán tử trong trường hợp nào là tốt nhất. Sau đây là danh sách các toán tử thường gặp trong Ruby.
1. Toán tử là gì ?
Trong khi làm việc với các ngôn ngữ lập trình thì việc chúng ta sử dụng các operator - toán tử là rất nhiều. Để có thể giúp các bạn có thể biết về các operators này trong Ruby thì ở bài viết này mình sẽ giới thiệu với các bạn để chúng ta có thể hiểu hơn về nó, từ đó mà việc tiếp xúc với nó đơn giản hơn trong quá trình làm việc.
Operators là những cái ký tự đại diện cho các toán tử, ví dụ như + (cộng) hoặc là * (trừ) dược sử dụng trong việc tính toán chả hạn.
Bài viết này được đăng tại [free tuts .net]
Ngoài ra chúng ta còn có các toán tử liên quan đến so sánh cũng như liên quan đến logic mình sẽ nói ở bài tiếp theo
Giả sử như ví dụ này chúng ta đã sử dụng các toán tử như so sánh cũng như toán tử số học.
2 * Math.sqrt(2) < limit
2. Toán tử số học trong Ruby
Để bắt đầu tìm hiểu các operators trong Ruby thì phần đầu tiên mình sẽ giới thiệu về Arithmetical operators, toán tử số học. Chúng ta có các toán tử số học sau
- + (cộng)
- - (trừ)
- * (nhân)
- / (chia)
- ** (lũy thừa)
- % (chia lấy dư)
Operator | Mô tả |
+ | Toán tử cộng |
- | Toán tử trừ |
* | Toán tử nhân |
/ | Toán tử chia |
% | Toán tử chia lấy dư |
** | Toán tử lũy thừa |
Để hiểu hơn mình sẽ có các ví dụ về các toán tử này
a=10 b=20 puts "Toán tử cộng : #{a+b}" puts "Toán tử trừ : #{a-b}" puts "Toán tử nhân : #{a*b}" puts "Toán tử chia : #{a/b}" puts "Toán tử chia lấy dư: #{a/b}" puts "Toán tử lũy thừa : #{a**b}"
Kết quả
Toán tử cộng : 30 Toán tử trừ : -10 Toán tử nhân : 200 Toán tử chia : 0 Toán tử chia lấy dư : 10 Toán tử lũy thừa : 100000000000000000000
Ở trong Ruby ngoài chúng ta có thể tính toán giữa hai số ra thì chúng ta cũng có thể cộng 2 String lại với nhau, người ta thường dùng toán tử + (cộng) để nói hai chuỗi lại với nhau
"a" + "b" => "ab"
Chúng ta không thể lấy kiểu số cũng với kiểu chuỗi nhé, không sẽ lỗi ngay chương trình
Để có thể cộng được chúng ta cần phải convert kiểu dữ liệu số sang chuỗi bằng cách sử dụng phương thức to_s.
1.to_s + "a" => "1a"
Ngoài ra chúng ta cũng có thể sử dụng toán tử cộng để nối hai mảng lại với nhau
[1, 2] + [3, 4] => [1, 2, 3, 4]
Có một sự khá là hay ho đối với toán tử trừ, đó là người ta sẽ dùng toán tử trừ để loại bỏ đi giá trị trùng của mảng này với mảng kia.
[1, 2, 3, 5, 7] - [3, 4, 5, 6] => [1, 2, 7]
Lưu ý là nó sẽ chỉ xét duyệt các mảng ở phía trước
Giả sử chúng ta muộn lặp lại 100 câu "Em xin hứa làm bài và học bài đầy đủ" chả hạn, chả nhẽ lại viết 100 câu đó ra. Hay nếu bạn là một dân lập trình thì có thể nghĩ tới vòng lặp. Nhưng đây sẽ là cách mà dân Ruby developer làm
puts "Em xin hứa làm bài và học bài đầy đủ \n" * 100 Em xin hứa làm bài và học bài đầy đủ Em xin hứa làm bài và học bài đầy đủ Em xin hứa làm bài và học bài đầy đủ Em xin hứa làm bài và học bài đầy đủ ....
Quá nhanh và quá nguy hiểm. Đây là một trong những sức mạnh mà toán tử nhân này mang lại
Ngoài ra chúng ta có thể làm điều này tượng tự với mảng, nó sẽ giúp chúng ta lặp lại các giá trị đã cho vào tiếp trong mảng 1 cách nhanh chóng.
3. Toán tử logic trong Ruby
Logical operators hay các bạn còn có thể gọi với một cái tên khác là Boolean operators.
Nhắc đến boolean có lẽ quen thuộc hơn với chúng ta hơn là từ logical, nghe hơi cao siêu =)) nhưng thật ra chúng chỉ là những tóan tử cơ bản trong lập trình mà chúng ta sẽ và đang thường thấy trohg quá trình làm việc.
Để nói về toán tử này thì chúng ta có 3 loại operators nhưng tương ứng với nó là 2 cách viết
- and và &&
- or và ||
- not và !
Operators | Mô tả |
and | Toán tử AND, nếu hai toán hạng là true kết quả sẽ trả về là true |
or | Toán tử OR, nếu một trong hai toán hạng true thì kết quả sẽ trả về true, nếu cả hai đều false kết quả là false |
not | Toán tử NOT, phủ định của các giá trị empty, true, false,.. |
&& | Tương tự toán tử AND |
|| | Tương tự toán tử OR |
! | Tương tự toán tử NOT |
Ví dụ về logical operators
# And va && true and false => false true && false => fasle # OR và || true || true => true true || false => true true or true => true # NOT và ! !true => false
4. Toán tử gán trong Ruby
Tiếp tục với các toán tử, sau đây mình xin giới thiệu về các Assignment Operators hay còn gọi là toán tử gán
Với toán tử này chúng ta sẽ sử dụng toán tử = để thể hiện
Operators | Mô tả |
= | Đây là toán tử gán giá trị, ví dụ a = 10 là một phép gán |
+= | Kiểu viết này là kiểu kết hợp giữa toán tử cộng và toán tử gán |
-= | Kiểu viết này là kiểu kết hợp của toán tử trừ và toán tử gán |
*= | Kiểu viết này kết hợp giữa toán tử nhân và toán tử gán |
/= | Kiểu viết này kết hợp giữa toán tử chia và toán tử gán |
%= | Kiểu viết này kết hợp giữa toán tử chia lấy dư và toán tử gán |
**= | Kiểu viết này kết hợp giữa toán tử lũy thừa và toán tử gán |
Đây là một toán tử gán
a = 10
Các toán tử số học kết hợp với toán tử gán thực chất vẫn là toán tử gán, đơn giản đây là cách viết tắt của
a +=b tương đương với a = a +b a -= b tương đương với a = a - b a *= b tương đương với a = a * b a /= b tương đương với a = a / b a %= b tương đương với a = a % b a **= b tương đương với a = a ** b
5. Toán tử so sánh trong Ruby
Tiếp tục đến với toán tử khác đó là Comparison Operators hay còn gọi là các toán tử so sánh.
Operators | Mô tả |
== | Kiểm tra xem hai toán hạng có bằng nhau hay không, nếu có kết quả trả về true |
!= | Kiểm tra xem hai toán hạng không bằng nhau, nếu 2 giá trị không bằng nhau thì kết quả là true |
> | Kiểm tra toán hạng bên trái có lớn hơn toán hạng bên phải không, nếu có kết quả là true |
< | Kiểm tra toán hạng bên phải có lớn hơn toán hạng bên trái không, nếu không kết quả là false |
>= | Kiểm tra toán hạng bên trái có lớn hơn hoặc là bằng toán hạng bên phải không, nếu có kết quả là true |
<= | Kiểm tra toán hạng bên phải có lớn hơn hoặc bằng toán hạng bên trái không, nếu không kết quả là false |
<=> | Đây là một toán tử so sánh kết hợp, Nếu hai toán hạng bằng nhau thì kết quả trả về 0. Nếu toán hạng thứ nhất mà lớn hơn toán hạng thứ 2 thì kết quả trả về 1, ngược lại trả về -1 |
Ví dụ về các toán tử so sánh
puts 1 == 1 => true puts 2 != 3 => true puts 2 > 3 => false puts 2 < 3 => true puts 2 >= 2 => true puts 2 <= 2 => true puts 2 <=> 3 => -1 puts 2 <=> 2 => 0 puts 2 <=> 1 => 1
Ngoài ra trong Ruby còn cung cấp thêm cho chúng ta 2 phương thức để so sánh bằng nữa là eql? và equal?
eql?: So sánh xem hai giá trị có bằng nhau hay không, giống với toán tử == thế nhưng với eql? sẽ so sánh cả kiểu dữ liệu
puts 1 == 1.0 => true # nhưng với eql? puts 1.eql? 1.0 => false
equal?: So sánh xem hai giá trị có cùng object_id không
puts "hihi".equal? "hihi" => false
Kết quả là false vì object_id của hai string "hihi" này là khác nhau. Thế nhưng nếu bạn so sánh hai kiểu dữ liệu Symbol với nhau thì
puts :hihi.equal? :hihi => true
Kết quả lại là true, vì trong Symbol nếu giá trị bằng nhau nó sẽ được gọi lại giá trị đó đã được lưu trong bộ nhớ mà không tạo lại object_id
6. Kết luận
Trong bài này mình đã chia sẻ với các bạn về các toán tử trong Ruby, đây là những phần tuy cơ bản nhưng rât quan trọng là nền tảng để chúng ta học sâu hơn nữa nên các bạn hãy chú ý nhé.