Haskell:
การพิมพ์ผลลัพธ์การแก้ไขโค้ด

วิธีการ:

วิธีง่ายๆ ในการพิมพ์ข้อมูลดีบักใน Haskell คือการใช้ฟังก์ชัน print, ซึ่งรับค่าที่เป็นอินสแตนซ์ของ typeclass Show และแสดงผลออกมาที่คอนโซล

main :: IO ()
main = do
  let number = 42
  print number
  putStrLn "การดีบักใน Haskell เป็นเรื่องง่ายมาก!"

-- ผลลัพธ์:
-- 42
-- การดีบักใน Haskell เป็นเรื่องง่ายมาก!

สำหรับโครงสร้างข้อมูลที่ซับซ้อนขึ้น, ให้แน่ใจว่ามีการ derive Show เพื่อให้สามารถพิมพ์ออกมาได้อย่างสวยงาม:

data Cake = Chocolate | Vanilla deriving Show

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

main :: IO ()
main = debugFlavor Chocolate

-- ผลลัพธ์:
-- Chocolate

บางครั้งเราต้องการการดีบักชั่วคราวที่สามารถลบออกได้ง่ายในภายหลัง อินเทอร์เฟซสำหรับสิ่งนี้คือโมดูล Debug.Trace.

import Debug.Trace (trace)

main :: IO ()
main = putStrLn $ trace "ข้อความนี้จะถูกพิมพ์ก่อน" "ข้อความนี้จะถูกพิมพ์หลัง"

-- ผลลัพธ์:
-- ข้อความนี้จะถูกพิมพ์ก่อน
-- ข้อความนี้จะถูกพิมพ์หลัง

ฟังก์ชัน trace จะพิมพ์สตริงเมื่อค่าถูกประเมิน แต่เป็น side effect ในส่วนของโค้ดที่บริสุทธิ์ มันมีประโยชน์แต่ใช้ด้วยความระมัดระวัง!

การวิเคราะห์ลึก

ในยุคสมัยเก่า, การดีบักอาจเป็นเทคนิค “print statement” แบบเก่า Haskell เสนอสิ่งนี้ด้วยสัมผัสแบบฟังก์ชันและเครื่องมือสำหรับปฏิบัติการดีบักที่สะอาดขึ้น มาพบกับ print และโมดูล Debug.Trace ตามที่เราได้สำรวจไปแล้ว

สำหรับการใช้งานอะไรที่แตกต่างจาก print รวมถึง putStrLn สำหรับสตริงและ putStr, หากคุณไม่ชอบการเพิ่มบรรทัดใหม่โดยอัตโนมัติ โมดูล Debug.Trace ยังมีรูปแบบอื่นอย่าง traceShow ที่ทำงานโดยตรงกับอินสแตนซ์ของ Show, ทำให้คุณไม่ต้องใช้ฟังก์ชัน show

ในส่วนของรายละเอียดการประมวลผล, print โดยพื้นฐานคือ putStrLn . show มันพิมพ์ข้อมูลที่เป็น Show ออกมาใน stdout ฟังก์ชันของ Debug.Trace, ในทางกลับกัน, มีจุดประสงค์สำหรับการใช้ชั่วคราวในระหว่างการพัฒนา พวกมันแอบเข้าไปในโค้ดบริสุทธิ์และละเมิดความโปร่งใสในการอ้างอิงซึ่งเป็นสิ่งที่ไม่ควรทำในระยะยาว

อย่าลืมใช้ไลบรารีการล็อกสำหรับแอปพลิเคชันที่จริงจัง ซึ่งมอบการควบคุมมากขึ้นและการ “debug ด้วยการพิมพ์” น้อยลง

ดูเพิ่มเติม