การใช้งาน Loop ในภาษา Haskell อาจจะแตกต่างจากภาษาโปรแกรมอื่นๆ เช่น Python, Java หรือ C# แต่ Haskell มีลักษณะเฉพาะที่ช่วยทำให้ความสามารถนี้โดดเด่นและน่าสนใจยิ่งขึ้น ซึ่งในภาษา Haskell จริงๆ แล้วไม่มี loop แบบที่เรารู้จัก แต่เราสามารถใช้งานการทำซ้ำได้โดยใช้ฟังก์ชันที่ชื่อว่า `map` หรือ `fold` แทน วันนี้เราจะมาพูดถึงการใช้งาน `map` ที่มีแนวคิดใกล้เคียงกับ `foreach` loop ในภาษาอื่น ๆ
`map` ใน Haskell เป็นฟังก์ชันที่ใช้ในการประยุกต์ (apply) ฟังก์ชันหนึ่งไปยังสมาชิกของลิสต์ (list) ทุกๆ ตัว โดยการคืนค่าลิสต์ใหม่ที่มีผลลัพธ์จากการประยุกต์นั้นๆ
ตัวอย่างการใช้งาน `map`
มาดูกันว่าถ้าเรามีฟังก์ชันเฉพาะที่จะเพิ่ม 1 ให้กับตัวเลขในลิสต์ เราจะใช้ `map` ได้อย่างไร
ในตัวอย่างข้างต้น เราได้สร้างฟังก์ชัน `addOne` ที่ทำหน้าที่เพิ่ม 1 ให้กับตัวเลข จากนั้นเราใช้ `map` เพื่อทำการประยุกต์ฟังก์ชัน `addOne` ไปยังลิสต์ของตัวเลข `numbers` สุดท้ายเราจะได้ลิสต์ใหม่ที่ชื่อว่า `incrementedNumbers`
การใช้งาน `map` ใน Haskell มีประโยชน์มากมายในโลกจริง เหมือนกับการทำงานกับข้อมูลในฐานข้อมูล หรือการประมวลผลข้อมูลใหญ่ (big data) ที่เราต้องจัดการกับรายชื่อที่มีตัวเลขหลายๆ ตัว เพื่อให้ได้ค่าที่เราต้องการ
Use Case ที่ 1: การประมวลผลข้อมูลจากฐานข้อมูล
สมมติว่าคุณมีข้อมูลลูกค้าในฐานข้อมูล และคุณต้องการดึงหมายเลขโทรศัพท์ (phone numbers) จากข้อมูลทั้งหมดเพื่อพิมพ์ตั๋วข้อความ SMS ซึ่งข้อมูลที่ดึงมาอาจอยู่ในรูปแบบแถว (row) ของข้อมูลที่เราจะต้องทำการแปลง
ในตัวอย่างนี้ เราใช้ `map` เพื่อดึงเบอร์โทรศัพท์จากแถวข้อมูลลูกค้าที่เก็บไว้ในลิสต์ สุดท้ายเราได้รับลิสต์ที่มีเบอร์โทรศัพท์ทั้งหมด
Use Case ที่ 2: การแปลงข้อมูล
ในอีกหนึ่งกรณี อาจจะมีข้อมูลในรูปแบบที่เป็น String และคุณต้องการแปลงให้เป็นตัวเลข เพื่อทำการคำนวณหรือตัดสินใจต่างๆ ยกตัวอย่างเช่น การแปลงอายุที่เป็น String ให้อยู่ในรูปแบบ Int
ในตัวอย่างนี้ เราสร้างฟังก์ชัน `agesAsStrings` ที่ใช้ `map` เพื่ออ่านค่านั้นจาก String และแปลงเป็น Int โดยใช้ฟังก์ชัน `read`
แม้ว่าการใช้ `map` จะทำให้โค้ดดูสะอาดและเข้าใจง่าย แต่มันก็มีข้อจำกัดในบางครั้ง เช่น คุณไม่สามารถทำการเปลี่ยนแปลงในลิสต์ต้นฉบับได้ มันมีความ immutability อันเป็นเอกลักษณ์ของ Haskell โดยทั่วไป สิ่งนี้ทำให้ Haskell ปลอดภัยจากความผิดพลาดที่เกิดจากการแก้ไขข้อมูลเมื่อไม่ตั้งใจ
อีกข้อที่น่าสนใจคือฟังก์ชัน `map` จะมีประสิทธิภาพที่ดีกว่า `foreach` loop ในหลายๆ ภาษา เนื่องจาก Haskell มีการทำ optimization อันดีในด้าน lazy evaluation ทำให้ไม่ต้องทำการประมวลผลซ้ำซ้อน
ในบทความนี้เราได้สำรวจการใช้ฟังก์ชัน `map` ในภาษา Haskell โดยมีลักษณะการทำงานที่ใกล้เคียงกับ `foreach` loop ในภาษาอื่น ๆ ไม่เพียงแต่เราสามารถเพิ่มค่าให้กับตัวเลขหรือแปลงประเภทข้อมูล เรายังได้เรียนรู้ถึงการนำไปใช้ในชีวิตประจำวันของนักพัฒนาซอฟต์แวร์ ในการจัดการข้อมูลต่างๆ อย่างมีประสิทธิภาพ
หากคุณรู้สึกว่าเขียนโปรแกรมใน Haskell เป็นเรื่องที่น่าสนใจ และคุณต้องการเรียนรู้การเขียนโปรแกรมอย่างลึกซึ้ง ไม่ว่าจะเป็นในด้านไหนๆ ไม่ต้องสงสัยเลยว่า EPT (Expert-Programming-Tutor) ยินดีต้อนรับทุกคนมาเรียนรู้กับเรา! ที่ EPT เรามีคอร์สการสอนที่หลากหลาย พร้อมนักเรียนที่มีประสบการณ์รอช่วยเสมอ สนใจสมัครเรียนได้ที่เว็บไซต์ของเราได้เลย!
หมายเหตุ: ข้อมูลในบทความนี้อาจจะผิด โปรดตรวจสอบความถูกต้องของบทความอีกครั้งหนึ่ง บทความนี้ไม่สามารถนำไปใช้อ้างอิงใด ๆ ได้ ทาง EPT ไม่ขอยืนยันความถูกต้อง และไม่ขอรับผิดชอบต่อความเสียหายใดที่เกิดจากบทความชุดนี้ทั้งทางทรัพย์สิน ร่างกาย หรือจิตใจของผู้อ่านและผู้เกี่ยวข้อง
Tag ที่น่าสนใจ: java c# vb.net python c c++ machine_learning web database oop cloud aws ios android
หากมีข้อผิดพลาด/ต้องการพูดคุยเพิ่มเติมเกี่ยวกับบทความนี้ กรุณาแจ้งที่ http://m.me/Expert.Programming.Tutor
085-350-7540 (DTAC)
084-88-00-255 (AIS)
026-111-618
หรือทาง EMAIL: NTPRINTF@GMAIL.COM