freeCodeCamp/guide/chinese/erlang/index.md

80 lines
2.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

---
title: Erlang
localeTitle: 二郎神
---
## 二郎神
Erlang是一种函数式编程语言由爱立信开发用于电信应用。因为他们觉得电信系统有任何重大的停机时间是不可接受的所以Erlang的构建是除其他事项外
* 分布式和容错_一块失败的软件或硬件不应该导致系统崩溃_
* 并发_它可以产生许多进程每个进程执行一个小的定义明确的工作彼此隔离但能够通过消息进行通信_
* 可热插拔_代码可以在运行时交换到系统中从而实现高可用性和最小的系统停机时间_
### 句法
Erlang大量使用**递归** 。由于数据在Erlang中是不可变的因此不允许使用`while`和`for`循环(变量需要不断更改其值)。
这是一个递归的例子,显示了一个函数如何重复地从名称前面剥离第一个字母并打印它,只在遇到最后一个字母时停止。
```erlang
-module(name).
-export([print_name/1]).
print_name([RemainingLetter | []]) ->
io:format("~c~n", [RemainingLetter]);
print_name([FirstLetter | RestOfName]) ->
io:format("~c~n", [FirstLetter]),
print_name(RestOfName).
```
输出:
```
> name:print_name("Mike").
M
i
k
e
ok
```
还特别强调**模式匹配** ,这通常消除了对`if`结构或`case`语句的需要。在以下示例中特定名称有两个匹配项后跟任何其他名称的catch-all。
```erlang
-module(greeting).
-export([say_hello/1]).
say_hello("Mary") ->
"Welcome back Mary!";
say_hello("Tom") ->
"Howdy Tom.";
say_hello(Name) ->
"Hello " ++ Name ++ ".".
```
输出:
```
> greeting:say_hello("Mary").
"Welcome back Mary!"
> greeting:say_hello("Tom").
"Howdy Tom."
> greeting:say_hello("Beth").
"Hello Beth."
```
### 试试看
有些网站可以尝试运行Erlang命令而无需在本地安装任何东西例如
* [试试看! (动手教程)](http://www.tryerlang.org/)
* [TutorialsPoint CodingGround](https://www.tutorialspoint.com/compile_erlang_online.php)
如果您想在您的(或虚拟)计算机上安装它,可以在[Erlang.org](https://www.erlang.org/downloads)或[Erlang Solutions](https://www.erlang-solutions.com/resources/download.html)上找到安装文件。
#### 更多信息:
* [关于Erlang](https://www.erlang.org/about)
* [向大家学习一些Erlang吧](http://learnyousomeerlang.com/)
* [产卵避难所!](http://spawnedshelter.com/) _用于学习Erlang的文章视频和书籍的集合_
* [Erlang编程语言](https://en.wikipedia.org/wiki/Erlang_(programming_language))