จากที่ @lewcpe คอมเมนท์ไว้ในตอนก่อน มานั่งคิดๆ ดูว่าทำไม functional programming ถึงไม่ได้รับความนิยมเท่าไหร่
คิดว่าสาเหตุใหญ่ๆ น่าจะเป็นเพราะปรกติแล้ว มนุษย์เราจะคิดการทำงานทาง "ซ้าย -> ขวา" คิดจากส่วนที่เล็กสุดออกไปยังระดับที่ใหญ่ขึ้นเรื่อยๆ เช่นเขียนโปรแกรมอย่างนี้
sh:
echo 'hello to the old world' | tr ' ' '\n' | sort -r | paste -sd ' 'ruby:
puts 'hello to the old world'.split.sort.reverse.join ' 'แต่ในการเขียนโปรแกรมแบบ functional programming การทำงานของจะเป็นในทิศทาง "ซ้าย <- ขวา" แทน ซึ่งขัดกับความรู้สึกของเรา
python:
print(' '.join(reversed(sorted('hello to the old world'.split()))))haskell:
print (join " " . reverse . sort . splitOn " ") "hello to the old world"
อีกเรื่องที่ยากคงเป็นเพราะไม่มี for/while loop มีแต่ recursion ให้ใช้ อันนี้สาย imperative ทำใจลำบากพอควรเลย
ส่วนเรื่องอื่นๆ อย่าง immutable คงไม่มีปัญหาเท่าไหร่ อันที่จริงถ้าไม่สนว่าจะ optimize กันสุดๆ ไม่ว่าจะเขียนด้วยภาษาอะไรก็ควรยึดเรื่องนี้ไว้หน่อย มันทำให้ bug งี่เง่าหายไปได้หลายตัวเลยหละ :3
เพราะมันไม่เท่ห์ฮะ :D
ReplyDeleteไอ้ python join นี่มันเป็น riddle มากเลยนะ มือใหม่เขียนผิดกันกระจายอ่ะ
ReplyDeleteแรกๆ นี่เขียนเป็น ['a', 'b', 'c'].join() ตลอด 555+
Deleteคือมันจะไม่แปลกถ้า join กับ split มันแนวเดียวกัน
Deleteแต่อันนี้มันไม่เหมือนกัน เลยงงๆ