Haskell:
In ra thông tin gỡ lỗi

Làm thế nào:

Một cách dễ dàng để in thông tin gỡ rối trong Haskell là sử dụng hàm print, nó nhận một giá trị là thể hiện của typeclass Show và xuất nó ra console.

main :: IO ()
main = do
  let number = 42
  print number
  putStrLn "Gỡ rối thật là dễ dàng trong Haskell!"

-- Đầu ra:
-- 42
-- Gỡ rối thật là dễ dàng trong Haskell!

Đối với các cấu trúc dữ liệu phức tạp hơn, đảm bảo chúng được phát sinh từ Show để kích hoạt in đẹp:

data Cake = Chocolate | Vanilla deriving Show

debugFlavor :: Cake -> IO ()
debugFlavor flavor = print flavor

main :: IO ()
main = debugFlavor Chocolate

-- Đầu ra:
-- Chocolate

Đôi khi chúng ta muốn gỡ rối tạm thời mà dễ dàng loại bỏ sau này. Hãy nhập mô-đun Debug.Trace.

import Debug.Trace (trace)

main :: IO ()
main = putStrLn $ trace "Điều này sẽ được in trước" "Điều này sẽ được in sau"

-- Đầu ra:
-- Điều này sẽ được in trước
-- Điều này sẽ được in sau

Hàm trace in chuỗi khi giá trị được đánh giá, nhưng nó là một tác dụng phụ trong phần mã nguyên thủy. Nó rất hữu ích nhưng hãy sử dụng với sự cẩn thận!

Sâu hơn

Trong những ngày xưa cũ, gỡ rối có thể là chiêu trò “in câu lệnh” cũ kỹ. Haskell cung cấp điều này với một chút xoay chuyển chức năng và công cụ cho các thực hành gỡ rối sạch hơn. Hãy gặp hàm print và mô-đun Debug.Trace, như đã khám phá trước đây.

Những lựa chọn thay thế cho print bao gồm putStrLn cho chuỗi và putStr, nếu bạn không thích dấu xuống dòng tự động đó. Debug.Trace cũng có các biến thể như traceShow làm việc trực tiếp với các thể hiện của Show, tiết kiệm cho bạn một cuộc gọi show.

Về chi tiết triển khai, print cơ bản là putStrLn . show. Nó in bất kỳ dữ liệu Show-able nào ra stdout. Các hàm Debug.Trace, ngược lại, dành cho việc sử dụng tạm thời trong quá trình phát triển. Chúng len lỏi vào mã nguyên thủy và vi phạm tính minh bạch tham chiếu, đó là điều không ổn trong dài hạn.

Đừng quên các thư viện ghi nhật ký cho các ứng dụng nghiêm túc, mang lại nhiều kiểm soát hơn và ít “gỡ rối bằng cách in” hơn.

Xem Thêm