1

函数是干嘛的

答案:进行数据转化,得到你想要的数据的的,举个栗子
你有大家考试的成绩单(数据),但是你想排个序(转化),得到一个成绩排名(想要的数据)。
这个时候你可能需要一个排序的函数了。

函数长啥样子

答案:

  • 匿名函数用fn关键字创建,形如
fn 
  parameter-list -> body
  parameter-list -> body  ...
end
  • 命名函数必须写在模块里面,用def声明,形如
defmodule ModuleName do
  def functionName(parameter-list) do
  ...
  end
end

其中body,以及do...end的部分就是函数体(代码块)

如何编译运行

假设我们已经写好一个模块叫moduleA,并且把它保存为moduleA.exs,里面有一个模块moduleA以及方法functionB,如何执行方法呢?

  • 初始进入命令行,未进入iex
iex moduleA.exs
iex>moduleA.functionB parameter-list
  • 已进入iex
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)))

这里想给大家抛出另一个优雅些的方式,对你不笨就是管道

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

管道是一种在linux常见的用法,把一个命令的输出结果,作为下一个命令的输入
在我们这里,就是|>运算符获得左边表达式的结果,并将其作为右边函数的第一个参数。
因为运算符优先级的问题(怀恋clojure),适当的时候需要对管道运算符前后的参数使用括号。


Yangyang
105 声望11 粉丝

Coding/Reading|Thinking