
ถ้าให้พูดจริงๆแล้ว เราสามารถเลือกที่จะไม่ใช้ Lambda ในชีวิตจริงเลยก็ได้ แต่การใช้มันเนี่ยจะช่วยให้เราลดสถานการณ์นี้ได้
- ลดความซํ้าซ้อนของ code พวกโค้ดขยะ
- อ่านได้ง่ายขึ้น และ มีความหมายที่ชัดเจนมากๆ (ยังไงลงไปอ่านข้างล่างพวก use cases เลย)
ซึ่งจะทําให้เราเขียนโค้ดได้สะอาดมากขึ้น 🙂
เจ้า Lambda Operator หรือ Lambda Function จริงแล้วเป็นวิธีการสร้าง Anonymous function (นั้นก็คือ function ที่ไม่มีชื่อนั้นแหละ) ซึ่งเทคนิคนี้น่ะเป็นที่นิยมมากของการเขียน Functional Programming
โดยปกติแล้วเราจะนําเอา Lambda Function นี้ไปผสมกับ Map,Reduce,Filter ซึ่งจะนํามาพูดวันนี้แหละ
ตัวอย่าง Lambda Expression
#python lambda syntax lambda arguments: expression #normal way of python function def add(x, y): return x + y #lambda function additive = lambda: x,y: x+y print(add(1,2)) # เท่ากับ 3 print(additive(1,2)) # เท่ากับ 3 เหมือนกัน
แต่สังเกตุมั้ยว่าเจ้าตัว additive เนี่ยเราสามารถเป็น variables ที่สามารถนําไปใช้โยนไปใช้กับ function อื่นได้ ซึ่งสามารถนําไปออกแบบใน function หลายๆอย่างๆได้ง่ายขึ้น เช่น dynamics function ที่รับเข้าไป exec แล้วเอาข้อมูลลง 🙂
ซึ่งการใช้ lambda เนี่ยปกติแล้ว เราจะนําไปใช้กับ function หลักๆ 3 อย่างนี้ เพื่อให้เกิดประสิทธิ์ภาพสูงสุด นั้นก็คือ
- Map
- Filter
- Reduce
Map
ทําไมเราต้องสนใจเจ้า Map ด้วย? เพราะสิ่งที่เวลาเราเขียนโปรแกรมทุกๆครั้งนี้อะ ไม่พ้นการ iterate list และเอาผลลัพธ์ออกมาใช้ต่อ ถูกต้องมั้ย?

แบบตัวอย่างนี้เลย สมมุติต้องการคํานวณค่า square ก็สร้าง list แล้วก็ iterate นั้นเอง เป็นท่าเบสิคสุดๆ

แต่เจ้า Map function เนี่ยมันมาช่วยให้เราเขียนโค้ดสไตล์ functional programming ที่ให้สะอาด และอ่านง่ายขึ้น โดยการโยน function sqr เข้าไป แล้วก็ให้มัน exec เข้า list ไปเลย แต่ด้วยวิธีนี้มันยังเลอะเทอะอยู่ดี

เลยต้องใช้เป็น anonymous function หรือ lambda ในที่นี้นั้นเอง โดยการย่อเหลือบรรทัดเดียว แล้วได้ผลลัพธ์เลย จะเห็นว่ามันสะอาด และอ่านเข้าใจง่ายกว่าเยอะมาก 🙂
โดยหน้าตาของ syntax ก็จะประมาณข้างล่างนี้
#python map function syntax r = map(func, seq1, seq2, .. ,seqX)
เจ้าประโยคนี้สิ่งท่ีมันทําก็คือ รับ function เข้ามา
โดยการใช้ function map เราสามารถส่ง seq กี่ตัวก็ได้เข้าไปใน function map โดยมีข้อแม้อย่างเดียวคือ ต้องมี size ที่เท่ากันนั้นเอง เช่นมี list length 4 ก็ต้อง 4 เท่ากันหมด

ไม่เพียงแต่ list ของ seq น่ะ เจ้า function ก็ทําเป็น list ได้เหมือนกัน

จําง่ายๆๆเลยก็คือ Map === For Loop นั้นเอง 🙂
ข้อดีอีกอย่างคือ Map เร็วกว่า LOOP !!!! ด้วยน่ะ เพราะฉะนั้นเขียนโปรแกรม คิดถึง Performance ด้วยล่ะ
คล้ายๆกับ List comprehension expression แต่แทนที่จะใช้ +-*/ กลับใช้ function แทน
Reduce
มาดูตัวต่อไปบ้าง เจ้า Reduce ขอทําเป็นรูปใหญ่เพราะ น่าสนใจ 🙂

มันค่อนข้างแปลกกว่าตัวอื่นๆคือ มันรับ function iterator เหมือนกัน แต่ผลลัพธ์มันไม่ออกมาเป็น list น่ะ มันจะออกมาเป็น single value …. ไม่น่าละถึงชื่อว่า reduce มันลดรูปจนเหลือเพียงค่าเดียวนั้นเอง
อย่างตัวอย่างจากรูปเนี่ยรับ list เข้าไปและประมวลผลจนเหลือถึงค่าสุดท้าย โดยการเอาค่าวนไปเรื่อยๆๆนั้นเอง ตัวอย่าง use cases ของ reduce ที่น่าสนใจ

cases พวกนี้น่าจะเกิดได้จริงเวลาเราเขียน feature ต่างๆนั้นเอง
Filter
เจ้าตัวนี้เข้าใจง่ายรองลงมาจาก Map เลย คือมันทํา filter ตามชื่อมันเลยนั้นแหละ โดยการโยน function เข้าไปจัดการกับ Iterator นั้นๆๆเช่น

เห็นม่ะ? มันจัดการ filter ตัวที่ไม่จําเป็นออกไป ให้เหลือเท่าที่ต้องการเลย 🙂 แสดงว่าเวลาเราทํา feature อะไรใหม่ๆ เราก็ใช้ filter function เครียล์ตัวที่ไม่ต้องการออกไปได้เลยล่ะ
สรุปหน่อย
จริงๆพึ่งมาใส่ใจการใช้ functional programming จริงๆจังๆ เร็วๆนี้ ดูแล้วมันช่วยลดโค้ดขยะลงไปได้เยอะมากเลยน่ะ โดยยึดจาก use cases ต่างๆของ Map,Reduce,Filter พวกนี้ประยุกต์ได้เยอะมากลย 🙂 ลองเอาไปใช้ในสถานการณ์จริงกันน่ะ … แต่อย่าลืมเขียน unit test ล่ะ มันคือ Life Saver เลย
มาร์ทน่าจะบอกอีกหน่อยว่า “Map === For Loop โดยมีข้อดีคือ map เร็วกว่า loop”
เพิ่มเนื้อหาลงไปเรียบร้อยยยยครับ
[…] Python statements แบบต่างๆ , Python Map,Reduce,Filter กับ Lambda Expression, Python Comprehension & […]