《Elixir 101》Hello World

更新於 2024/10/28閱讀時間約 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
本篇就到此結束了~
avatar-img
1會員
5內容數
身為一個軟體工程師,在現今如此快速變化的世界中,該如何確保自生不被滅亡呢?
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
你可能也想看
Google News 追蹤
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
這篇文章介紹了隱藏在玉竹商圈的小館「Hello明洞美食」,提供多樣的韓式料理,如石鍋拌飯、炸豬排炸醬麵及炒年糕等,價格實惠,環境氛圍輕鬆活潑,特別受年輕人喜愛。文章詳細描述了幾道招牌菜品,強調其獨特風味和份量,讓喜愛韓國料理的食客感到滿足,是聚餐的好去處。
Hello Rummy APK Introduction to Hello Rummy APK Rummy has long been a favorite among card game fans, combining strategy, skill, and a bit of luck.
從小我們都以為蜘蛛就是長得蜘蛛樣,一個小圓結著ㄧ個大圓配著8隻腳,教科書説「蜘蛛有頭胸和腹部兩部分,頭胸有一對觸肢幾隻單眼+腹部有8隻腳、腹部下有絲疣會吐出絲來。」事實上到目前全世界登記在冊的蜘蛛種類好像有三萬多種,而且與我們的認知已有很大的差異,蜘蛛都回吐絲,但好像絕大多數的蜘蛛不織網。而我們這個
Thumbnail
這本小說閱讀起來情節流暢,讓人捨不得睡一直看下去。充滿淚水的結局讓我完全著迷,期待下一章節的發展。除了主角的內心掙扎外,四姐妹與媽媽之間的連結也引起了我的興趣,父親的離世對於他們之間的關係帶來了影響。整體而言,我個人非常推薦這本書,給予五顆星的評價。
Thumbnail
Hello👋🏻準備好迎接全新的自己了嗎! Hello運動工作室,「54燃脂王🔥」燃燒你的卡路里,等你來報名🫵🏻🫵🏻 私人教練量身打造專屬訓練計劃每一滴汗水都得到最大的回報!! 不要猶豫,現在就是參加活動改變的時刻! 運動能塑造完美的體態,更能提升整體健康和生活品質,還有機會
Thumbnail
展覽中我們似乎可以從作品中看出一些東西、但又不那麼明確,覺得他就是個色彩斑斕的抽象畫,但又依稀在其中看到一些具體的形象。我覺得那就像是記憶畫面在我們心靈裡沉積,並變化為精神、變成情感的一個過程。
Thumbnail
宇宙是嚴格的生命教練,又是溫柔地守護母親; 所說的話,祂都有在聽,並提醒著此刻真正要學習的就是靜觀、順流。
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
這篇文章介紹了隱藏在玉竹商圈的小館「Hello明洞美食」,提供多樣的韓式料理,如石鍋拌飯、炸豬排炸醬麵及炒年糕等,價格實惠,環境氛圍輕鬆活潑,特別受年輕人喜愛。文章詳細描述了幾道招牌菜品,強調其獨特風味和份量,讓喜愛韓國料理的食客感到滿足,是聚餐的好去處。
Hello Rummy APK Introduction to Hello Rummy APK Rummy has long been a favorite among card game fans, combining strategy, skill, and a bit of luck.
從小我們都以為蜘蛛就是長得蜘蛛樣,一個小圓結著ㄧ個大圓配著8隻腳,教科書説「蜘蛛有頭胸和腹部兩部分,頭胸有一對觸肢幾隻單眼+腹部有8隻腳、腹部下有絲疣會吐出絲來。」事實上到目前全世界登記在冊的蜘蛛種類好像有三萬多種,而且與我們的認知已有很大的差異,蜘蛛都回吐絲,但好像絕大多數的蜘蛛不織網。而我們這個
Thumbnail
這本小說閱讀起來情節流暢,讓人捨不得睡一直看下去。充滿淚水的結局讓我完全著迷,期待下一章節的發展。除了主角的內心掙扎外,四姐妹與媽媽之間的連結也引起了我的興趣,父親的離世對於他們之間的關係帶來了影響。整體而言,我個人非常推薦這本書,給予五顆星的評價。
Thumbnail
Hello👋🏻準備好迎接全新的自己了嗎! Hello運動工作室,「54燃脂王🔥」燃燒你的卡路里,等你來報名🫵🏻🫵🏻 私人教練量身打造專屬訓練計劃每一滴汗水都得到最大的回報!! 不要猶豫,現在就是參加活動改變的時刻! 運動能塑造完美的體態,更能提升整體健康和生活品質,還有機會
Thumbnail
展覽中我們似乎可以從作品中看出一些東西、但又不那麼明確,覺得他就是個色彩斑斕的抽象畫,但又依稀在其中看到一些具體的形象。我覺得那就像是記憶畫面在我們心靈裡沉積,並變化為精神、變成情感的一個過程。
Thumbnail
宇宙是嚴格的生命教練,又是溫柔地守護母親; 所說的話,祂都有在聽,並提醒著此刻真正要學習的就是靜觀、順流。