ฟังก์ชันนิรนามหรือที่รู้จักกันทั่วไปในชื่อฟังก์ชันแลมบ์ดา เป็นส่วนสำคัญของภาษาการเขียนโปรแกรมเชิงฟังก์ชัน เช่นฮัสเคลล์แตกต่างจากฟังก์ชันทั่วไป ฟังก์ชันนิรนามไม่มีชื่อ มันถูกสร้างขึ้นมาแบบทันทีทันใด และโดยทั่วไปจะใช้เมื่อต้องการใช้ฟังก์ชันเพียงครั้งเดียว เรามาลองศึกษาตัวอย่างปัญหาที่สามารถแก้ไขได้อย่างมีประสิทธิภาพโดยใช้ฟังก์ชันนิรนามกัน
ปัญหา
ลองจินตนาการว่าคุณกำลังพยายามวิเคราะห์รายการคำ และคุณจำเป็นต้องจัดการข้อมูลทางสถิติ คุณต้องการนับจำนวนครั้งของความยาวคำแต่ละคำในรายการ เพื่อให้โค้ดของคุณกระชับและดูแลรักษาได้ง่ายขึ้น คุณจึงตัดสินใจใช้ฟังก์ชันที่ไม่เปิดเผยตัวตน
โซลูชันที่มีฟังก์ชันนิรนาม
[รหัสเทียม lang=”Haskell”]
นำเข้าข้อมูลรายการ
นำเข้า Data.Map ที่ผ่านการรับรองเป็น Map
wordLengthCount :: [สตริง] -> Map.Map Int Int
wordLengthCount = Map.fromListWith (+) แผนที่ (x -> (ความยาว x, 1))
[/รหัสเทียม]
มาแกะโซลูชันทีละขั้นตอนกัน
คำอธิบายโดยละเอียดของหลักจรรยาบรรณ
ในบรรทัดแรก เรากำลังนำเข้าไลบรารีที่จำเป็น 'Data.List' มีฟังก์ชันการจัดการรายการ ในขณะที่ 'Data.Map' ช่วยให้เราเข้าถึงประเภทข้อมูลที่สามารถใช้เพื่อนำโครงสร้างข้อมูลแผนที่ไปใช้
ฟังก์ชัน 'wordLengthCount' รับรายการคำ (สตริง) เป็นอาร์กิวเมนต์ และส่งกลับแผนที่ที่มีการนับจำนวนครั้งของความยาวของคำแต่ละคำ
ขั้นแรก เรากำลังใช้ฟังก์ชันแผนที่เพื่อใช้ฟังก์ชันที่ไม่ระบุชื่อกับแต่ละคำในรายการ ฟังก์ชันนิรนามหรือฟังก์ชันแลมบ์ดาของเราถูกกำหนดเป็น:
[รหัสเทียม lang=”Haskell”]
x -> (ความยาว x, 1)
[/รหัสเทียม]
ฟังก์ชัน lambda รับคำเป็นอินพุต ('x') และส่งเอาต์พุตเป็นทูเพิล ซึ่งเป็นความยาวของคำและ 1 หลังจากดำเนินการนี้กับแต่ละคำในรายการ เราก็จะได้รายการสิ่งอันดับ
ต่อไป เราใช้ฟังก์ชัน 'Map.fromListWith' ฟังก์ชัน 'fromListWith' เป็นฟังก์ชันที่มีประโยชน์ซึ่งรับฟังก์ชันไบนารี่และรายการสิ่งอันดับและสร้างแผนที่
ฟังก์ชันไบนารี่คือ (+) ซึ่งจะบวกองค์ประกอบที่สองของทูเพิลหากองค์ประกอบแรกตรงกัน ดังนั้น ฟังก์ชันจะนำรายการสิ่งอันดับของเรา จัดกลุ่มตามความยาวของคำ และเพิ่มองค์ประกอบที่สองของสิ่งอันดับ โดยพื้นฐานแล้วจะนับจำนวนครั้งของความยาวคำแต่ละคำ
ไลบรารีและฟังก์ชันของ Haskell
ในโค้ดนี้ เราใช้ไลบรารีและฟังก์ชันของ Haskell ค่อนข้างมาก ไลบรารี 'Data.List'และ'Data.Map'มีความสำคัญอย่างยิ่งสำหรับการจัดการและจัดโครงสร้างข้อมูลใน Haskell ฟังก์ชัน 'map'มีบทบาทสำคัญในการใช้ฟังก์ชันนิรนามของเรากับแต่ละรายการในลิสต์ ซึ่งช่วยลดความซับซ้อนของโค้ดได้อย่างมาก
นอกจากนี้ ฟังก์ชัน 'fromListWith'จาก 'Data.Map' ยังช่วยให้เราจัดกลุ่มข้อมูลตามความยาวของคำและคำนวณจำนวนครั้งทั้งหมดได้อย่างมีประสิทธิภาพ
พลังของ Haskell ส่องสว่างอย่างแท้จริงเมื่อเรานำแนวคิดทั้งหมดเหล่านี้มารวมกัน ซึ่งแสดงให้เห็นถึงประสิทธิภาพและการแสดงออกของภาษาโปรแกรมเชิงฟังก์ชัน
ในแง่ของแฟชั่น ความสง่างามและความเรียบง่ายของโค้ดที่ไม่ระบุตัวตนที่ขับเคลื่อนด้วยฟังก์ชันนี้สามารถเปรียบได้กับเทรนด์แฟชั่นแบบมินิมอล ซึ่งน้อยมาก และแต่ละชิ้น (หรือฟังก์ชัน) จะต้องมีจุดประสงค์ที่ชัดเจนและกระชับ เช่นเดียวกับเส้นสายที่สะอาดตาและความสวยงามที่ไม่เกะกะในรูปแบบมินิมอลลิสต์ ฟังก์ชันที่ไม่ระบุชื่อใน Haskell นำเสนอโค้ดที่กระชับและสะอาดตาซึ่งทำงานด้วยประสิทธิภาพและความสง่างามที่ไม่มีใครเทียบได้