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 do
  def sum(a, b) do
    sump(a, b)
  end

  defp sump(a, b) do
    a + b
  end
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/2

    Math.sump(1, 2)
    iex:2: (file)

elixir支持默认参数,例如将sum函数改写为

  def sum(a, b \\ 1) do
    sump(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对函数式编程有着良好的支持。

判断语句

elixirerlang最相似的地方就是没有循环语句,从而循环需要用递归来实现。但判断语句还是提供的,并且提供了ifunless两种,其中unless可以理解为if not

下面做一个函数来测试一下unless

defmodule Test do
   def ifTest(num) do
      unless num < 5 do
         "num >= 5"
      else 
         "num < 5"
      end
   end
end

测试结果如下

iex(1)> Test.ifTest(3)
"num < 5"
iex(2)> Test.ifTest(7)
"num >= 5"

猜你喜欢

转载自blog.csdn.net/m0_37816922/article/details/130924184