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

Khám Phá 5 Lớp Thư Viện Chuẩn Ruby Essentials & Ví Dụ Thực Tế

Thư viện chuẩn Ruby (Ruby Standard Library) là tập hợp module và lớp đi kèm Ruby nhưng không phải phần của ngôn ngữ bản thân.

Các lớp này cung cấp nhiều tiện ích như:

  • Mã hóa Base64
  • Sinh số nguyên tố
  • Phân giải DNS

Bài viết này giới thiệu 5 lớp này với ví dụ hữu ích.

Lớp Logger Trong Ruby

Nếu cần ghi log lỗi hoặc thông điệp debug, Ruby hỗ trợ sẵn lớp Logger.

Lớp này cung cấp mọi thứ cần để bắt đầu logging!

Để dùng Logger, chỉ cần tạo đối tượng Logger và truyền luồng đầu ra (hoặc tên tệp) làm tham số. Sau đó dùng các mức độ log khác nhau để ghi thông điệp.

Các mức độ log:

  • debug
  • info
  • warn
  • error
  • fatal

Ví dụ:

require 'logger'
logger = Logger.new(STDOUT)
logger.info 'testing...'
logger.warn 'fun with Ruby :)'

Đầu ra:

I, [2016-05-14T15:50:21.367590 #12148] INFO -- : testing...
W, [2016-05-14T15:50:21.846651 #12148] WARN -- : fun with Ruby 🙂

Ký tự đầu là dạng viết tắt mức log (I cho Info, W cho Warn)… Sau đó có timestamp, và ID tiến trình hiện tại (lấy trong Ruby bằng Process.pid).

Cuối cùng là mức log đầy đủ và thông điệp thực tế.

Bạn có thể thay đổi định dạng bằng cách cung cấp formatter mới.

Làm Việc Với Số Nguyên Tố

Có thể bạn không xử lý số nguyên tố hàng ngày, nhưng vẫn tốt biết (đặc biệt nếu thích thách thức lập trình) Ruby hỗ trợ tốt qua lớp Prime.

Khi require Prime, nó thêm phương thức prime? vào Fixnum.

Ví dụ:

require 'prime'
5.prime?  # true
11.prime? # true
20.prime? # false

Lớp này cũng có bộ sinh số nguyên tố.

Ví dụ:

Prime.take(10) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]

Cách Dùng Lớp StringIO

Lớp StringIO cho phép tạo chuỗi hành xử như đối tượng IO.

Điều này nghĩa là bạn có thể làm việc với chuỗi này như đọc từ tệp hoặc STDIN (Đầu vào chuẩn).

Ví dụ:

require 'stringio'
io = StringIO.new
io << 'test'
io << 'code'
puts io.string # "testcode"

Lưu ý:

Khi thêm dữ liệu vào StringIO, nó không tự thêm khoảng trắng hay dòng mới. Để lấy chuỗi thực tế cần gọi phương thức string.

Cũng không thể dùng chỉ số mảng truy cập ký tự riêng lẻ như chuỗi thường.

Khi nào hữu ích?

Đôi khi muốn thay thế tệp hoặc đối tượng IO khác bằng đối tượng bạn kiểm soát hơn. Ví dụ, môi trường test có thể thay STDOUT bằng StringIO.

Xem ví dụ thực tế từ Rails: https://github.com/rails/rails/blob/52ce6ece8c8f74064bb64e0a0b1ddd83092718e1/activesupport/test/logger_test.rb

Mã Hóa & Giải Mã Base64

Base64 là định dạng mã hóa phổ biến trên internet.

Trông như sau:

"cnVieQ=="

Tại sao hữu ích?

URL chỉ cho phép tập ký tự hạn chế, đôi khi muốn bao gồm những ký tự đó và Base64 làm cho điều này trở nên khả thi.

Cách mã hóa:

require 'base64'
Base64.encode64("ruby") # "cnVieQ=="

Cách giải mã:

require 'base64'
Base64.decode64("cnVieQ==") # "ruby"

Làm Việc Với Đường Dẫn

Lớp Pathname gói gọn nhiều tiện ích khám phá hệ thống tệp, như Dir và File, vào một lớp mạnh mẽ hơn.

Mặc dù tên phương thức giống nhau, nhưng chúng trả về đối tượng Pathname thay vì chuỗi hoặc mảng. Điều này nghĩa là bạn tiếp tục làm việc với kết quả bằng tất cả phương thức liên quan tệp.

Ví dụ tuyệt vời:

require 'pathname'
Pathname.glob("*").count(&:directory?)

Nếu dùng Dir thì code phức tạp hơn, không thanh lịch bằng:

Dir.glob("*").count { |d| File.directory?(d) }

Hãy thử lớp này lần sau cần làm nhiệm vụ liên quan hệ thống tệp 🙂

Kết Luận

Hy vọng các ví dụ hữu ích! Hãy khám phá thêm Thư viện chuẩn để biết nó có thể làm gì cho bạn.

Đừng quên chia sẻ bài viết nếu thích 🙂