elixir编程基础:数据类型、函数、流程控制
文章目录
- 数据类型
- 函数
- 匿名函数
- 判断语句
数据类型
Elixir提供了整数、浮点数、原子、列表、元组、字符串等数据类型,其基础的赋值方法如下
iex> 1 # 整数
iex> 0x1F # 整数
iex> 1.0 # 浮点数
iex> :atom # 原子/符号
iex> "elixir" # 字符串
iex> [1, 2, 3] # 列表
iex> {1, 2, 3} # 元组
和其他语言一样,elixir支持不同进制的整数输入,0x, 0o, 0b分别表示16进制、8进制以及二进制;而浮点型则同样支持科学计数法,例如 2.997 × 1 0 8 2.997\times10^8 2.997×108可写为2.997e8。
原子是erlang/elixir中特有的数据类型,在主流编程语言中相对比较少见,简单来说,就是直接以名字为变量。但与erlang中通过大小写来区分原子的方式不同,elixir中以:开头则为原子。由于名字就是数据本身,同时名字又是编译器识别变量的优先方法,所以原子是一种常量。
字符串需要用双引号包含,此外,elixir也支持更加灵活的字符串语法,即字符串中的#{}会被识别为变量,并转化为字符串嵌套到外层的字符串中,例如
iex> "hellö #{:world}"
"hellö world"
函数
在elixir中,函数名字必须以小写字母开头,并且只能在模块中定义。
用def声明的函数,可以被模块外的程序所调用,而以defp声明的函数,则只能在模块内部调用,其中p可以理解为private。下面举一个例子
defmodule Math dodef sum(a, b) dosump(a, b)enddefp sump(a, b) doa + bend
end
在elixir中,函数的最后一行表达式即为其返回值,上面这个例子测试结果如下
>iex Math.ex
Interactive Elixir (1.14.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)> Math.sum(1,2)
3
iex(2)> Math.sump(1,2)
** (UndefinedFunctionError) function Math.sump/2 is undefined or private. Did you mean:* sum/2Math.sump(1, 2)iex:2: (file)
elixir支持默认参数,例如将sum函数改写为
def sum(a, b \\ 1) dosump(a, b)end
则在调用时效果如下
> Math.sum(1)
2
iex(2)> Math.sum(1,2)
3
匿名函数
elixir支持匿名函数,并且可以在命令行中直接使用,其定义语法为fun … -> … end,具体示例如下
> sum = fn a,b -> a+b end
#Function<41.3316493/2 in :erl_eval.expr/6>
> sum.(1,2)
3
通过is_function可以检测函数是否存在,其输入参数为函数名和函数的参数个数,例如
> is_function(sum, 2)
true
> is_function(sum, 1)
false
在这个过程中,sum函数作为一个参数传递给了另一个函数is_function,这说明elixir对函数式编程有着良好的支持。
判断语句
elixir与erlang最相似的地方就是没有循环语句,从而循环需要用递归来实现。但判断语句还是提供的,并且提供了if和unless两种,其中unless可以理解为if not。
下面做一个函数来测试一下unless
defmodule Test dodef ifTest(num) dounless num < 5 do"num >= 5"else "num < 5"endend
end
测试结果如下
iex(1)> Test.ifTest(3)
"num < 5"
iex(2)> Test.ifTest(7)
"num >= 5"
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
