檢視原始碼 選用語法表
在本指南中,我們了解到 Elixir 語法允許開發人員在某些情況下省略分隔符號,以提高程式碼可讀性。例如,我們了解到括號是選用的
iex> length([1, 2, 3]) == length [1, 2, 3]
true
而且 do
-end
區塊等同於關鍵字清單
# do-end blocks
iex> if true do
...> :this
...> else
...> :that
...> end
:this
# keyword lists
iex> if true, do: :this, else: :that
:this
關鍵字清單使用 Elixir 的一般符號來分隔引數,其中我們使用逗號分隔每個鍵值對,每個鍵後面跟著 :
。在 do
區塊中,我們移除冒號、逗號,並使用新行分隔每個關鍵字。它們非常有用,原因正是它們在撰寫程式碼區塊時刪除了冗餘。我們大部分時間都使用區塊語法,但知道它們是等同的會很好。
這些便利性,我們在此稱為「選用語法」,允許語言語法核心變小,同時不犧牲程式碼的可讀性和表達力。在本章節中,我們將使用一小段範例程式碼來檢閱語言提供的四個規則。
逐步解說
使用以下程式碼
if variable? do
Call.this()
else
Call.that()
end
現在讓我們逐一移除便利性
do
-end
區塊等同於關鍵字if variable?, do: Call.this(), else: Call.that()
作為最後一個引數的關鍵字清單不需要方括號,但讓我們加上它們
if variable?, [do: Call.this(), else: Call.that()]
關鍵字清單與二元組清單相同
if variable?, [{:do, Call.this()}, {:else, Call.that()}]
最後,在函式呼叫中括號是選用的,但讓我們加上它們
if(variable?, [{:do, Call.this()}, {:else, Call.that()}])
完成了!這四個規則概述了 Elixir 中可用的選用語法。
為了了解這些規則為何重要,我們可以簡要地將 Elixir 與許多其他程式語言進行比較。大多數程式語言都有幾個關鍵字來定義方法、函式、條件式、迴圈等等。每個關鍵字都有其自己的語法規則。
然而,在 Elixir 中,這些語言功能都不需要特殊的「關鍵字」,而是全部從這組小規則建構而來。另一個好處是開發人員也可以以與語言本身一致的方式來擴充語言,因為設計和擴充語言的結構是相同的。我們在 「元程式設計」指南 中進一步探討這個主題。
在一天結束時,這些規則讓我們能夠撰寫
defmodule Math do
def add(a, b) do
a + b
end
end
而不是
defmodule(Math, [
{:do, def(add(a, b), [{:do, a + b}])}
])
每當您有任何問題時,這個快速演練都能讓您應付自如。
最後,如果您擔心何時套用這些規則,值得注意的是 Elixir 格式化程式會為您處理這些問題。大多數 Elixir 開發人員使用 mix format
任務,根據 Elixir 團隊和社群定義的一組明確規則,來格式化他們的程式碼庫。例如,mix format
始終會為函式呼叫新增括號,除非明確設定不這麼做。這有助於在組織和更廣泛的社群中,維護所有程式碼庫的一致性。