作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
克莱伯·维吉里奥·科雷亚的头像

克莱伯·维吉里奥·科雷亚

Kleber的长期专业经验涉及Unix, 敏捷, 函数式和面向对象语言, REST api, 分布式应用程序, 还有云.

以前在

环球
分享

如果你一直在看博客文章, 黑客新闻线程, 你最喜欢的开发者发微博或者听播客, 现在你可能听说过长生不老药, 所以让我们从基础开始:什么是长生不老药编程语言? 该语言是由jos Valim创建的,他是开源世界的知名开发者. 你可能从Ruby on Rails MVC框架或他和他在platformatec的同事在过去几年中一直致力于的设计和simple_form Ruby宝石中认识他.

根据约瑟约瑟·瓦利姆的记载,长生不老药诞生于 2011. 由于ruby世界缺乏解决并发性问题的好工具,他产生了构建新语言的想法. 当时, 在花时间学习并发性和分布式语言之后, 他发现了两种他喜欢的语言, 在JVM中运行的Erlang和Clojure. 他喜欢他在Erlang语言(Erlang VM)中看到的一切,而他讨厌他没有看到的东西, 像多态性, Clojure擅长的元编程和语言可扩展性属性. So, 长生不老药语言诞生的初衷是:为Clojure提供一种替代方案,并提供一种运行在Erlang虚拟机中的动态语言,具有良好的可扩展性支持. 但事实就是这样吗? 让我们看看长生不老药编程语言是用来做什么的.

万能语言有什么用?

长生不老药 形容自己是动态的, 具有不可变状态的函数式语言和基于参与者的并发性方法,专为构建可扩展的和 可维护的应用程序 具有简单,现代和整洁的语法. 长生不老药编程语言运行在Erlang虚拟机中, 防不胜防, 高性能和分布式虚拟机,以其低延迟和容错特性而闻名.

在我们看到一些代码之前,有必要说一下长生不老药 被社会所接受 还在增长. 如果你今天想学习长生不老药,你会很容易找到书, 库, 会议, 聚会, 播客, 博客文章, 通讯和各种各样的学习资源,以及它被Erlang的创造者所接受.

让我们看一些代码!

安装长生不老药:

安装长生不老药是 超级简单 在所有主要平台中,在大多数平台中都是一行代码.

Arch Linux

长生不老药可以在Arch Linux上通过官方存储库获得:

吃豆人长生不老药

Ubuntu

在Ubuntu中安装长生不老药有点乏味. 尽管如此,这还是很容易做到的.

wget http://packages.erlang-solutions.com/erlang-solutions_1.0 _all.黛比 && Sudo DPKG -i erlang-solutions_1.0 _all.黛比
apt-get更新
安装esl-erlang
Apt-get install 长生不老药

OS X

在OS X中安装长生不老药 家酿.

Brew安装长生不老药

满足IEx

安装完成后,是时候打开shell了. 如果你想在长生不老药中发展,你将花很多时间在你的外壳中.

长生不老药的交互式shell或IEx是一个REPL -(读取评估打印循环),您可以在其中探索长生不老药. 你可以在那里输入表达式,它们会被评估,给你即时的反馈. 请记住,代码是真正求值的,而不是编译的, 因此,请确保不要在shell中运行分析或基准测试.

一个IEx REPL演示.

Break命令

在启动IEx REPL之前,有一件重要的事情需要知道——如何退出它.

你可能已经习惯打人了 CTRL + C 关闭在终端中运行的程序. 如果你击中 CTRL + C 在IEx REPL中,您将打开Break菜单. 一旦进入中断菜单,你就可以点击 CTRL + C 再次退出壳以及按压 a.

退出IEx REPL.

我不打算深入研究break菜单功能. 但是,让我们看看一些IExHelpers!

Helpers

IEx提供了一堆 Helpers,要列出所有它们,请键入: h().

这是你应该看到的:

IExHelpers.

这些是我最喜欢的,我想它们也会是你的.

  • h 正如我们刚才看到的,这个函数将打印helper消息.
  • h/1 哪个是相同的函数,但现在它需要一个参数.

例如,每当您想要查看 字符串 带/ 2 你可以轻松做到的方法:

IEx:检查文档.

在长生不老药中编程时使用的第二个最有用的IExHelpers可能是 c/2, 它编译给定的长生不老药语言文件(或列表),并期望作为第二个参数的路径来编写编译的文件.

假设你在一个http://exercism.io/ 长生不老药练习,字谜练习.

你已经实现了 回文构词法 模块,它具有方法 匹配/ 2 在字谜中.练习文件. 作为好人 开发人员 你已经写了一些规范,以确保一切都像预期的那样工作.

这是当前目录的样子:

长生不老药项目的目录列表.

现在,为了针对回文构词法模块运行测试,您需要运行/编译测试.

在长生不老药里做测试.

如您所见,为了编译文件,只需调用 长生不老药 将可执行文件作为参数路径传递给要编译的文件.

现在,假设您希望运行带有会话上下文中可访问的回文构词法模块的IEx REPL. 有两种常用的选项. 首先,您可以通过使用选项来要求该文件 -r比如 Iex -r anagram.练习. 第二个,您可以直接从IEx会话进行编译.

从IEx会话中编译.

很简单,就这样!

如果你想重新编译一个模块呢? 应该退出IEx,重新运行它并重新编译文件吗? 不! 如果你记性好, 当我们列出IEx REPL中可用的所有帮助程序时,您会记得这一点, 我们看到了一些关于重新编译命令的内容. 让我们看看它是如何工作的.

在IEx中重新编译.

注意,这一次,您传递的参数是模块本身,而不是文件路径.

正如我们看到的, IEx还有其他一些有用的帮助程序,它们将帮助您更好地学习和理解长生不老药程序的工作原理.

药剂类型的基础知识

数字

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

整数

整数可以写成十进制、十六进制、八进制和二进制.

就像在 Ruby,在书写大数时,可以使用下划线分隔三位数组. 例如,你可以像这样对1亿美元进行调整:

100_000_000

八进制:

0o444

Hexdecimal:

0 xabc

二:

0b1011

浮点数

Floare是IEEE 754双精度. 它们的精度为16位,最大指数约为10308.

浮点数是用小数点来写的. 在点的前后必须至少有一个数字. 您还可以添加一个尾随指数. 例如1.0, 0.3141589e1和314159.0-e.

原子

原子是表示名称的常量. 它们是不可变的值. 你写一个以冒号开头的原子 : 以及字母、数字、下划线和@符号的序列 @. 也可以在开头加冒号 : 以及用引号括起来的任意字符序列.

原子是一个非常强大的工具, 它们被用来引用erlang函数以及key和长生不老药方法.

这里有一些有效的原子.

:名称、:first_name、:“姓 ",  :===, : is_it_@_question?

布尔值

当然,布尔值有真值和假值. 但它们的好处是,在一天结束时,它们只是原子.

正如IEx所证明的那样,布尔值只是原子.

字符串

默认情况下,长生不老药中的字符串是 utf - 8 兼容的. 要使用它们,您可以将任意数量的字符用 " or '. 您还可以在字符串中插入表达式以及转义字符.

长生不老的字符串插值.

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

长生不老药中的单引号字符串行为.

匿名函数

作为一种函数式语言,长生不老药将匿名函数作为基本类型. 编写函数的一种简单方法是 fn (argument_list) -> body end. 但是一个函数可以有多个主体,具有多个参数列表、保护子句等.

戴夫·托马斯,在 编程的灵丹妙药 书, 建议我们将fn…end看作是包围字符串字面值的引号, 不是返回一个字符串值,而是返回一个函数.

返回长生不老药函数.

元组

元组是一个不可变的索引数组. 由于其不可变的性质,它们返回其大小的速度很快,附加新值的速度很慢. 当更新元组时,实际上是在创建元组self的一个全新副本.

元组经常用作数组的返回值. 在《欧博体育app下载》中编写代码时,你会经常看到这种情况, {:好的,something_else_here}.

下面是我们如何编写一个元组: {?a,?b,?c}.

模式匹配

我无法解释你需要知道的关于模式匹配的一切, 然而,你将要阅读的内容涵盖了很多你需要知道的开始.

长生不老药使用 = 作为匹配操作符. 为了理解这一点,我们需要忘记我们所知道的 = 其他传统语言. 在传统语言中,等号运算符用于赋值. 在长生不老药中,等号操作符用于模式匹配.

左边的值就是这样的. 如果它们是变量,它们就会被绑定到右边, 如果它们不是变量,长生不老药会尝试将它们与右侧匹配.

万能药模式匹配演示.

销操作符

长生不老药提供了一种总是针对左侧变量强制模式匹配的方法, 引脚算子.

长生不老针操作演示.

列表

在长生不老药中,列表看起来就像我们从其他语言中所知道的数组,但它们不是. 列表是由一个头和一个尾组成的链接结构.

长生不老药列表行为.

关键字列表

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

你只需把它们写成列表. 例如:[{:1,1},2,{:3,3}]. 定义列表有一个捷径,它是这样的:[1,3,3].

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

关键字.Get ([{: 1, 1}, 2, {: 3, 3}],: 1)

或者使用快捷方式:

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

因为关键字列表在检索值时很慢, 这是一项昂贵的手术, 因此,如果您正在存储需要快速访问的数据,则应该使用Map.

地图

映射是键/值对的有效集合. 键可以有任何值作为键,但通常应该是相同的类型. 与关键字列表不同,映射只允许给定键的一个条目. 当它们增长时,它们是有效的,当您需要关联数组时,它们可以用于长生不老药模式匹配中的一般使用映射.

下面是编写Map的方法:

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

结论

长生不老药很棒, 容易理解, 有简单但功能强大的类型和非常有用的工具来帮助你开始学习吗. 在长生不老药编程语言教程的第一部分中, 我们已经介绍了长生不老药程序所基于的各种数据类型以及为它们提供支持的操作符. 在后面的部分中,我们将深入探究长生不老药的世界——函数式编程和并发编程.

就这一主题咨询作者或专家.
预约电话
克莱伯·维吉里奥·科雷亚的头像
克莱伯·维吉里奥·科雷亚

位于 圣保罗州-巴西圣保罗州

成员自 2012年10月31日

作者简介

Kleber的长期专业经验涉及Unix, 敏捷, 函数式和面向对象语言, REST api, 分布式应用程序, 还有云.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

以前在

环球

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.