个性化阅读
专注于IT技术分析

Elixir编程语言入门

本文概述

如果你一直在阅读博客文章, 黑客新闻主题, 你最喜欢的开发人员推文或收听播客, 那么到那时你可能已经听说过Elixir编程语言。该语言由开源世界中著名的开发者JoséValim创建。你可能从Ruby on Rails MVC框架或从devise和simple_form红宝石中了解到他, 以及他和Plataformatec的同事在过去几年中一直在努力。

据何塞·瓦利姆(JoséValim)说, Elixir出生于2011年。由于缺乏解决红宝石世界中并发问题的良好工具, 他的想法是开发新语言。那时, 在花了很多时间研究并发和分布式语言之后, 他发现了自己喜欢的两种语言, 即在JVM中运行的Erlang和Clojure。他喜欢用Erlang语言(Erlang VM)看到的所有内容, 并且讨厌他看不见的东西, 例如Clojure擅长的多态性, 元编程和语言可扩展性属性。因此, Elixir就是出于这一考虑而诞生的, 它是Clojure的替代品和一种在Erlang虚拟机中运行并具有良好扩展性支持的动态语言。

Elixir将自身描述为具有不变状态的动态功能语言, 以及基于行为者的并发方法, 该方法旨在使用简单, 现代且整洁的语法构建可伸缩且可维护的应用程序。该语言在Erlang虚拟机中运行, Erlang虚拟机是一种具有战斗力的高性能分布式虚拟机, 以其低延迟和容错特性而闻名。

在我们看到一些代码之前, 值得一提的是, Elixir已为成长中的社区所接受。如果你想今天学习Elixir, 你将可以轻松地找到书籍, 图书馆, 会议, 聚会, 播客, 博客文章, 新闻通讯以及各种学习资源, 并且被Erlang创造者所接受。

让我们看一些代码!

安装Elixir

在所有主要平台上安装Elixir都非常容易, 而且在大多数平台上都是一站式服务。

Arch Linux

Elixir可通过官方存储库在Arch Linux上使用:

pacman -S elixir

的Ubuntu

在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

OS X

使用Homebrew在OS X中安装Elixir。

brew install elixir

认识IEX

安装完成后, 该打开外壳了。如果要在Elixir中进行开发, 你将在shell中花费大量时间。

Elixir的交互式外壳或IEx是REPL-(阅读评估打印循环), 你可以在其中浏览Elixir。你可以在此处输入表达式, 并将对其进行评估, 从而为你提供即时反馈。请记住, 你的代码是经过真正评估且未编译的, 因此请确保不要在外壳程序中运行概要分析或基准测试。

一个IEX REPL演示。

中断命令

在启动IEx REPL之前, 你需要了解一件重要的事情-如何退出它。

你可能习惯按CTRL + C来关闭在终端中运行的程序。如果在IEx REPL中按CTRL + C, 将打开”中断”菜单。进入中断菜单后, 你可以再次按CTRL + C退出外壳并按a。

退出IEx REPL。

我不会深入探讨中断菜单功能。但是, 让我们来看一些IEx助手!

帮手

IEx提供了一堆帮助程序, 以便列出所有帮助程序, 键入:h()。

这是你应该看到的:

IEx助手。

这些是我的最爱, 我想它们也将是你的。

  • 就像我们刚刚看到的, 此功能将打印帮助程序消息。
  • h / 1是相同的函数, 但现在需要一个参数。

例如, 每当你想查看String strip / 2方法的文档时, 都可以轻松做到:

IEx:正在检查文档。

c / 2可能是你在Elixir中进行编程时要使用的第二个最有用的IEx助手, 它可以编译给定的elixir文件(或列表), 并期望将写入的文件作为第二个参数。

假设你正在进行http://exercism.io/ Elixir练习之一, 即Anagram练习。

因此, 你已经实现了Anagram模块, 该模块在anagram.exs文件中具有match / 2方法。作为一名优秀的开发人员, 你已经编写了一些规范, 以确保一切都按预期进行。

这是你当前目录的外观:

此Elixir项目的目录列表。

现在, 为了针对Anagram模块运行测试, 你需要运行/编译测试。

在Elixir中运行测试。

如你所见, 要编译文件, 只需调用elixir可执行文件作为要编译的文件的参数路径即可。

现在, 假设你要使用会话上下文中可访问的Anagram模块运行IEx REPL。有两个常用选项。首先是你可以使用选项-r(例如iex -r anagram.exs)来请求文件。第二个, 你可以直接从IEx会话进行编译。

直接从IEx会话进行编译。

很简单, 就是这样!

好的, 如果要重新编译模块怎么办?是否应该退出IEx, 再次运行并再次编译文件?不!如果你有良好的记忆力, 你会记得, 当我们列出了IEx REPL中所有可用的帮助程序时, 我们看到了有关重新编译命令的信息。让我们看看它是如何工作的。

在IEx中重新编译。

请注意, 这一次, 你将参数传递给模块本身而不是文件路径。

正如我们所看到的, IEx还有许多其他有用的帮助程序, 它们将帮助你学习和更好地了解Elixir程序的工作方式。

Elixir基本数据类型

数字

有两种类型的数字。任意大小的整数和浮点数。

整数

整数可以十进制, 十六进制, 八进制和二进制形式编写。

与在Ruby中一样, 在写大数字时, 可以使用下划线将三位数的组分开。例如, 你可以这样纠正一亿:

100_000_000

八进制:

0o444

十六进制:

0xabc

二进制:

0b1011

浮点数

浮点数是IEEE 754的双精度。它们的精度为16位, 最大指数约为10308。

浮点数用小数点表示。该点前后必须至少有一位数字。你还可以附加尾随指数。例如1.0、0.3141589e1和314159.0-e。

原子

原子是代表名称的常数。它们是不可变的值。你用前导冒号写一个原子:, 并由字母, 数字, 下划线和符号@组成。你还可以在它们前面加上冒号:以及用引号括起来的任意字符序列。

原子是一个非常强大的工具, 它们用于引用erlang函数以及键和Elixir方法。

这是一些有效的原子。

:name, :first_name, :"last name", :===, :[email protected]_question?

布尔值

当然, 布尔值是true和false值。但是关于它们的好处是, 归根结底, 它们只是原子。

布尔值只是原子,已通过IEx证明。

弦乐

默认情况下, Elixir中的字符串符合UTF-8。要使用它们, 你可以使用”或”括起来的任意数量的字符。你还可以在字符串中包含内插表达式以及转义字符。

万用药水字符串插值。

请注意, 单引号字符串实际上是二进制列表。

Elixir中的单引号字符串行为。

匿名函数

作为一种功能语言, Elixir具有匿名功能作为基本类型。编写函数的简单方法是fn(argument_list)-> body end。但是一个函数可以具有带有多个参数列表, 保护子句等的多个主体。

在《 Programming Elixir》一书中的Dave Thomas建议我们将fn…end视为围绕字符串文字的引号, 在此, 我们不返回字符串值, 而是返回一个函数。

返回Elixir函数。

元组

元组是不可变的索引数组。由于其不变的性质, 它们快速返回其大小而缓慢附加新值。更新元组时, 实际上是在创建元组自身的全新副本。

元组通常用作数组的返回值。在Elixir中进行编码时, 你会经常看到{:ok, something_else_here}。

我们编写元组的方法如下:{?a, ?b, ?c}。

模式匹配

我将无法解释你需要了解的有关模式匹配的所有内容, 但是你将要阅读的内容涵盖了许多你需要了解的入门知识。

Elixir使用=作为匹配运算符。为了理解这一点, 我们有点需要学习其他传统语言中关于=的知识。在传统语言中, 等于运算符用于赋值。在Elixir中, 等于运算符用于模式匹配。

因此, 这就是它在左侧操作值的方式。如果它们是变量, 则它们绑定在右侧, 如果它们不是变量, 则长生不老药尝试将它们与右侧匹配。

Elixir模式匹配演示。

引脚运算符

Elixir提供了一种始终强制模式匹配左侧针脚操作符上的变量的方式。

Elixir针操作员演示。

清单

在Elixir中, 我们从其他语言中知道列表看起来像数组, 但事实并非如此。列表是由头和尾组成的链接结构。

长生不老药名单行为。

关键字清单

关键字列表是元组对的列表。

你只需将它们写为列表即可。例如:[{:one, 1}, 2, {:three, 3}]。有一个定义列表的快捷方式, 如下所示:[一个:1, 三个:3]。

为了从关键字列表中检索项目, 你可以使用:

Keyword.get([{:one, 1}, 2, {:three, 3}], :one)

或使用快捷方式:

[{:one, 1}, 2, {:three, 3}][:one]

由于检索值时关键字列表很慢, 因此这是一项昂贵的操作, 因此, 如果要存储需要快速访问的数据, 则应使用Map。

地图

映射是键/值对的有效集合。键可以具有你想要作为键的任何值, 但通常应为相同的类型。与关键字列表不同, 地图对于给定的键仅允许一个条目。它们随着增长而有效, 并且在需要关联数组时可以在通用映射的Elixir模式匹配中使用。

编写地图的方法如下:

%{ :one => 1, :two => 2, 3 => 3, "four" => 4, [] => %{}, {} => [k: :v]}

总结

Elixir很棒, 易于理解, 具有简单但功能强大的类型以及围绕它的非常有用的工具, 这将在你开始学习时为你提供帮助。在第一部分中, 我们介绍了Elixir程序所基于的各种数据类型以及为其提供动力的运算符。在以后的部分中, 我们将更深入地研究Elixir的世界-函数式和并发编程。

相关:挖掘用于前端开发的ClojureScript

赞(0)
未经允许不得转载:srcmini » Elixir编程语言入门

评论 抢沙发

评论前必须登录!