iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 3
0
Modern Web

學會Elm寫前端系列 第 3

03 瞭解 Elm 裡的 function

  • 分享至 

  • xImage
  •  

everything is an expression

我不太知道expression 在中文要怎麼翻?叫做表達式好了。在elm或是其他functional programming 的世界裡,沒有什麼物件的概念,你可以想成全部的東西都是表達式。而表達式會被elm判讀成一個數值。

expression evaluate
"hello " ++ "world" "hello world"
2^2 4
13 13

if conditions

在elm的世界裡,條件式的寫法只有一種,叫 if...then...else 。沒了。 注意沒有 "truthiness" 這種事,也沒有像js 裡的 else if。

if (condition1)
   statement1
else if (condition2)
   statement2
else if (condition3)
   statement3

上述的例子在elm要寫成:

if (condition1) then
  statement1
else (if condition2 then statement2)
else (if condition3 then statment 3)
else
  statement4

而在javascript 裡condition 可以是"hello world"單一的string 或是數字;而在elm 裡面, if 之後只能是 Bool(也就是true or false)

Functions

define a functions

耶,終來來到functional programming 最重要的function了。我們來寫一個function吧。你可以在elm-repl上試試,

> isHello word = if word == "hello" then "hello" else "hey, buddy"
<function> : String -> String
> isHello "god"
"hey, buddy" : String
> isHello "hello"
"hello" : String

每個expression 都會有 Type ,之後我們再詳談,你輸入一個expression,如果你沒有定義 Type , elm 會幫你推測你的 Type 是什麼。 我們的 isHello 是我們定義的 function 名稱,接著 空一格 的 word 是我們要輸入的值,在 = 之後,就是我們要這個 function 做得事情。整個function,就像是小時候上數學課 f(x) = a x + b ,是不是一樣!

let expression

什麼時候要用 let 來建立 local scope 呢? 請看以下例子

pluralize singular plural quantity =
    if quantity == 1 then
        toString quantity ++ " " ++ singular
    else
        toString quantity ++ " " ++ plural
pluralize singular plural quantity =
    let prefix =
            toString quantity ++ " " 
    in
        if quantity == 1 then
            prefix ++ singular
        else
            prefix ++ " " ++ plural

你看,這樣是不是就不用要兩次 tostring quantity ++ " "

anonymous functions

很多時候,function 可以當成一個值被傳入,但你不想要替它在取一個名字,我們只是要用而已。那怎麼辦?

> \ w x y -> w + x +y
<function> : number -> number -> number -> number

我們用了三個值 w, x, y 讓他們相加。不過因為是沒有命名的,之後要呼叫就不太能叫。但如果你要定義一個functions, 裡頭的值是另外一個function, 這種時候,我們常常就會用anonymous function。

infix vs prefix

到這裡,你就懂了,function 就是空一格代入值,everything is a kind of function。那 1 + 1 呢? 怎麼辦?怎麼會這樣?,你答對了。不信你輸入: (+) 1 1 ,答案也一樣對不對?我們常用的 function , 是prefix function, 而這類的 加減乘除,我們叫 infix 也就是說可以放在輸入值的中間,如果要放到前面,就要加個刮號 () ,不信你來看 elm-doc 裡的定義:

(+) : number -> number -> number (-) : number -> number -> number (*) : number -> number -> number


上一篇
02 Elm 的安裝
下一篇
04 Elm的資料結構
系列文
學會Elm寫前端30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言