我如何以及为什么爱上了长生不老药

我们简短的爱情故事。

我如何以及为什么爱上了长生不老药
Elixir和Phoenix框架

免责声明:从我的角度来看,这仅仅是一个故事,不应该用作教育参考。 另外,请记住,这是我第一次深入函数式编程领域。 在本文中,我也不打算太讲究技术,而只是提供一些简要概述。

大学毕业一个月后,我成为了初级后端开发人员。 我唯一精通该时间的编程语言是PHP,也许还有一些Java(哦,我讨厌它—个人讨厌,请不要介意)。 我实际上是在第一天前一天晚上在祈祷该公司使用PHP,以便我可以快速进行调整。 你猜怎么了? 我的祈祷没有得到回应。 他们正在使用Elixir!

Elixir是什么(在这里插入以'f'开头的诅咒词)? -(乌拉格,2017年)

验收

起初,我有点生气,因为我无法运用我在大学中学到的大部分知识,但后来我逐渐将其视为成长的机会。 我意识到,只要尝试学习该语言,我就不会丢失任何东西( 但是,如果我不会的话,我会丢失一些东西-这是我的工作 ),所以我去设置了机器。

惊恐的事件

“我应该从哪里开始?” 我去了Elixir的入门指南 ,并完成了从隐蔽到隐蔽的过程。 这是Elixir第一次引起我的注意。 他们的入门指南确实是菜鸟友好的。 没有令人困惑的术语/行话。 尽管《入门指南》足以帮助您入门,但我仍然建议您查找其他参考资料。 我参加了这个非常全面的在线课程,名为“ 完整的药剂和凤凰城训练 ”,从没有后悔过一毛钱。 该课程涵盖了Elixir的所有基本部分,包括使用Phoenix (Elixir的Web框架)和Websockets创建CRUD应用的过程。 我能够从作者本人那里获得优惠券,以便与您分享。 链接将在这篇文章的结尾。 我真的建议您参加那门课程。

我所爱

句法

Elixir使用def-do-end定义代码块,而不是Java和PHP中的花括号。 有时,比起难以捉摸的}括号更容易找到丢失的end 某些人可能会惊讶于它与Ruby的语法异常相似。 好吧,别这样。 Elixir语言的创建者JoséValim是一位著名的Rubyist。

模式匹配

iex(1)> { a, b } = { "hello", "world" }
{ "hello", "world" }
iex(2)> a
"hello"
iex(3)> b
"world"

上面是一个在交互式长生不老药外壳中执行的演示,可以通过在终端中键入iex来调用它。 一开始这很令人困惑,因为它违反了您的某些编程基础 你在说什么,文斯? 我说的是赋值运算符= 赋值运算在Elixir中称为匹配运算符 让我通过提供一些摘要来进行解释。

让我们以下面的代码为例:

<?php
$my_number = 1;
1 = $my_number;
 FATAL ERROR syntax error, unexpected '=' on line number 3

这是荒谬的。 为什么要尝试为变量分配整数? 不是这样的!

如果将在Elixir中执行相同的代码,则将发生以下情况:

iex(1)> my_number = 1
1
iex(2)> 1 = my_number
1

哇,行得通。 好吧,在Elixir中,您没有为变量分配值。 你匹配他们。 也许我需要再添加一个片段以使其更加清晰。

iex(3)> 2 = my_number
** (MatchError) no match of right hand side value: 1

那么那里发生了什么? 我们之前已经 my_number 匹配为1。然后在第3行,我们尝试将2与my_number 匹配 ,该my_number已经具有值1,因此导致MatchError

管道操作员

["hello", "world"]
|> Enum.join(" ")
|> String.capitalize

这只是使代码看起来更清晰。 因此,更容易调试。 如果没有管道运算符,则将其写为String.capitalize(Enum.join([“hello”, “world”], “ “)) 令人困惑。

凤凰框架

根据他们的网站, Phoenix框架是一种高效的Web框架,不会影响速度和可维护性。 一个简单的Google搜索将向我们表明Elixir还有其他Web框架。 凤凰是最常用的。 就像Rails for Ruby。 它与Ecto捆绑在一起。 Ecto是用于与数据库交互的DSL。 Phoenix还带有对websocket的内置支持,使您能够轻松构建实时应用程序。 如果您是Ruby专家并且想开始过渡到Elixir,Phoenix在某种程度上类似于Rails。 甚至有人说这是Rails的克隆。 顺便说一句,我之前尝试过学习Ruby on Rails,而我只能说Phoenix要求的学习曲线较少。 感觉就像在指导您进行编码。 只是为了向您展示Phoenix和Ecto,我将转储一小段显示特定博客文章的代码。

# router.ex
...
get "/:post_id", PostController, :show
...
# post_controller.ex
...
def show(conn, %{"post_id" => post_id}) do
post = BlogApp.Repo.get!(Post, post_id)
render conn, "show.html", post: post
end
...

如果您仔细观察路由器,将会看到一个通配符。 在Phoenix中, :在路线中表示路线通配符。 我们还可以在示例中看到模式匹配的强大功能。 它可以用来解构复杂的数据。 不仅仅是在函数定义中获取整个参数图,我们已经在接收时对其进行了结构分解。

结局

我知道一些使用Elixir和Phoenix框架很长时间的人会说我错过了Elixir最重要的功能,即并发。 老实说,我还没有对此进行探讨,并且正如我在免责声明中提到的那样,我希望这篇文章尽可能的简短。

我从这种经验中学到的是永远不会满足。 技术在不断发展,作为与技术并肩工作的人,我们也必须发展。

在线课程折扣(按承诺)

如承诺的那样, 是Stephen Grider的Udemy课程“ The Complete Elixir and Phoenix Bootcamp ”的折扣券的链接。 如果您不能单击该链接,则促销代码为: 4MORE1234谢谢Stephen,他是一个如此慷慨的小伙子。 干杯。

感谢您的阅读。 如有任何疑问,您随时可以在Twitter @VinceUrag上与我联系

喜欢你读的书吗? 你总可以给我买杯咖啡

在Github上与我联系:

From: https://hackernoon.com/how-and-why-i-fell-in-love-with-elixir-3c547237cd4e