《Elixir 101》Hello World

閱讀時間約 11 分鐘

最近開始接觸 Elixir 這門語言,語法風格接近 Ruby。而他有一種動靜皆備的特性,老實說還蠻吸引我的。

因為 Elixir 可以用副檔名來區別是要直譯還是編譯,而它的 Elixir 的檔名主要有三種:.ex .exs .beam
這三種檔名差異,可以直接看官方說明
In addition to the Elixir file extension .ex, Elixir also supports .exs files for scripting. Elixir treats both files exactly the same way, the only difference is in intention. .ex files are meant to be compiled while .exs files are used for scripting. When executed, both extensions compile and load their modules into memory, although only .ex files write their bytecode to disk in the format of .beam files.
Elixir 對於不管是 ex 或者是 exs 檔案,都會將他們編譯後執行;只是在 ex 檔案,Elixir 會將他們寫成 beam格式的二元組碼到硬碟。
不過就像當初接觸 JavaScript 一樣,開始踩了很多坑,並且 Elixir 中文文件並沒有很多,故且將這個學習過程記錄一下,為這門語言貢獻一絲心力。
而學程式語言免不其然傳統上要由 Hello World開始,所以本篇文章將介紹三種方式的 Elixir Hello Word,分別是直接輸入指令、模組引用以及執行檔案。

第一種:直接輸入指令

第一種方法就是在 Elixir 的互動介面 iex 中輸入 IO.puts("Hello World")
$ iex
Erlang/OTP 21 [erts-10.0.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]

Interactive Elixir (1.7.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> IO.puts("Hello World")
Hello World
:ok
iex(2)>
這裡要提一點是,在 iex 裡面有 IntelliSense
$ iex
Erlang/OTP 21 [erts-10.0.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]

Interactive Elixir (1.7.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> IO.
ANSI Stream StreamError
binread/1 binread/2 binstream/2
binwrite/1 binwrite/2 chardata_to_string/1
getn/1 getn/2 getn/3
gets/1 gets/2 inspect/1
inspect/2 inspect/3 iodata_length/1
iodata_to_binary/1 puts/1 puts/2
read/1 read/2 stream/2
warn/1 warn/2 write/1
write/2
iex(1)> IO.
當你輸入 IO.甚至是完全不輸入,然後按 TAB 之後,iex 就會提示有哪些語法可以使用,真是太聰明的。

第二種:執行檔案

第二種就是將 IO.puts("Hello World") 存成檔案來執行。
打開一個新的檔案,命名為hello.ex 接著在裡面輸入:
IO.puts("Hello World")
再來我們在命列裡面輸入 elixir hello.ex
$ elixir hello.ex
Hello World
成功了!

第三種:模組引用

至於要怎麼將 hello world 當一個模組來引用呢?首先我們必須先建立一個模組,在 Elixir 我們需要用 mix 來建立一個專案模組。
那我們就在終端機裡面輸入 mix new hello_world 這裡的 hello_world 是我們的專案模組名稱,
所以如果你專案名稱叫 hello_elixir 的話就要輸入 mix new hello_elixir。題外話,在 mix 他預設適用 snake case 的命名方式,所以如果用 - 連接的話,或者是用 camcel case,就會發生如下畫面:
$ mix new hello-world
** (Mix) Application name must start with a lowercase ASCII letter, followed by lowercase ASCII letters, numbers, or underscores, got: "hello-world". The application name is inferred from the path, if you'd like to explicitly name the application then use the "--app APP" option

$ mix new helloWorld
** (Mix) Application name must start with a lowercase ASCII letter, followed by lowercase ASCII letters, numbers, or underscores, got: "helloWorld". The application name is inferred from the path, if you'd like to explicitly name the application then use the "--app APP" option
輸入完後就會看到如下畫面:
$ mix new hello_world
* creating README.md
* creating .formatter.exs
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/hello_world.ex
* creating test
* creating test/test_helper.exs
* creating test/hello_world_test.exs

Your Mix project was created successfully.
You can use "mix" to compile it, test it, and more:

cd hello_world
mix test

Run "mix help" for more commands.
看到最後那句 Run "mix help" for more commands. 就知道完成了,接著我們就可以用慣用的編輯器,將這個專案打開。打開後可以發現長這樣的資料夾結構:
接著我們打開 lib/hellow_world.ex檔案,會發現裡面長這樣:
defmodule HelloWorld do
@moduledoc """
Documentation for HelloWorld.
"""

@doc """
Hello world.

## Examples

iex> HelloWorld.hello()
:world

"""
def hello do
:world
end
end
他很貼心在裡面告訴你這個東西要怎麼用,就是在 iex 裡面輸入 HelloWorld.hello 就可以使用 hello 這個方法。
至於要怎麼引用呢?就是先切換到 hello_world 資料夾底下,之後我們在終端機輸入 iex -S mix:
$ cd hello_world
$ iex -S mix
Erlang/OTP 21 [erts-10.0.5] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:1] [hipe] [dtrace]

Compiling 1 file (.ex)
Generated hello_world app
Interactive Elixir (1.7.2) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
會看到比先前多了兩行,這代表 Elixir 編譯了一個檔案,產生了叫做 hello_word 的模組:
Compiling 1 file (.ex)
Generated hello_world app
接著我們照他的說明打上 HelloWorld.hello():
iex(1)> HelloWorld.hello()
:world
iex(2)>
:ok! hello world
本篇就到此結束了~
1會員
5內容數
身為一個軟體工程師,在現今如此快速變化的世界中,該如何確保自生不被滅亡呢?
留言0
查看全部
發表第一個留言支持創作者!
你可能也想看
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
這本小說閱讀起來情節流暢,讓人捨不得睡一直看下去。充滿淚水的結局讓我完全著迷,期待下一章節的發展。除了主角的內心掙扎外,四姐妹與媽媽之間的連結也引起了我的興趣,父親的離世對於他們之間的關係帶來了影響。整體而言,我個人非常推薦這本書,給予五顆星的評價。
Thumbnail
Hello👋🏻準備好迎接全新的自己了嗎! Hello運動工作室,「54燃脂王🔥」燃燒你的卡路里,等你來報名🫵🏻🫵🏻 私人教練量身打造專屬訓練計劃每一滴汗水都得到最大的回報!! 不要猶豫,現在就是參加活動改變的時刻! 運動能塑造完美的體態,更能提升整體健康和生活品質,還有機會
Thumbnail
展覽中我們似乎可以從作品中看出一些東西、但又不那麼明確,覺得他就是個色彩斑斕的抽象畫,但又依稀在其中看到一些具體的形象。我覺得那就像是記憶畫面在我們心靈裡沉積,並變化為精神、變成情感的一個過程。
Thumbnail
宇宙是嚴格的生命教練,又是溫柔地守護母親; 所說的話,祂都有在聽,並提醒著此刻真正要學習的就是靜觀、順流。
Thumbnail
《飛輪細說從頭》101 飛輪故事的第101篇竟然是一個新會期的開始,2005年6月29日,WTC與AUTC兩會借用AUTC 開會的地方(台灣商務中心)舉辦Joint Installation Ceremony。這次的就職典禮,跳脫了傳統排排站的交接模式,反而像是歡樂嘉年華,兩會娛樂精銳盡出,搞笑不段
Thumbnail
1.加權指數與櫃買指數 週五的加權指數在非農就業數據開出來後,雖稍微低於預期,但指數仍向上噴出,在美股開盤後於21500形成一個爆量假突破後急轉直下,就一路收至最低。 台股方面走勢需觀察週一在斷頭潮出現後,週二或週三開始有無買單進場支撐,在沒有明確的反轉訊號形成前,小夥伴盡量不要貿然抄底,或是追空
Thumbnail
重點摘要: 1.9 月降息 2 碼、進一步暗示年內還有 50 bp 降息 2.SEP 上修失業率預期,但快速的降息速率將有助失業率觸頂 3.未來幾個月經濟數據將繼續轉弱,經濟復甦的時點或是 1Q25 季底附近
Thumbnail
近期的「貼文發佈流程 & 版型大更新」功能大家使用了嗎? 新版式整體視覺上「更加凸顯圖片」,為了搭配這次的更新,我們推出首次貼文策展 ❤️ 使用貼文功能並完成這次的指定任務,還有機會獲得富士即可拍,讓你的美好回憶都可以用即可拍珍藏!
Thumbnail
這本小說閱讀起來情節流暢,讓人捨不得睡一直看下去。充滿淚水的結局讓我完全著迷,期待下一章節的發展。除了主角的內心掙扎外,四姐妹與媽媽之間的連結也引起了我的興趣,父親的離世對於他們之間的關係帶來了影響。整體而言,我個人非常推薦這本書,給予五顆星的評價。
Thumbnail
Hello👋🏻準備好迎接全新的自己了嗎! Hello運動工作室,「54燃脂王🔥」燃燒你的卡路里,等你來報名🫵🏻🫵🏻 私人教練量身打造專屬訓練計劃每一滴汗水都得到最大的回報!! 不要猶豫,現在就是參加活動改變的時刻! 運動能塑造完美的體態,更能提升整體健康和生活品質,還有機會
Thumbnail
展覽中我們似乎可以從作品中看出一些東西、但又不那麼明確,覺得他就是個色彩斑斕的抽象畫,但又依稀在其中看到一些具體的形象。我覺得那就像是記憶畫面在我們心靈裡沉積,並變化為精神、變成情感的一個過程。
Thumbnail
宇宙是嚴格的生命教練,又是溫柔地守護母親; 所說的話,祂都有在聽,並提醒著此刻真正要學習的就是靜觀、順流。
Thumbnail
《飛輪細說從頭》101 飛輪故事的第101篇竟然是一個新會期的開始,2005年6月29日,WTC與AUTC兩會借用AUTC 開會的地方(台灣商務中心)舉辦Joint Installation Ceremony。這次的就職典禮,跳脫了傳統排排站的交接模式,反而像是歡樂嘉年華,兩會娛樂精銳盡出,搞笑不段