Pure Function คืออะไร ?

Auttawut Wiriyakreng
Factsblend

--

ถ้าใครกำลังเริ่มศึกษา React จะได้ยินคำๆนี้บ่อยมากเวลาไปอ่าน Tutorial ต่างๆ เพราะ React นั้นจะใช้งาน Pure function เป็นส่วนใหญ่ หรือแม้กระทั้งจะได้ยินมาจากที่ไหนก็ตาม วันนี้เราจะมาอธิบายกันว่าจริงๆแล้วมันคืออะไร มาเริ่มกันเลยยย :)

Pure Function นั้นแท้จริงแล้วมันคือเสาหลักเลยนะสำหรับ Functional Programming โดยความหมายของมันหลักๆมีมีอยู่เท่านั้นเอง ก็คือ

ข้อที่ 1

Pure Function คือ ฟังก์ชันที่ไม่ขึ้นอยู่กับค่าตัวแปรหรือไม่เปลี่ยนแปลงค่าตัวแปร (Variables) ที่อยู่นอก scope ของตัวมัน ตัวอย่างเช่น

ข้อที่ 2

Pure Function จะต้องสามารถคาดการณ์ (Predictability) ค่าที่จะ return ออกมาได้ จาก arguments ที่เราส่งเข้าไป หมายความว่าถ้าเราเรียกฟังก์ชั่นเดิมโดยส่งค่า arguments เข้าไปเหมือนเดิม ไม่ว่าจะเรียกฟังก์ชั่นนั้นกี่ครั้ง ค่าที่ return ออกมายังไงก็ต้องได้ค่าเหมือนเดิมทุกครั้ง

จบละครับ บทความนี้ 555555

https://giphy.com/gifs/well-done-bKBM7H63PIykM/download

ยังๆๆๆๆ อย่าพึ่งปิดนะครับ 5555 มาดูตัวอย่างกันซักนิดนึง

ตัวอย่าง

  • ตัวอย่างข้อที่ 1

ลองพิจราณา code 2 ชุดนี้

ตัวอย่าง Impure Function และ Pure Function ข้อที่ 1

ที่ impureFunc ไม่เป็น pure function นั่นก็เพราะว่าค่าที่จะ return ออกมาจาก impureFunc นั้นขึ้นอยู่กับตัวแปร bar ซึ่งอยู่นอก scope ของ impureFunc ถ้าค่าของ bar เปลี่ยนก็จะทำให้ค่าที่ impureFunc return ออกมานั้นเปลี่ยนไปด้วยเช่นกัน

ส่วนถ้าอยากจะทำให้เป็น pure function ก็แค่ส่งค่า bar เข้าไปและไปทำการคำนวณด้านในเหมือน function pureFunc ใน code ชุดที่สองด้านบน

  • ตัวอย่างข้อที่ 2
ตัวอย่าง Impure Function และ Pure Function ข้อที่ 2

จาก code จะเห็นได้ว่า impureFunc นั้นไม่เป็น pure function เนื่องจากเมื่อเรียก impureFunc ครั้งแรกในบรรทัดที่ 9 ค่าของ data.value จะถูกเปลี่ยนไป(บรรทัดที่ 5) โดย impureFunc นั่นทำให้เมื่อเราเรียก impureFunc ครั้งต่อไปและส่งค่า argument เป็น data เข้าไปเหมือนเดิมนะ แต่ค่าที่ได้ออกมากลับไม่เหมือนเดิม นั่นทำให้ฟังก์ชัน impureFunc ไม่เป็น pure function ครับ

ตัวอย่าง Impure Function และ Pure Function ข้อที่ 2

ในตัวอย่างนี้จะเห็นได้ว่าเราไม่ได้ส่งค่า data(Object) ไปแต่ส่งค่า data.value(Number) เข้าไปแทน ทำให้ไม่ว่าเราจะเรียก pureFunc โดยส่ง data.value เข้าไปกี่ครั้ง ก็จะได้ค่า result ออกมาเป็น 40 เท่าเดิม นี่แหละครับคือสิ่งเล็กๆที่เรียกว่า Pure Function

ข้อดีของ Pure Function

  1. Pure Function จะไม่ส่งผลกระทบกับระบบที่เราเขียน ในกรณีที่เราเขียนระบบที่ใหญ่ขึ้นๆ บางทีเราลืมว่าเห้ยตัวแปรนี้มันมีผลกระทบกับ function นี้หรือ function นี้เป็นตัวไปเปลี่ยนตัวแปรนี้ หรือ บลาๆๆ ทำให้ code ของเราดูซับซ้อน ดูแลต่อยาก อ่านละ งง
  2. Pure Function จะทำให้ code ดูง่าย อ่านง่าย ยืดยุ่นและเคลีย
  3. ลำดับของการ execute Pure Function ไม่มีผลต่อระบบ นั่นหมายความว่าเราไม่ต้องสนใจเลยว่า function ไหนจะต้อง execute ก่อนหรือหลัง
  4. Pure Function ทำให้การทำ Unit test เป็นเรื่องง่ายมากก เพราะเราสนใจแค่ input และ output ก็จบ

เห็นข้อดีกันขนาดนี้แล้วเพราะฉะนั้นเรามาเริ่มเขียน Pure Function กันนะครับ เพื่ออนาคตที่ดีกว่า (นี่ไม่ได้ค่าโฆษณานะ 5555) สำหรับบทความนี้ก็ขอจบแค่นี้ละกันนะครับ จบจริงๆละ ไปก่อนนะครับแล้วเจอกัน

reference : http://www.nicoespeon.com/en/2015/01/pure-functions-javascript/

อ่านบทความกันจบแล้วหวังว่าทุกคนจะได้ความรู้เพิ่มเติมกันนะครับ ผิดถูกยังไงต้องขออภัยไว้ ณ ที่นี่ด้วย แล้วเจอกันใหม่ในบทความหน้าๆๆๆๆๆๆ นะครับ :)

Developers, Never Stop Learning.

--

--