Elixir 编程语言入门
已发表: 2022-03-11如果您一直在阅读博客文章、黑客新闻线程、您最喜欢的开发人员推文或收听播客,那么此时您可能已经听说过 Elixir 编程语言。 该语言由开源世界的知名开发者 Jose Valim 创建。 您可能从 Ruby on Rails MVC 框架或从他和他来自 Plataformatec 的同事在过去几年一直致力于开发的 devise 和 simple_form ruby gems 中认识他。
根据 Jose Valim 的说法,Elixir 诞生于 2011 年。由于缺乏解决 ruby 世界中并发问题的好工具,他萌生了构建新语言的想法。 当时,在花时间研究并发和分布式语言之后,他发现了两种他喜欢的语言,Erlang 和 Clojure,它们运行在 JVM 中。 他喜欢他在 Erlang 语言 (Erlang VM) 中看到的一切,讨厌他没有看到的东西,比如 Clojure 擅长的多态性、元编程和语言可扩展性属性。 因此,Elixir 的诞生就是考虑到这一点,它提供了 Clojure 的替代方案和一种在 Erlang 虚拟机中运行并具有良好可扩展性支持的动态语言。
Elixir 将自己描述为一种动态的、函数式的语言,具有不可变的状态和基于参与者的并发方法,旨在使用简单、现代和整洁的语法构建可扩展和可维护的应用程序。 该语言在 Erlang 虚拟机中运行,这是一种久经考验的高性能分布式虚拟机,以其低延迟和容错特性而闻名。
在我们看到一些代码之前,值得一提的是,Elixir 已经被不断发展的社区所接受。 如果你今天想学习 Elixir,你会很容易地找到书籍、图书馆、会议、聚会、播客、博客文章、时事通讯和各种学习资源,并且它被 Erlang 的创建者所接受。
让我们看一些代码!
安装 Elixir:
在所有主要平台上安装 Elixir 都非常容易,并且在大多数平台上都是单行的。
Arch Linux
Elixir 可通过官方存储库在 Arch Linux 上获得:
pacman -S elixirUbuntu
在 Ubuntu 中安装 Elixir 有点繁琐。 但这仍然很容易。
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb apt-get update apt-get install esl-erlang apt-get install elixir操作系统
使用 Homebrew 在 OS X 中安装 Elixir。
brew install elixir认识IEx
安装完成后,是时候打开你的shell了。 如果您想在 Elixir 中进行开发,您将在 shell 中花费大量时间。
Elixir 的交互式 shell 或 IEx 是一个 REPL -(阅读评估打印循环),您可以在其中探索 Elixir。 您可以在那里输入表达式,它们将被评估并为您提供即时反馈。 请记住,您的代码是真正经过评估而不是编译的,因此请确保不要在 shell 中运行分析或基准测试。
中断命令
在启动 IEx REPL 之前,您需要了解一件重要的事情 - 如何退出它。
您可能习惯于按CTRL+C来关闭终端中运行的程序。 如果您在 IEx REPL 中按CTRL+C ,您将打开中断菜单。 进入中断菜单后,您可以再次按CTRL+C退出 shell 以及a .
我不打算深入研究中断菜单功能。 但是,让我们看看一些 IEx 助手!
帮手
IEx 提供了一堆助手,以便列出所有这些类型: h() 。
这是你应该看到的:
这些是我最喜欢的一些,我想它们也会是你的。
-
h正如我们刚刚看到的,此函数将打印帮助消息。 -
h/1是同一个函数,但现在它需要一个参数。
例如,每当您想查看String strip/2方法的文档时,您都可以轻松地执行以下操作:
在 Elixir 中编程时,您将使用的第二个最有用的 IEx 助手可能是c/2 ,它编译给定的 elixir 文件(或列表),并期望将编译文件写入的路径作为第二个参数。
假设您正在参与其中一项 http://exercism.io/ Elixir 练习,即 Anagram 练习。
因此,您已经实现了Anagram模块,该模块在 anagram.exs 文件中有方法match/2 。 作为优秀的开发人员,您已经编写了一些规范以确保一切都按预期工作。
这是您当前目录的外观:
现在,为了针对 Anagram 模块运行测试,您需要运行/编译测试。
如您所见,为了编译文件,只需调用作为参数路径传递给您要编译的文件的elixir可执行文件。
现在假设您要运行 IEx REPL,并在会话上下文中访问 Anagram 模块。 有两个常用的选项。 第一个是您可以使用选项-r来获取文件,例如iex -r anagram.exs 。 第二个,您可以直接从 IEx 会话编译。
很简单,就是这样!
好的,如果你想重新编译一个模块呢? 您是否应该退出 IEx,再次运行它并再次编译文件? 没有! 如果你记忆力好,你会记得当我们列出 IEx REPL 中所有可用的帮助器时,我们看到了一些关于重新编译命令的东西。 让我们看看它是如何工作的。
请注意,这一次,您将模块本身而不是文件路径作为参数传递。
正如我们所看到的,IEx 有许多其他有用的助手,可以帮助您更好地学习和理解 Elixir 程序的工作原理。

Elixir 类型的基础知识
数字
有两种类型的数字。 任意大小的整数和浮点数。
整数
整数可以写成十进制、十六进制、八进制和二进制。
与在 Ruby 中一样,您可以在编写大数字时使用下划线来分隔三位数组。 例如,您可以像这样纠正一亿:
100_000_000八进制:
0o444十六进制:
0xabc二进制:
0b1011花车
Floare 是 IEEE 754 双精度。 它们具有 16 位精度,最大指数约为 10308。
浮点数使用小数点写入。 点前后必须至少有一位数字。 您还可以附加一个尾随指数。 例如 1.0、0.3141589e1 和 314159.0-e。
原子
原子是表示名称的常量。 它们是不可变的值。 你写一个原子,其前导冒号:和一系列字母、数字、下划线和 at 符号@ 。 您还可以使用前导冒号:和用引号括起来的任意字符序列来编写它们。
原子是一个非常强大的工具,它们用于引用 erlang 函数以及键和 Elixir 方法。
这里有一些有效的原子。
:name, :first_name, :"last name", :===, :is_it_@_question?布尔值
当然,布尔值是真值和假值。 但它们的好处是归根结底,它们只是原子。
字符串
默认情况下,Elixir 中的字符串是 UTF-8 兼容的。 要使用它们,您可以使用"或'括起来的任意数量的字符。您还可以在字符串中使用插值表达式以及转义字符。
请注意,单引号字符串实际上是二进制文件列表。
匿名函数
作为一种函数式语言,Elixir 具有匿名函数作为基本类型。 编写函数的一种简单方法是fn (argument_list) -> body end 。 但是一个函数可以有多个具有多个参数列表、保护子句等的主体。
Dave Thomas 在 Programming Elixir 书中建议我们将 fn...end 视为围绕字符串文字的引号,在此我们不是返回字符串值,而是返回一个函数。
元组
元组是一个不可变的索引数组。 由于其不可变的性质,它们返回其大小的速度很快,而附加新值的速度很慢。 更新元组时,您实际上是在创建元组自身的全新副本。
元组经常被用作数组的返回值。 在 Elixir 中编码时,您会经常看到{:ok, something_else_here} 。
下面是我们如何编写一个元组: {?a,?b,?c} 。
模式匹配
我无法解释您需要了解的有关模式匹配的所有内容,但是您将要阅读的内容涵盖了您入门时需要了解的很多内容。
Elixir 使用=作为匹配运算符。 为了理解这一点,我们需要忘掉我们所知道的=在其他传统语言中的知识。 在传统语言中,等号运算符用于赋值。 在 Elixir 中,等号运算符用于模式匹配。
所以,这就是它在左侧工作值的方式。 如果它们是变量,它们将绑定到右侧,如果它们不是变量,elixir 会尝试将它们与右侧匹配。
引脚运算符
Elixir 提供了一种始终强制模式匹配左侧变量的方法,即 pin 运算符。
列表
在 Elixir 中,列表看起来像我们从其他语言中知道的数组,但它们不是。 列表是由头部和尾部组成的链接结构。
关键字列表
关键字列表是元组对的列表。
您只需将它们写为列表。 例如:[{:one, 1}, 2, {:three, 3}]。 定义列表有一个快捷方式,如下所示:[一:1,三:3]。
为了从关键字列表中检索项目,您可以使用:
Keyword.get([{:one, 1}, 2, {:three, 3}], :one)或者使用快捷方式:
[{:one, 1}, 2, {:three, 3}][:one]因为关键字列表在检索值时很慢,这是一项昂贵的操作,因此如果您要存储需要快速访问的数据,您应该使用 Map。
地图
映射是键/值对的有效集合。 键可以具有您想要的任何值作为键,但通常应该是相同的类型。 与关键字列表不同,地图只允许一个给定键的条目。 它们随着增长而变得高效,并且当您需要关联数组时,它们可以用于通用地图中的 Elixir 模式匹配。
以下是编写 Map 的方法:
%{ :one => 1, :two => 2, 3 => 3, "four" => 4, [] => %{}, {} => [k: :v]}结论
Elixir 很棒,易于理解,具有简单但功能强大的类型以及非常有用的工具,这将在您开始学习时为您提供帮助。 在第一部分中,我们介绍了 Elixir 程序所基于的各种数据类型以及为它们提供支持的运算符。 在后面的部分中,我们将深入了解 Elixir 的世界——函数式和并发编程。
