Khóa học ruby

Predefined Variables trong Ruby

0 phút đọc

Ruby cung cấp một loạt các biến được định nghĩa trước (predefined variables) giúp lập trình viên truy cập thông tin về trạng thái hiện tại của chương trình, các cờ (flags) và hệ thống. Những biến này có thể rất hữu ích trong việc đơn giản hóa các script hoặc gỡ lỗi các vấn đề. Tuy nhiên, việc sử dụng chúng trong các thư viện không được khuyến khích vì chúng ảnh hưởng đến hành vi của toàn bộ chương trình. Bài viết này sẽ đi sâu vào các biến được định nghĩa trước trong Ruby, bao gồm cú pháp, các biến phổ biến và cách sử dụng chúng với các ví dụ minh họa.

Cú pháp của Biến Được Định Nghĩa Trước

Các biến được định nghĩa trước trong Ruby luôn bắt đầu bằng ký tự $. Chúng có thể là các biến toàn cục, biến đặc biệt hoặc các biến hệ thống. Dưới đây là một số biến phổ biến và cách sử dụng chúng.

Các Biến Được Định Nghĩa Trước Phổ Biến

Biến Toàn Cục (Global Variables)

  • $!: Thông báo lỗi của exceptions cuối cùng được ném ra. Alias là $ERROR_INFO.
  • $@: Mảng chứa backtrace của exceptions cuối cùng được ném ra. Alias là $ERROR_POSITION.
  • $/: Ký tự phân tách bản ghi đầu vào, mặc định là newline. Alias là $INPUT_RECORD_SEPARATOR.
  • $\: Ký tự phân tách bản ghi đầu ra cho printIO#write, mặc định là nil. Alias là $OUTPUT_RECORD_SEPARATOR.
  • $,: Ký tự phân tách trường đầu ra cho printArray#join, mặc định là nil. Alias là $OUTPUT_FIELD_SEPARATOR.
  • $;: Ký tự phân tách mặc định cho String#split, mặc định là nil. Alias là $FIELD_SEPARATOR.
  • $.: Số dòng cuối cùng được đọc từ tệp đầu vào hiện tại. Alias là $INPUT_LINE_NUMBER.
  • $<: Đối tượng cho phép truy cập vào nội dung của tất cả các tệp được cung cấp dưới dạng đối số dòng lệnh hoặc $stdin. Alias là $DEFAULT_INPUT.
  • $>: Đích đến của đầu ra cho printprintf, mặc định là $stdout. Alias là $DEFAULT_OUTPUT.
  • $0: Tên của chương trình Ruby hiện tại đang được thực thi.
  • $$: PID của quá trình Ruby hiện tại đang được thực thi.
  • $?: Trạng thái thoát của quá trình cuối cùng được kết thúc.
  • $:: Mảng chứa các thư mục được tìm kiếm khi tải các tệp bằng phương thức loadrequire. Alias là $LOAD_PATH.
  • $DEBUG: True nếu tùy chọn dòng lệnh -d hoặc --debug được chỉ định.
  • $FILENAME: Tên của tệp hiện tại đang được đọc từ $<. Alias là $<.filename.
  • $SAFE: Mức độ an toàn của Ruby, từ 0 đến 4.

Ví dụ về Sử Dụng Các Biến Được Định Nghĩa Trước

Ví dụ 1: Sử dụng $0$$

ruby Copy
puts "Tên script: #{$0}"
puts "PID của quá trình: #{$$}"

Ví dụ 2: Sử dụng $!$@

ruby Copy
begin
  raise "Lỗi giả lập"
rescue => e
  puts "Thông báo lỗi: #{$!}"
  puts "Backtrace: #{$@.join("\n")}"
end

Ví dụ 3: Sử dụng $/$\

ruby Copy
$/ = ","
$\ = "\n"

data = "1,2,3,4,5"
puts data.split

Ví dụ 4: Sử dụng $<$>

ruby Copy
# Tạo một tệp tạm thời để đọc
File.open("temp.txt", "w") do |file|
  file.puts "Dòng 1"
  file.puts "Dòng 2"
end

# Đọc tệp sử dụng $<
$< = File.open("temp.txt")
while line = $<.gets
  puts line
end

# Xóa tệp tạm thời
File.delete("temp.txt")

Các Biến Đặc Biệt Khác

Biến Liên Quan Đến Regular Expressions

  • $&: Chuỗi khớp với mẫu cuối cùng. Alias là $MATCH.
  • `$``: Chuỗi trước khi khớp với mẫu cuối cùng.
  • $': Chuỗi sau khi khớp với mẫu cuối cùng.
  • $+: Nhóm khớp cao nhất trong mẫu cuối cùng.
  • $1, $2, ...: Các nhóm khớp trong mẫu cuối cùng.

Ví dụ về Sử Dụng Các Biến Regular Expressions

ruby Copy
text = "Chào mừng đến với Ruby!"

if text =~ /(mừng)/
  puts "Chuỗi khớp: #{$&}"
  puts "Trước khi khớp: #{$`}"
  puts "Sau khi khớp: #{$'}"
  puts "Nhóm khớp: #{$1}"
end

Các Biến Hệ Thống

  • $stdin: Đầu vào chuẩn hiện tại.
  • $stdout: Đầu ra chuẩn hiện tại.
  • $stderr: Đầu ra lỗi chuẩn hiện tại.
  • $VERBOSE: Cờ verbose, được thiết lập bởi tùy chọn -v hoặc -w.
  • $LOADED_FEATURES: Mảng chứa tên các module đã được tải bởi require.
  • $LOAD_PATH: Mảng chứa các thư mục được tìm kiếm khi tải các tệp bằng loadrequire.

Ví dụ về Sử Dụng Các Biến Hệ Thống

ruby Copy
puts "Đầu vào chuẩn: #{$stdin}"
puts "Đầu ra chuẩn: #{$stdout}"
puts "Đầu ra lỗi chuẩn: #{$stderr}"
puts "Cờ verbose: #{$VERBOSE}"
puts "Các module đã tải: #{$LOADED_FEATURES.join(", ")}"
puts "Đường dẫn tải: #{$LOAD_PATH.join(", ")}"

Kết Luận

Các biến được định nghĩa trước trong Ruby cung cấp nhiều thông tin hữu ích về trạng thái hiện tại của chương trình và hệ thống. Chúng có thể được sử dụng để đơn giản hóa các script, gỡ lỗi và quản lý các tác vụ phức tạp. Tuy nhiên, việc sử dụng chúng trong các thư viện không được khuyến khích vì chúng ảnh hưởng đến hành vi của toàn bộ chương trình. Bằng cách hiểu và sử dụng đúng các biến này, bạn có thể viết mã Ruby hiệu quả và an toàn hơn.

Avatar
Được viết bởi

Admin Team

Gợi ý câu hỏi phỏng vấn

Không có dữ liệu

Không có dữ liệu

Gợi ý bài viết
Không có dữ liệu

Không có dữ liệu

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào