Elixir 编程程序员Elixir & Phoenix

Elixir学习笔记(环境安装、基本类型)

2018-02-06  本文已影响283人  程序员小哥哥

Elixir,[ɪ'lɪksər],意为灵丹妙药、圣水,其logo是一枚紫色水滴


Elixir

Elixir创始人José Valim是ruby界的知名人士。 可以把Elixir看作函数式的ruby语言,或者是语法类似ruby的Erlang。
Elixir受瞩目的主要原因,是因为它较好地结合了Erlang编程语言的各种优点,
以及ruby那样简单易懂的语法(Erlang语法比较晦涩)。

Elixir还是一门初出茅庐的语言:

Elixir 是一种动态的函数编程语言,用来编写可扩展和易于维护的应用。

函数式编程是种编程方式,它将电脑运算视为函数的计算。

Elixir 语言运行在Erlang虚拟机上的一门新语言,可以很方便地编写分布式、低延迟和高容错性的系统。

安装环境

mac上安装Elixir

我的电脑是mac,所以这里列出mac的安装过程。windows、linux、os的详细安装在官方文档有详细说明。

brew install erlang
brew install elixir

在控制台输入elixir -v可以查看当前安装的elixir版本(我这里安装的是最新版本1.6.1)

Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Elixir 1.6.1 (compiled with OTP 20)

安装好Elixir之后,你有了三个可执行文件:iex,elixir和elixirc。
如果你是用预编译包方式安装的,可以在解压后的bin目录下找到它们。
交互模式,类似于Ruby的irb,就是可以向其中输入任何Elixir表达式或命令,然后直接看到表达式或命令的结果。 控制台敲命令iex会显示:

Erlang/OTP 20 [erts-9.2] [source] [64-bit] [smp:4:4] [ds:4:4:10] [async-threads:10] [hipe] [kernel-poll:false] [dtrace]

Interactive Elixir (1.6.1) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>

如果你用的是Windows,你可以使用iex.bat来进入交互模式

永远的hello world

iex(1)> "hello world"
"hello world"
iex(2)> "hello
...(2)> world"
"hello\nworld"
iex(3)> "hello" <> " world"
"hello world"

当然,也可以把表达式写进脚本文件,用elixir命令执行它,如:

vim simple.exs #创建一个名字叫simple,以exs结尾的文件
IO.puts "hello word"

然后执行elixir simple.exs就可以在控制台显示hello world了

基本类型

Elixir主要的基本类型有: 整型(integer),浮点(float),布尔(boolean),原子(atom,又称symbol符号),
字符串(string),列表(list)和元组(tuple)等。

iex> 1          # integer
iex> 0x1F       # integer
iex> 1.0        # float
iex> true       # boolean
iex> :atom      # atom / symbol
iex> "elixir"   # string
iex> [1, 2, 3]  # list
iex> {1, 2, 3}  # tuple

整数类型

iex(1)> 111
111

浮点类型

iex(2)> 3.14
3.14

布尔类型

Elixir使用truefalse两个布尔值

iex(3)> true
true
iex(4)> false
false

Elixir提供了许多用以判断类型的函数,如is_boolean/1函数可以用来检查参数是不是布尔型。

在Elixir中,函数通过名称和参数个数(又称元数,arity)来识别。 如is_boolean/1表示名为is_boolean,接受一个参数的函数; 而is_boolean/2表示与其同名、但接受2个参数的不同函数。(只是打个比方,这样的is_boolean实际上不存在)
另外,<函数名>/<元数>这样的表述是为了在讲述函数时方便,在实际程序中如果调用函数, 是不用注明/1/2的。

iex(1)> is_boolean(true)
true
iex(2)> is_boolean(1)
false

类似的函数还有is_integer/1is_float/1is_number/1, 分别测试参数是否是整型、浮点型或者两者其一。

原子

原子(atom)是一种常量,名字就是它的值。有些语言中称其为符号(symbol),比如ruby。

iex(3)> :hello
:hello
iex(4)> :hello == :hi
false

布尔值truefalse实际上就是原子:

iex(5)> true == :true
true
iex(6)> is_atom(false)
true

字符串

在Elixir中,字符串以 双括号 包裹,采用UTF-8编码:

iex(5)> "hello world"
"hello world"

字符串支持换行符和转义字符

iex(6)> "hello
...(6)> world"
"hello\nworld"

你可以使用IO模块(module)里的IO.puts/1方法打印字符串:

iex(7)> IO.puts "hello\nworld"
hello
world
:ok

函数IO.puts/1打印完字符串后,返回原子值:ok

我们可以使用专门的函数来返回字符串中的字符数量:

iex(8)> String.length("hello world")
11

String模块中提供了很多符合Unicode标准的函数来操作字符串。如:

iex(9)> String.upcase("hello")
"HELLO"

这里有一个注意的点,单引号和双引号包裹的字符串在Elixir中是两种不同的数据类型:

iex(10)> 'hello' == "hello"
false

(链式)列表

Elixir使用方括号标识列表。列表可以包含任意类型的值:

iex(12)> [1, 2, true, 3]
[1, 2, true, 3]
iex(13)> length [1, 2, 3]
3

两个列表可以使用++/2拼接,使用--/2做“减法”:

iex(15)> [1, 2, 3, true]
[1, 2, 3, true]
iex(16)> [1, 2, 3] ++ [4, 5, 6]
[1, 2, 3, 4, 5, 6]
iex(17)> [1, true, 2, false, 3, true] -- [true, false]
[1, 2, 3, true]

涉及列表头(head)和尾(tail)的概念。
列表的头指的是第一个元素,而尾指的是除了第一个元素以外,其它元素组成的列表。
它们分别可以用函数hd/1和tl/1从原列表中取出:

iex(18)> list = [1, 2, 3]
[1, 2, 3]
iex(19)> hd(list)
1
iex(20)> tl(list)
[2, 3]

尝试从一个空列表中取出头或尾将会报错:

iex(21)> hd []
** (ArgumentError) argument error
    :erlang.hd([])

"Use the source, Luke!"

Elixir没有令人生畏的语法,融合了Ruby和Erlang优秀的特性。它不是Erlang也不是Ruby,它有自己创新的想法。

上一篇下一篇

猜你喜欢

热点阅读