หรือพวก Functional Language ทั้งหลาย
ก็คือเราจะเจอแนวคิดบางอย่างที่เราไม่เคยคิดมาก่อน
อย่างวันนี้เจอ วิธีการ define operator
&&
(and)กับ operator
||
(or) ของ Haskell-- define Type --
-- operator นี้รับ parameter เป็น boolean, boolean
-- และ return เป็น type boolean
(&&), (||) :: Bool -> Bool -> Bool
False && x = False
True && x = x
False || x = x
True || x = True
จะเห็นว่ามีการใช้ Pattern Matching เข้ามาใช้
x
ก็คือ Any Valueเทียบกับพวก imperative language
ในที่นี้จะยกตัวอย่าง Java แล้วกัน
เวลานึกถึง operator พวกนี้ (and ,or) ว่า compiler จะแปลงมันอย่างไร
มันจะลงเอยไปที่ระดับ assembly
ที่จะมี compare กับการ jump
ลองดูประโยคนี้ข้อง java
return x && y;
เมื่อแปลงเป็น byte code
L0 (0)
LINENUMBER 5 L0
ILOAD 1: x # load ค่าใน local var ขึ้น operand stack
IFEQ L1 # ถ้าเป็น 0 กระโดดไป L1
ILOAD 2: y
IFEQ L1
ICONST_1 # return true
IRETURN
L1 (7)
ICONST_0 # return false
IRETURN
1 comment:
python ก็เป็นแบบ Haskell เหมือนกันครับ
ซึ่งบางคนจะใช้เป็น Trick ในการทำ ternary boolean expression (iif หรือ << a ? b : c >>) ซึ่ง python<=2.4 ไม่มี (จะมี << b if a else c >> ใน 2.5)
เช่น
>>> def total(x,y): return (x or 0) + (y or 0)
>>> total(3,None)
3
>>> total(3,4)
7
Post a Comment