关于我如何从C#转到Elixir / Phoenix

有一次我不得不换工作。 在此之前,我只使用过Python,C ++,C#等语言。 现在,我不得不开始使用一种功能语言。 第一印象是“这到底是什么?” 但是,我设法很快地适应了。 接下来,我将讨论为了快速而充分地开始写作而必须习惯或必须理解的要点。

1. 模式匹配

这是主要的语言功能之一。 但是要完全理解它,直到您真正开始用该语言编写才有些困难。 我读到的关于模式匹配的第一件事是,由于有了这件事,您可以简单地从结构中提取数据并将其绑定到变量。 但实际上,一切都有些复杂。 模式匹配几乎可以使用给定语言在任何地方工作。 我将给出三个示例,说明我几乎一直使用的主要应用程序。

例子1.根据定义:

{tuple_item_1, tuple_item_2} = tuple 

-将2元素元组拆分为两个变量,然后可以使用它们。

 [head_item | tail_list] = list 

-将列表分为列表中的第一个元素和不包含第一个元素的列表。

示例2.情况比较:

 case get_elem(struct) do {:ok, elem} -> … {:error, reason} -> … end 

get_elem(结构)函数返回一个元组,case允许您立即提取数据并选择其他操作序列。

范例3。 功能映射:

 def function_1(params, :ok) do end def function_1(params, :error) do end def function_1(params, _) do end 

实际上,这里展示的是具有两个参数的相同功能。 模式匹配允许您选择要执行的功能。

关于模式匹配的一些知识。 比较总是“自上而下”。 在此示例中,当从两个参数调用function_1时,它将首先检查第二个参数是否为:ok 。 如果第一次检查失败,则进行以下检查:error 。 如果没有再次出现,那么无论如何我们将输入该方法的第三个版本。 下划线表示“任何数据”,以及接收到的数据对我们不感兴趣的事实,也就是说,我们将不使用它。 如果function_1(参数_)是列表中的第一个,则程序将始终选择它,而其他两个方法将永远无法工作。 如果找不到所需的模式,则将引发异常。

2. 管道

这些是以下形式的构造:

 param_1 |> func_1() |> func_2(param_2) … 

乍一看,似乎有些垃圾。 但是值得记住的是Elixir是一种功能语言。 用函数式语言进行函数函数计算是很正常的,没有中间变量。 管道只是一个方便的入口。 语言本身要求清晰,以变量或值开始管道。

上面的示例可以重写如下:

 func_2(func_1(param_1), param_2) 

换句话说,管道会将具有第一个参数的前一个函数的计算结果重定向到下一个函数。

3. 缺乏周期

Elixir中没有周期。 这个事实给我带来了最大的震惊,这是最难理解的。 接下来是我的观点和见解,可能与现实和理论不一致。

这一事实的根源在于功能编程范例,其中之一指出程序的结果是可以调用其他功能的功能的工作,并且程序不涉及存储中间状态。 循环又被设计为重复改变循环外部的状态。

有两件事可以代替循环-递归和用于处理语言的可枚举元素的库方法。

有关小事情的更多信息。

1. Elixir中没有类,但是有上下文。 本质上,上下文在某种程度上替代了类。 在s-sharper眼中,上下文的最接近描述:上下文是夏普类和名称空间之间的交叉点,并且上下文更接近名称空间。

2.原子。 在长生不老药中,有一个原子。 原子本质上是一种“标签”。 处理它们的最简单方法是将其视为特殊行。 本文中的示例已经有两个原子:: ok ,: error 。 多亏了原子,模式匹配和复杂的逻辑构造变得更加容易。 从本质上讲,这些是常量,其值就是它们的名称。 原子始终在名称前带有“:”。

3.如何正确读取方法标题。 在Elixir中,习惯上按如下方式指定方法(这在文档中尤其常见): &function / 2 。 它作为名称为“ function”和arity 2的方法读取。Arity是采用的参数数量。

是什么帮助我融入了语言。

首先,这是android“ Elixir Tutorial”上的目录。 很好,因为它简要介绍了语言及其语法的要点,并且可以在总线上阅读。 更少:它是英文的,因此并不适合所有人。

其次,由Senloren S.,Eisenberg D ...撰写的《不老长寿药简介》一书...展示了使用该语言的方法并对其进行了解释。 它易于阅读,并允许您使用该语言显着改善您的工作。 也可以用俄语找到。

第三,官方在线文档。 它使用方便,并带有详细说明和示例,可让您快速找到必要的部分/方法。

仅此而已。

材料清单:

1. Elixir教程

2. Senloren S.,Eisenberg D. Elixir简介。 函数式编程简介。 -奥赖利(O'Reilly),2017年。

3. 官方文件。

Source: https://habr.com/ru/post/zh-CN435796/


All Articles