Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Thành Thạo Gets & Chomp Của Ruby: Đọc Đầu Vào Người Dùng Hiệu Quả

Bạn đang viết chương trình Ruby & muốn hỏi người dùng một câu hỏi…

Làm thế nào bạn có thể làm điều đó?

Vâng, bạn có thể dùng phương thức Ruby gets để đọc đầu vào người dùng.

Bạn có thể gọi gets.

Sau đó chương trình bắt đầu chờ bạn gõ gì đó bằng bàn phím & nhấn phím enter.

Kết quả?

Bạn nhận lại một chuỗi (string).

Chuỗi này có nội dung bạn (hoặc người dùng) gõ vào, nên nếu bạn gán chuỗi này cho biến bạn sẽ có thể dùng nó.

Ví dụ phổ biến là chương trình chào hỏi.

Trông như sau:

name = gets.chomp
puts "Hello #{name}, nice to meet you!"

#{name} này gọi là nội suy chuỗi (string interpolation)

Hãy thử & xem bản thân nó hoạt động như thế nào.

  • Trước, lưu code này vào tệp „greeting.rb“
  • Sau đó, dùng „ruby greeting.rb“ (từ chương trình terminal)

Nhập tên & chương trình sẽ chào bạn!

Khá cool.

Bây giờ:

Cái chomp này toàn về cái gì?

Đó là phương thức Ruby thay đổi kết quả của gets theo cách rất cụ thể.

Thử bỏ nó.

Bao gồm dấu chấm (.) trước nó, nên nó trở thành name = gets, thay vì name = gets.chomp。

Nếu bạn lưu code & chạy lại…

Bạn sẽ thấy lời chào của bạn giờ bị chia thành hai dòng, thay vì toàn bộ lời chào ở một dòng.

Cái gì đang xảy ra?

Hãy đào sâu chi tiết để tìm hiểu!

Hiểu Về Dòng Mới & Ký Tự Đặc Biệt

Ruby đọc mọi thứ bạn gõ vào chương trình trong khi phương thức get hoạt động.

Cho chương trình chào hỏi của chúng ta, điều này bao gồm tên bạn.

Và một ký tự „dòng mới“ đặc biệt làm thông điệp chào bị chia thành hai dòng!

Gặp gỡ ký tự dòng mới:

\n

Những loại ký tự đặc biệt này thường vô hình & chỉ hiện dưới dạng dòng mới, khoảng trắng, màu sắc, v.v.

Nếu bạn muốn thấy chúng bạn cần đèn pin ma thuật giá $10,000.

Đùa thôi!

Tất cả bạn cần là phương thức p hoặc inspect。

Ví dụ dùng:

p name # "Jesus\n"

nó!

Ký tự „dòng mới“ của chúng ta (\n).

Điều này đưa chúng ta quay lại câu hỏi gốc…

chomp toàn về cái gì?

Mục đích của chomp là loại bỏ ký tự dòng mới ở cuối chuỗi.

Như bạn đã thấy, điều đó rất hữu ích!

Ví Dụ Khác

Có ký tự dòng mới này, hoặc ký tự đặc biệt khác, ảnh hưởng nhiều thứ hơn là cách chuỗi trông khi bạn in nó.

Nó cũng có thể ảnh hưởng câu lệnh if!

Ví dụ:

name = gets
if name == "David"
puts "Hello David, we were expecting you!"
end

Trong code này, nếu bạn không dùng chomp với gets, hai chuỗi sẽ không giống nhau vì ký tự dòng mới (\n), nên điều này đánh giá thành false。

Btw…**

Điều này cũng áp dụng cho chuỗi bạn nhận bên ngoài gets, như dữ liệu từ đọc cơ sở dữ liệu, tệp, hoặc bất kỳ nguồn nào khác.

Giữ mắt mở cho các ký tự đặc biệt này!

Chomp vs Chop vs Strip

Hai phương thức khác bạn có thể thấy hữu ích để làm sạch đầu vào người dùng là chop & strip.

Với strip bạn có thể loại bỏ khoảng trắng.

Ví dụ:

" John Smith ".strip

Với chop bạn sẽ luôn loại bỏ ký tự cuối.

Loại Bỏ Ký Tự Đầu Tiên

Điều khác bạn có thể cần là loại bỏ ký tự từ đầu.

Bạn có thể làm như sau:

str = "Mr. John"
str[0..3] = ""
str # "John"

Điều này loại bỏ bốn ký tự đầu.

Hai Phương Thức Gets? Cốt Truyện Dày Đặc!

Có trường hợp đặc biệt…

Nơi bạn sẽ cần dùng $stdin.gets thay vì chỉ gets.

Nếu bạn nhận lỗi như sau:

`gets': No such file or directory @ rb_sysopen

Tại sao?

Vì có hai phiên bản của phương thức gets.

  • Phiên bản mặc định cố đọc tên tệp
  • Phiên bản thay thế ($stdin.gets) luôn đọc từ đầu vào người dùng

Bây giờ bạn biết, nếu bạn thấy lỗi như vậy khi dùng gets, thử đổi thành $stdin.gets.

Tóm Tắt

Bạn đã học về phương thức gets & chomp, chúng làm gì, cách hoạt động, và tại sao chúng hữu ích!

Tiếp tục học với hướng dẫn Ruby này.

Cảm ơn bạn đã đọc! 🙂