11/08/2018, 23:11

2-5 Những lệnh tiện lợi khác

Tại Ruby có rất nhiều lệnh tiện lợi được trang bị. Tại phần này tôi sẽ giới thiệu đại biểu của một trong những lệnh đó Lệnh print Từ trước đến nay để yêu cầu biểu thị chữ thì chúng ta vẫn dùng lệnh [puts] nhưng trong Ruby còn có một lệnh nữa giống lệnh [puts] đó chính là lệnh [print]. Hãy xem ...

Tại Ruby có rất nhiều lệnh tiện lợi được trang bị. Tại phần này tôi sẽ giới thiệu đại biểu của một trong những lệnh đó

Lệnh print

Từ trước đến nay để yêu cầu biểu thị chữ thì chúng ta vẫn dùng lệnh [puts] nhưng trong Ruby còn có một lệnh nữa giống lệnh [puts] đó chính là lệnh [print]. Hãy xem thử chương trình dưới đây.

print "A"
print "B"
puts "C"

[Kết quả hiển thị]

ABC

Vậy điểm khác nhau đối với [puts] là gì đây? Đối với lệnh [puts] thì dòng chữ tiếp theo sẽ được xuống dòng so với dòng chữ được biểu thị. Nhưng với lệnh [prints] thì không xuống dòng.

name = "AAA"
print "Tôi là"
puts name

[Kết quả hiển thị]

Tôi là AAA

Mặt khác, chúng ta cũng có thể làm đơn giản câu lệnh bằng cách dùng công thức triển khai như sau

name = "AAA"
puts "Tôi là #{name}"

Chữ được xuống dòng

Chúng ta có thể xuống dòng chỗ nào tùy thích trong một dãy chữ nếu sử dụng lệnh ¥n Như vậy bộ phận chữ viết đằng sau ¥n sẽ được xuống dòng. Vậy các bạn hãy dùng ¥n khi muốn xuống dòng ở chỗ nào mình thích trong dãy chữ nhé!

Lệnh p

Lệnh p có rất nhiều những ý nghĩa khác nhau và nó cũng rất dễ nhìn và hiểu bằng mắt thường. Nó tuy không có khác biệt gì khi dùng để biểu thị dòng chữ hoặc số nhưng nó rất tiện lợi khi biểu thị dòng chữ, só được sắp xếp sau đây. Sau đây sẽ là cách sử dụng lệnh [p] trong chương trình.

p "Hello"

[Kết quả hiển thị]

"Hello"

Khác với [puts] thì p sẽ hiển thị dòng chữ được bao bới [""]. Chúng ta sử biểu diễn giá trị số để hiểu rõ hơn sự khác nhau giữa [puts] và [p].

puts 1
p 1
puts "1"
p "1"

[Kết quả hiển thị]

1
1
1
"1"

Chỉ khi chúng ta sử dụng lệnh [p] thì mới có thể gọi được cả dấu "". Nên nếu sử dụng lệnh p thì chúng ta có thể phân biệt được thứ mà biến số đang biểu diễn cho là số hay là chữ.

Mặt khác, trong Ruby, các loại tài liệu, khi biểu thị kết quả của lệnh [p] hay [puts] thì người ta có thói quen dùng [# =>] để biểu thị. Về cơ bản thì người ta viết như sau.

puts 1    # => 1
p 1       # => 1
puts "1"  # => 1
p "1"     #=> "1"

Nếu viết như thế thì chúng ta có thể hiển thị kết quả thực hiện cùng với code nguồn một cách bình thường. Cách viết [# =>1] không liên quan gì đến bố cục, ngữ pháp trong Ruby. Trong những chương tiếp theo của cuốn sách thì kí hiệu này nên các bạn hãy nhớ.

Lệnh Rand

Lênh rand là lệnh để tạo nên một dãy số ngẫu nhiên. Chúng ta có thể sử dụng lệnh rand như dưới đây để tạo nên một giá trị ngẫu nhiên từ [0] đến [9].

rand (10)

Nếu chúng ta điền vào trong ngoặc số nguyên từ 1 đến n thì lệnh sẽ trả lại số ngẫu nhiên từ 0 đến [n-1]. Như n, giá trị mà ta tung vào câu lệnh được gọi là [argument], còn giá trị mà câu lệnh trả lại cho mình thì gọi là Kết quả trả lại (The number of return). Các bạn có thể xem chi tiết về cả hai giá trị này trong phần tham khảo bên dưới.

Chúng ta thử dùng lệnh rand để tung con xúc xắc nhé. Chúng ta đưa cho lệnh [rand] một argument là sáu.

10. times do
p rand(6)+1
end

[Kết quả hiển thị]

5
4
5
2
3
1
4
4
2
3

Những giá trị được biểu diễn, mỗi lần chạy lại đều có giá trị khác nhau.

Trong game thì dãy số ngẫu nhiên rất hay được sử dụng. Ví dụ như trong những trò chọn thì để liên tục thay đổi những tin nhắn có trong từng hộp thì người ta làm như sau

r = rand (2)
if r==0
  puts "Hòm kho báu rỗng"
else
  puts "Hòm kho báu có 1000 vàng"
end

Xac suất của chương trình trên xảy ra là 1/2 cho xác suất xuất hiện mỗi tin nhắn.

Argument và Kết quả trả lại của lệnh

Giá trị mà ta tung vào câu lệnh được gọi là [argument], còn giá trị mà câu lệnh trả lại cho mình thì gọi là Kết quả trả lại (The number of return).

rand(n) -> số nguyên trong khoảng 0~(n-1)
n: argument
số nguyên 0~(n-1): Kết quả trả lại.

Argument của lệnh ngoài đưa ra giá trị số hay dãy chữ, cũng có thể đưa ra biến số hoặc kết quả trả lại của lệnh.

puts rand(10)

Với ví dụ trên thì lệnh [rand] có 10 được gọi là argument. Lệnh [rand] sẽ trả lại một dãy số ngẫu nhiên với tư cách là kết quả trả lại. Kết quả trả lại của lệnh [rand] chính là argument cho lệnh [puts]. Có nghĩa là trong ví dụ này, 0~9 sẽ được hiển thị một cách ngẫu nhiên.

Cách gọi lệnh và viết gọn của [()]

Khi gọi lệnh ra thì những thứ trong dấu () sẽ trở thành argument.

puts ("Hello")

Tuy nhiên vì dấu () có thể được rút gọn nên cách viết trên cũng có ý nghĩa tương tự đối với cách viết dưới đây.

puts "Hello"

Trong trường hợp này thì dấu () có hay không cũng không thay đổi ý nghĩa của chương trình.

puts (1+1)
puts 1+1

Tuy nhiên đối với trường hợp dưới đây thì việc có hay không dấu ngoặc đơn sẽ làm thay đổi ý nghĩa của chương trình.

rand (5) + 1   # có dấu ()
rand 5+1       # không có dấu ()

Chương trình trên sẽ được chạy như sau:

  • rand (5) + 1: ra một số ngẫu nhiên từ [0~4] rồi cộng 1 tức là kết quả sẽ là số ngẫu nhiên từ [1~5]
  • rand 5+1 thì máy tính sẽ tự động hiểu rằng sẽ là rand (5+1) tức là rand (sáu) nên máy tính sẽ đưa ra kết quả ngẫu nhiên từ [0~5]

Vậy nên dấu () có những trường hợp không dùng cũng được nhưng có những trường hợp tùy vào việc có dùng hay không sẽ ảnh hưởng đến kết quả chạy chương trình. Nếu như khó kết hợp thứ tự nội dung lệnh thì ta cứ sử dụng dấu () để máy tính có thể chạy theo đúng ý của chúng ta.

Lệnh gets

Lệnh [gets] là một lệnh khá đặc biệt. Từ trước đến nay thì chúng ta chỉ toàn viết những chương trình yêu cầu hiển thị chữ lên màn hình, nhưng lệnh [gets] sẽ nhận chữ nhập từ bàn phím.

Chương trình sau đây sẽ nhận chữ nhập từ bàn phím.

puts "Hãy nhập chữ"
s = gets
puts "Chữ được nhập là #{s}"

Đầu tiên các bạn hãy thử chạy chương trình này. Sau khi chạy thử thì hãy nhập chữ từ bàn phím và nhấn Enter. Sau đó chắc chắn màn hình sẽ hiện lên như sau:

Hãy nhập chữ
Hello
Chữ được nhập là Hello

[gets]là lệnh nhận nội dung được nhập từ bàn phím, sau đó lấy chữ được nhập làm thành giá trị trả về cho lệnh tiếp theo. Tại đây chúng ta lấy biến số s làm biến số đại diện cho nội dung nhận được từ [gets]. Theo như thứ tự, đầu tiên lệnh [gets] được thực hiện, sau khi chúng ta nhập xong nội dung, nội dung vừa được nhập sẽ là kết quả trả về cho [gets] và được đại diện bởi biến số s. Cứ như vậy, chương trình được thực hiện từ phía bên phải của dấu = và sau đó được thay thế bởi biến số s. Dòng cuối cùng thì chỉ cần lấy s cho vào công thức triển khai. Tuy nhiên nhìn vào kết quả hiển thị thì nội dung đằng sau s sẽ bị xuống dòng. Điều này là vì có lệnh xuống dòng ngay sau nội dung s biểu thị.

Chúng ta hãy thử sử dụng [p] để xác nhận lại nội dung được nhập nhé

s = gets
p s

[Kết quả hiển thị]

abc
"abc
"

Như vậy cuối nội dung được nhập có thêm kí hiệu [ ]. Trong trường hợp mình muốn loại bỏ đi cái đuôi [ ] thì các bạn hãy sử dụng lệnh [gets.chomp].

s = gets.chomp
p s

[Kết quả hiển thị]

abc
"abc"

Như vậy cuối kết quả sẽ không còn cái đuôi [ ] nữa.

Vậy trong chương trình đầu, chúng ta hãy sử dụng lệnh [gets.chomp] để sửa lại xem nhé.

puts "Hãy nhập nội dung"
s = gets.chompt
puts "Nội dung được nhập là #{s} đó"

{Kết quả hiển thị}

Hãy nhập nội dung
hello
Nội dung được nhập là hello đó.

Như vậy nội dung sau nội dung được nhập sẽ không bị xuống dòng.

0