Functional programming ชื่อไทยคือ “การโปรแกรมเชิงฟังก์ชั่น” ชื่อย่อ FP เป็นแนวคิดหนึ่งของการเขียนโปรแกรม (programming paradigm) ชื่อขึ้นต้นด้วย functional แต่ไม่ได้มีดีแค่ประกาศ function ปุ๊บเสร็จ แล้วเรียกใช้ มันมีเบื้องลึกมากกว่านั้นแน่ๆ
🤔 มันจะต่างจากการเขียนโปรแกรมทีละสเตป ตามลำดับก่อนหลัง มีการวนลูป ที่เน้นแก้ state ของโปรแกรมเป็นหลัก
แต่แนวทาง functional programming จะไม่แก้ state ของโปรแกรมเลย ไม่มีการวนลูบ (ใช้ recursion แทน)
ซึ่งแนวคิดก็ต้องเน้นสร้างฟังก์ชั่นนั่นแหละ แต่หลักสำคัญต้องออกแบบให้หลีกเลี่ยง side-effect (ผลข้างเคียง) ที่จะเกิดต่อ function ตัวเอง และตัวอื่น โดยมีหลักยึด 2 อย่างใหญ่คือ
👉 1) function ที่สร้างขึ้นมา เมื่อมีอินพุตค่าเดิมส่งไปหา (เป็นค่าอากิวเมนต์) ไม่ว่าจะกี่ครั้งก็ตาม function จะรีเทิร์นค่าออกมาเหมือนเดิมทุกครั้ง ...(ไอเดียมาจากฟังก์ชั่นในทางคณิตศาสตร์เลยครับ)
เช่น
func(1); // เรียกครั้งที่ 1 ก็จะได้ค่ารีเทิร์นออกมาเป็น 30
func(1); // เรียกครั้งที่ 2 ก็จะได้ค่ารีเทิร์นออกมาเป็น 30 เหมือนเดิม
func(1); // เรียกครั้งที่ 3 ก็จะได้ค่ารีเทิร์นออกมาเป็น 30 เหมือนเดิม
👉 2) function ต้องไม่ไปเปลี่ยนแปลงค่าของตัวแปรจำพวก global variable หรือ static variable หรือตัวแปรที่อยู่ข้างนอก function ...เพื่อไม่ให้ function อื่นได้รับผลกระทบ
ถ้า function ที่เราประกาศไว้ มีคุณสมบัติ 2 อย่างที่ว่านี้ ก็จะเรียกว่า pure function (ฟังก์ชั่นบริสุทธ์แท้ๆ) 👌
สำหรับอีกคุณลักษณะหนึ่งที่จะไม่กล่าวถึงไม่ได้เลยก็คือ
👉 3) First-class function และ Higher-order function
คำว่า first-class function มาจาก "first class citizen" ที่หมายถึง "พลเมืองชั้นหนึ่ง" ดังนั้น first-class function จะหมายถึง ฟังก์ชั่นเป็นพลเมืองชั้นหนึ่งจริงๆ เลยนะ
คุณสมบัตินี้ function จะถูกมองเป็นข้อมูลประเภทหนึ่ง ไม่ต่างจากข้อมูลตัวเลข สตริง บูลีน ด้วยเหตุนี้จึงสามารถนำ function ไปกำหนดค่าให้กับตัวแปรยังได้เลย เช่น
x = function(){ .....}
ส่วนคุณสมบัติ Higher-order function:
คุณสมบัตินี้หมายถึง เราสามารถใช้ function ส่งไปเป็นค่าอากิวเมนต์แก่ function ตัวอื่น หรือ function จะรีเทิร์นออกมาจาก function ตัวอื่นออกมาก็ได้ด้วย เช่น
- ส่ง function_A เป็นค่าอากิวเมนต์ไปให้ function_X(function_A);
- จากนั้น function_X() ก็จะสร้าง function_Y แล้วรีเทิร์นมันออกมาได้
😜 ===ประโยชน์ functional programming===
🔥 เอาไปเขียนโปรแกรมโดยไม่มีการวนลูป เช่น ไม่ต้องมานั่งเขียน for … หรือ while… วนลูป เพื่อเข้าถึงข้อมูลโครงสร้างพวก array , list ฯลฯ เป็นต้น
🔥 การทำ currying หมายถึงทำให้ฟังก์ชั่น จากเดิมที่มี parameter หลายตัวให้เหลือแค่ตัวเดียว ด้วยการส่งผลลัพธ์เป็น function ที่รับ Parameter ที่เหลือ ...ใช้เทคนิค closure
🔥 หรือจะทำ function Composition (เอาฟังก์ชั่นมาประกอบกัน)
🔥 หรือจะเอาไปใช้เขียนโปรแกรมแบบ parallel computing (โปรแกรมคู่ขนาน)
🔥 หรือจะเขียนโปรแกรมแบบ asynchronous โดยที่โค้ดหลักไม่ต้องรอการประมวลผลฝั่ง I/O ให้แล้วเสร็จ โค้ดหลักสามารถข้ามไปยังบรรทัดถัดไปก่อนได้เลย
🔥 Testability — ผลพลอยได้ก็คือ เอาแนวคิดนี้ไปใช้ทำ test function ได้ง่าย โดยแต่ละการ test จะเป็นอิสระต่อกัน เมื่อใช้วิธีการเดิมในการทดสอบ 10 ครั้ง ก็ควรได้ผลเหมือนเดิม 10 ครั้ง เป็นต้น
++++ 🤔 ++++++
เมื่อเปรียบเทียบกับแนวคิด OOP (โปรแกรมเชิงวัตถุ object-oriented programming)
ถ้าโจทย์ปัญหาเป็น parallel computing หรือ asynchronous การใช้แนวคิด functional programming ดูแล้วคล่องแคล่วปราดเปรียวไม่ยุ่งยาก
เนื่องจากแนวคิด functional programming ไม่มีอะไรซับซ้อนมากนัก เขียนโปรแกรมก็จะกระชับ ง่าย...ง๊าย เมื่อเทียบกับ OOP ที่โค้ดจะเยอะกว่า เพราะมี class มากมาย ยิ่งถ้า inheritance โดยให้มีการสืบทอดสมาชิกหลายชั้น ก็จะสับสนตาลาย มึนงงได้ คงต้องพึ่ง IDE ให้เป็นพี่เลี้ยงช่วยแนะนำว่ามีสมาชิกอะไรที่สืบทอดมา
แต่จุดเด่นเรื่อง OOP จะมีความเป็น Modularity ที่สูง โค้ดที่เขียนเป็นอ็อบเจ็กต์แต่ละตัวจะเป็นอิสระต่อกัน เนื่องจากข้อมูลหรือ state ซึ่งอยู่ภายในตัวอ็อบเจ็กต์เอง จะมีเป็นของใครของมัน ขณะเดียวกันแต่ละอ็อบเจ็กต์จะปฏิสัมพันธ์กันได้ สามารถเอาอ็อบเจ็กต์ที่มีอยู่แล้วมา reuse ใช้ได้ง่าย รวมทั้งถอดเข้าถอดออกขณะโปรแกรม run time
แล้วแต่สถานการณ์ว่าจะใช้แนวทางเขียนโปรแกรมแบบไหน
แต่ก็ยอมรับว่าบางทีเขียนแบบ functional programming ก็ยากต่อการทำความเข้าใจ เพราะโค้ดมันสั้นกระชับเกิ๊น
ยิ่งหลายภาษาโปรแกรมมิ่งสมัยใหม่ในปัจจุบันนี้ มีการแทรกแนวคิด functional programming เข้ามา นอกเหนือจากแนวคิด OOP เช่น JavaScript, Python, Java, C#, Swift, Kotlin แต่ก็อาจประยุกต์แนวคิดนี้ได้ไม่ 100% มากนัก
จะไม่เหมือนบ้างภาษาเช่น Haskell ที่มาพร้อมกับ immutable data structure หมายถึงข้อมูลที่ไม่สามารถแก้ไขค่าได้เลย จึงทำให้ function กลายเป็น functional programming แท้ๆ (pure function)
✍ สรุป แนวคิดนี้ไม่ได้เรื่องใหม่มีมานานก่อนบางคน ...อุ้แว ...อุ้แวเกิดเสียอีก แต่ตอนโน่นแนวคิดนี้ยังไม่ดังเปรี้ยงเหมือน OOP คนที่เขียนภาษา JavaScript รวมไปถึง Node.js ย่อมใช้หลักการนี้อย่างไม่รู้ตัว ยิ่งภาษาสมัยใหม่หลายตัวก็ยอมรับแนวคิด functional programming เข้ามาในภาษาเรียบร้อยแล้ว ไม่มีนี้ถือว่าแปลกมาก
--------
เขียนโดย โปรแกรมเมอร์ไทย thai programmer
immutable x 在 โปรแกรมเมอร์ไทย Thai programmer Facebook 八卦
Functional programming ชื่อไทยคือ “การโปรแกรมเชิงฟังก์ชั่น” ชื่อย่อ FP เป็นแนวคิดหนึ่งของการเขียนโปรแกรม (programming paradigm) ชื่อขึ้นต้นด้วย functional แต่ไม่ได้มีดีแค่ประกาศ function ปุ๊บเสร็จ แล้วเรียกใช้ มันมีเบื้องลึกมากกว่านั้นแน่ๆ
🤔 มันจะต่างจากการเขียนโปรแกรมทีละสเตป ตามลำดับก่อนหลัง มีการวนลูป ที่เน้นแก้ state ของโปรแกรมเป็นหลัก
แต่แนวทาง functional programming จะไม่แก้ state ของโปรแกรมเลย ไม่มีการวนลูบ (ใช้ recursion แทน)
ซึ่งแนวคิดก็ต้องเน้นสร้างฟังก์ชั่นนั่นแหละ แต่หลักสำคัญต้องออกแบบให้หลีกเลี่ยง side-effect (ผลข้างเคียง) ที่จะเกิดต่อ function ตัวเอง และตัวอื่น โดยมีหลักยึด 2 อย่างใหญ่คือ
👉 1) function ที่สร้างขึ้นมา เมื่อมีอินพุตค่าเดิมส่งไปหา (เป็นค่าอากิวเมนต์) ไม่ว่าจะกี่ครั้งก็ตาม function จะรีเทิร์นค่าออกมาเหมือนเดิมทุกครั้ง ...(ไอเดียมาจากฟังก์ชั่นในทางคณิตศาสตร์เลยครับ)
เช่น
func(1); // เรียกครั้งที่ 1 ก็จะได้ค่ารีเทิร์นออกมาเป็น 30
func(1); // เรียกครั้งที่ 2 ก็จะได้ค่ารีเทิร์นออกมาเป็น 30 เหมือนเดิม
func(1); // เรียกครั้งที่ 3 ก็จะได้ค่ารีเทิร์นออกมาเป็น 30 เหมือนเดิม
👉 2) function ต้องไม่ไปเปลี่ยนแปลงค่าของตัวแปรจำพวก global variable หรือ static variable หรือตัวแปรที่อยู่ข้างนอก function ...เพื่อไม่ให้ function อื่นได้รับผลกระทบ
ถ้า function ที่เราประกาศไว้ มีคุณสมบัติ 2 อย่างที่ว่านี้ ก็จะเรียกว่า pure function (ฟังก์ชั่นบริสุทธ์แท้ๆ) 👌
สำหรับอีกคุณลักษณะหนึ่งที่จะไม่กล่าวถึงไม่ได้เลยก็คือ
👉 3) First-class function และ Higher-order function
คำว่า first-class function มาจาก "first class citizen" ที่หมายถึง "พลเมืองชั้นหนึ่ง" ดังนั้น first-class function จะหมายถึง ฟังก์ชั่นเป็นพลเมืองชั้นหนึ่งจริงๆ เลยนะ
คุณสมบัตินี้ function จะถูกมองเป็นข้อมูลประเภทหนึ่ง ไม่ต่างจากข้อมูลตัวเลข สตริง บูลีน ด้วยเหตุนี้จึงสามารถนำ function ไปกำหนดค่าให้กับตัวแปรยังได้เลย เช่น
x = function(){ .....}
ส่วนคุณสมบัติ Higher-order function:
คุณสมบัตินี้หมายถึง เราสามารถใช้ function ส่งไปเป็นค่าอากิวเมนต์แก่ function ตัวอื่น หรือ function จะรีเทิร์นออกมาจาก function ตัวอื่นออกมาก็ได้ด้วย เช่น
- ส่ง function_A เป็นค่าอากิวเมนต์ไปให้ function_X(function_A);
- จากนั้น function_X() ก็จะสร้าง function_Y แล้วรีเทิร์นมันออกมาได้
😜 ===ประโยชน์ functional programming===
🔥 เอาไปเขียนโปรแกรมโดยไม่มีการวนลูป เช่น ไม่ต้องมานั่งเขียน for … หรือ while… วนลูป เพื่อเข้าถึงข้อมูลโครงสร้างพวก array , list ฯลฯ เป็นต้น
🔥 การทำ currying หมายถึงทำให้ฟังก์ชั่น จากเดิมที่มี parameter หลายตัวให้เหลือแค่ตัวเดียว ด้วยการส่งผลลัพธ์เป็น function ที่รับ Parameter ที่เหลือ ...ใช้เทคนิค closure
🔥 หรือจะทำ function Composition (เอาฟังก์ชั่นมาประกอบกัน)
🔥 หรือจะเอาไปใช้เขียนโปรแกรมแบบ parallel computing (โปรแกรมคู่ขนาน)
🔥 หรือจะเขียนโปรแกรมแบบ asynchronous โดยที่โค้ดหลักไม่ต้องรอการประมวลผลฝั่ง I/O ให้แล้วเสร็จ โค้ดหลักสามารถข้ามไปยังบรรทัดถัดไปก่อนได้เลย
🔥 Testability — ผลพลอยได้ก็คือ เอาแนวคิดนี้ไปใช้ทำ test function ได้ง่าย โดยแต่ละการ test จะเป็นอิสระต่อกัน เมื่อใช้วิธีการเดิมในการทดสอบ 10 ครั้ง ก็ควรได้ผลเหมือนเดิม 10 ครั้ง เป็นต้น
++++ 🤔 ++++++
เมื่อเปรียบเทียบกับแนวคิด OOP (โปรแกรมเชิงวัตถุ object-oriented programming)
ถ้าโจทย์ปัญหาเป็น parallel computing หรือ asynchronous การใช้แนวคิด functional programming ดูแล้วคล่องแคล่วปราดเปรียวไม่ยุ่งยาก
เนื่องจากแนวคิด functional programming ไม่มีอะไรซับซ้อนมากนัก เขียนโปรแกรมก็จะกระชับ ง่าย...ง๊าย เมื่อเทียบกับ OOP ที่โค้ดจะเยอะกว่า เพราะมี class มากมาย ยิ่งถ้า inheritance โดยให้มีการสืบทอดสมาชิกหลายชั้น ก็จะสับสนตาลาย มึนงงได้ คงต้องพึ่ง IDE ให้เป็นพี่เลี้ยงช่วยแนะนำว่ามีสมาชิกอะไรที่สืบทอดมา
แต่จุดเด่นเรื่อง OOP จะมีความเป็น Modularity ที่สูง โค้ดที่เขียนเป็นอ็อบเจ็กต์แต่ละตัวจะเป็นอิสระต่อกัน เนื่องจากข้อมูลหรือ state ซึ่งอยู่ภายในตัวอ็อบเจ็กต์เอง จะมีเป็นของใครของมัน ขณะเดียวกันแต่ละอ็อบเจ็กต์จะปฏิสัมพันธ์กันได้ สามารถเอาอ็อบเจ็กต์ที่มีอยู่แล้วมา reuse ใช้ได้ง่าย รวมทั้งถอดเข้าถอดออกขณะโปรแกรม run time
แล้วแต่สถานการณ์ว่าจะใช้แนวทางเขียนโปรแกรมแบบไหน
แต่ก็ยอมรับว่าบางทีเขียนแบบ functional programming ก็ยากต่อการทำความเข้าใจ เพราะโค้ดมันสั้นกระชับเกิ๊น
ยิ่งหลายภาษาโปรแกรมมิ่งสมัยใหม่ในปัจจุบันนี้ มีการแทรกแนวคิด functional programming เข้ามา นอกเหนือจากแนวคิด OOP เช่น JavaScript, Python, Java, C#, Swift, Kotlin แต่ก็อาจประยุกต์แนวคิดนี้ได้ไม่ 100% มากนัก
จะไม่เหมือนบ้างภาษาเช่น Haskell ที่มาพร้อมกับ immutable data structure หมายถึงข้อมูลที่ไม่สามารถแก้ไขค่าได้เลย จึงทำให้ function กลายเป็น functional programming แท้ๆ (pure function)
✍ สรุป แนวคิดนี้ไม่ได้เรื่องใหม่มีมานานก่อนบางคน ...อุ้แว ...อุ้แวเกิดเสียอีก แต่ตอนโน่นแนวคิดนี้ยังไม่ดังเปรี้ยงเหมือน OOP คนที่เขียนภาษา JavaScript รวมไปถึง Node.js ย่อมใช้หลักการนี้อย่างไม่รู้ตัว ยิ่งภาษาสมัยใหม่หลายตัวก็ยอมรับแนวคิด functional programming เข้ามาในภาษาเรียบร้อยแล้ว ไม่มีนี้ถือว่าแปลกมาก
--------
เขียนโดย โปรแกรมเมอร์ไทย thai programmer
immutable x 在 每日幣研 Facebook 八卦
【日本動漫主題NFT跨鏈平台-PolkaFantasy】
NFT 市場正處於一個初期快速成長的階段,不管是遊戲性、數位收藏品的種類或甚至是結合 DeFi 的玩法也都更加豐富,我們不難看出 NFT 比起一開始橫空出世的 Cryptokitties 時代,已經增添了更多元素。
當日本遊戲文化遇上 NFT,會有哪些火花呢 😎 一起來看看吧
#cryptoresearch_project #polkafantasy #nft #japan
🟡 現存 NFT 市場中有著幾個痛點以及市場機會
1. 大部分交易平台在以太坊上,交易手續費太高
2. NFT 實用性局限
3. 目前還沒有針對日本文化族群所推出的相關交易市場
4.還沒有專注於 NFT 的錢包出現
🟡 項目亮點
- 團隊陣容堅強(日本遊戲界(Bandai 以及 KOF 拳皇發行商等公司的高管)顧問+ 區塊鏈背景)
- 日本主題 NFT 跨鏈交易市場
- 專注於 NFT 的整合式錢包
🟡 PolkaFantasy 合作夥伴
- Immutable X :Layer 2 NFT 交易平台
- NFTY LABS :打造 NFT 與藝術創作者、社群之間的橋樑
- NetVRk :透過虛擬實境打造並幫助你的創作變現
- Roseon Finance:跨鏈整合 NFT+ DeFi 手機端應用
🟡 項目代幣 $XP 功能介紹
1. 治理代幣:投票喜歡的NFT 創作
2. NFT 購買折扣
3. 平台收益分成
🟡 PolkaFantasy 系列活動
贏得 ETH 女神獲5000u 私募代幣認購權!
開始時間:6月22號下午六點,持續五天
活動規則:透過社群平台展現你對動漫主題的熱愛
📝:報名表單連結:https://docs.google.com/forms/d/e/1FAIpQLSfeHnPNGTlMoGj-V59SSNopEl_dUesWGDWH4dILFfXdGj9NqA/viewform ✨
------------------------------
📍 對於跨鏈的 NFT 資產有興趣嗎?
歡迎分享給我們知道👇
#cryptowesearch #cryptonews btc #bitcoin #cryptocurrency #ETH #defi #bunny #bsc #虛擬貨幣 #投資 #新手投資 #交易觀念 #虛擬貨幣 #區塊鏈 #比特幣 #財務自由 #好康 #金融 #定投 #幣圈 #hk #taiwan
immutable x 在 2022具爆炸性增長的潛力遊戲公鏈大分享! Immutable X 的八卦
GameFi 生態正崛起,遊戲玩家紛紛躍躍欲試想要埋伏更早的遊戲 進而實現play to earn 玩遊戲也能賺錢 ,而埋伏哪些遊戲相關幣種會是對於時間不夠或是 ... ... <看更多>