从零开始学习Erlang语言:learnxinyminutes-docs核心教程

从零开始学习Erlang语言:learnxinyminutes-docs核心教程

learnxinyminutes-docs Code documentation written as code! How novel and totally my idea! learnxinyminutes-docs 项目地址: https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs

前言

Erlang是一种函数式编程语言,由爱立信公司开发,特别适合构建高并发、分布式和容错系统。本文基于learnxinyminutes-docs项目中的Erlang教程,将全面介绍Erlang的核心概念和语法特性。

基础语法

注释与标点

Erlang使用三种注释方式:

  • 单行注释:%
  • 函数注释:%%
  • 模块注释:%%%

三种标点符号的用法:

  • 逗号(,): 分隔函数参数、数据构造器和模式
  • 句号(.): 分隔完整函数和shell表达式
  • 分号(;): 分隔子句

变量与模式匹配

Erlang变量命名以大写字母开头,采用单次赋值(不可变):

Num = 42.  % 正确
num = 42.  % 错误,变量名必须大写
Num = 43.  % 错误,Num已绑定为42

=操作符实际上是模式匹配操作,而非传统赋值:

{point, X, Y} = {point, 10, 45}. % X匹配为10,Y匹配为45

数据类型

原子(Atom):以小写字母开头的常量符号

Hello = hello.
OtherNode = example@node.

元组(Tuple):固定长度的复合数据类型

Point = {point, 10, 45}.
{point, X, Y} = Point. % 解构元组

列表(List):动态长度的元素集合

ThingsToBuy = [{apples, 10}, {pears, 6}, {milk, 3}].
[First|Rest] = ThingsToBuy. % 模式匹配分解列表

字符串:在Erlang中实际上是整数列表

"Hello" = [72, 101, 108, 108, 111].

函数式编程

模块与函数

Erlang代码组织在模块中,模块文件扩展名为.erl

-module(geometry).
-export([area/1]). % 导出area/1函数

area({rectangle, Width, Ht}) -> Width * Ht;
area({circle, R}) -> 3.14159 * R * R.

编译和执行:

c(geometry). % 编译
geometry:area({rectangle, 10, 5}). % 调用

匿名函数(Fun)

Double = fun(X) -> 2 * X end.
Double(2). % 返回4

% 高阶函数
Mult = fun(Times) -> (fun(X) -> X * Times end) end.
Triple = Mult(3).

列表推导

简洁的列表生成方式:

[2 * X || X <- [1,2,3,4,5]]. % [2,4,6,8,10]
[N || N <- [1,2,3,4], N rem 2 == 0]. % [2,4]

守卫(Guard)

增强模式匹配的能力:

max(X, Y) when X > Y -> X;
max(X, Y) -> Y.

记录与流程控制

记录(Record)

定义命名字段的复合结构:

-record(todo, {
  status = reminder,  % 默认值
  who = joe,
  text
}).

case表达式

filter(P, [H|T]) ->
  case P(H) of
    true -> [H|filter(P, T)];
    false -> filter(P, T)
  end.

if表达式

max(X, Y) ->
  if
    X > Y -> X;
    X < Y -> Y;
    true -> nil % 必须有一个分支为真
  end.

异常处理

Erlang有三种异常生成方式:

generate_exception(1) -> a;
generate_exception(2) -> throw(a);
generate_exception(3) -> exit(a);
generate_exception(4) -> {'EXIT', a};
generate_exception(5) -> erlang:error(a).

捕获异常:

try generate_exception(N) of
  Val -> {N, normal, Val}
catch
  throw:X -> {N, caught, thrown, X};
  exit:X -> {N, caught, exited, X};
  error:X -> {N, caught, error, X}
end.

并发编程

Erlang基于Actor模型实现并发:

% 创建进程
spawn(fun() -> 2 + 2 end).

% 消息传递
CalculateArea = spawn(calculateGeometry, calculateArea, []).
CalculateArea ! {circle, 2}. % 发送消息

% 接收消息
calculateArea() ->
    receive
      {rectangle, W, H} -> W * H;
      {circle, R} -> 3.14 * R * R
    end.

单元测试

使用EUnit进行测试:

-module(fib).
-include_lib("eunit/include/eunit.hrl").

fib(0) -> 1;
fib(1) -> 1;
fib(N) when N > 1 -> fib(N-1) + fib(N-2).

fib_test_() ->
    [?_assert(fib(0) =:= 1),
     ?_assertException(error, function_clause, fib(-1))
    ].

总结

本文全面介绍了Erlang的核心概念,包括:

  1. 基本语法和数据类型
  2. 函数式编程特性
  3. 模式匹配和守卫
  4. 记录和流程控制
  5. 异常处理机制
  6. Actor并发模型
  7. 单元测试方法

Erlang独特的并发模型和容错特性使其在电信、金融和即时通讯等领域有着广泛应用。通过掌握这些核心概念,开发者可以构建高可靠性的分布式系统。

learnxinyminutes-docs Code documentation written as code! How novel and totally my idea! learnxinyminutes-docs 项目地址: https://gitcode.com/gh_mirrors/le/learnxinyminutes-docs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

仰北帅Bobbie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值