开始的长生不老药

序幕

几个月前,我决定对Elixir进行更认真的研究(我放弃了关于背景的血腥细节,研究了不同的技术等)。 尽管我承认我总体上喜欢F#和函数式编程,但主要原因是Web框架Phoenix。 在完成准备工作和网站上的一些Elixir之后,尝试使用Phoenix编写一些内容,包括一些CRUD以及可能是一个聊天应用程序。 事情进展得很顺利,没有麻烦! 我怀疑是因为凤凰城。 因此,决定写其他东西-Telegram Bot-更深入地理解Elixir和BEAM(Erlang虚拟机或EVM)。

幸运的是,我发现有4到5天的空闲时间(包括公司和家庭)。 因此决定做一个沙盒,为期4天,与万灵药一起生活。 这非常有帮助,这就是我所拥有的。

如何开始在Elixir中思考

我们需要牢记三个概念:

  1. 我们的代码段/块,即使在同一文件内,也不知道其他代码段。 他们不知道彼此的存在。 只是消息。 他们通过消息通信。 每个片段都在一个进程中运行-类似于绿色线程,协程,goroutine。 一个进程自然具有唯一的进程ID或pid,因此我们可以向它发送消息。
  2. 我们不修改状态。 没有可变状态。 取而代之的是,我们只选择状态,对其进行处理,生成一个新状态(因为没有突变),然后以新状态递归(它将成为下一个递归的旧状态)。 简而言之,我们使用递归保持状态,并使用递归和消息传递对其进行修改。
  3. 由于某些我不了解的原因,OTP似乎使人们感到困惑。 只是当我们递归修改状态时,每次重复出现时我们都可能会收到消息。 现在,我们无需编写递归代码并自己处理各种消息,而只是编写一堆回调并将其移交给OTP。 根据我们的需要,OTP可以使服务器脱离那些回调,状态机或其他东西,并为我们提供许多额外的好处。

处理状态时,我们可以接收消息。