Elixir 初嘗試 4 -- 函數中的管道運算符

函數是幹嗎的

答案:進行數據轉化,獲得你想要的數據的的,舉個栗子
你有你們考試的成績單(數據),可是你想排個序(轉化),獲得一個成績排名(想要的數據)。
這個時候你可能須要一個排序的函數了。linux

函數長啥樣子

答案:函數

  • 匿名函數用fn關鍵字建立,形如fetch

fn 
  parameter-list -> body
  parameter-list -> body  ...
end
  • 命名函數必須寫在模塊裏面,用def聲明,形如命令行

defmodule ModuleName do
  def functionName(parameter-list) do
  ...
  end
end

其中body,以及do...end的部分就是函數體(代碼塊)code

如何編譯運行

假設咱們已經寫好一個模塊叫moduleA,而且把它保存爲moduleA.exs,裏面有一個模塊moduleA以及方法functionB,如何執行方法呢?排序

  • 初始進入命令行,未進入iex數學

iex moduleA.exs
iex>moduleA.functionB parameter-list
  • 已進入iexio

iex> c "moduleA.exs"
iex>moduleA.functionB parameter-list

如何寫漂亮的Elixir函數

函數就是作各類數據轉換,轉換的時候咱們須要依據必定的規則(流程控制)進行數據的變換(運算)
其中流程控制有咱們以前提到過的模式匹配,哨兵子句,還有咱們在其餘語言裏面已經很熟悉的if,但此次都不會具體聊這些。
我其實只想聊一下,怎麼讓函數變漂亮
假設咱們選擇有幾個函數,order_by_grade,fetch_top_ten,select_by_subject,
已經一份未排名的各科成績單 grade_list,要獲得數學成績前十名的信息
大概咱們會這麼作編譯

fetch_top_ten(order_by_grade(select_by_subject(math)))

這裏想給你們拋出另外一個優雅些的方式,對你不笨就是管道function

select_by_subject(math)
|>order_by_grade()
|>fetch_top_ten()

管道是一種在linux常見的用法,把一個命令的輸出結果,做爲下一個命令的輸入在咱們這裏,就是|>運算符得到左邊表達式的結果,並將其做爲右邊函數的第一個參數。由於運算符優先級的問題(懷戀clojure),適當的時候須要對管道運算符先後的參數使用括號。

相關文章
相關標籤/搜索