erlang开发入门

简介: 最先接触erlang是在今年的年初,当时是因为RabbitMQ而结识的erlang,了解后才知道的COP(Concurrency Oriented Programming)面向并发编程。

最先接触erlang是在今年的年初,当时是因为RabbitMQ而结识的erlang,了解后才知道的COP(Concurrency Oriented Programming)面向并发编程。

为什么我会决定要学习Erlang,首先是因为我对函数式编程的好奇,一直以来我都觉得很神秘,然后主要的原因还是我想通过学习Erlang去了解RabbitMQ、ejabberd、Tsung这几个比较出名的技术,RabbitMQ是高性能的消息中间件,ejabberd是基于XMPP协议的高性能的IM服务器,Tsung是高并发的负载测试工具。决定学习Erlang后,我选择了一本教程《Erlang程序设计》开始了erlang的学习之路,而且这本书是由Erlang之父Joe Armstrong编写的,这本书由基础开始,比较适合我。

开始编程之前要先安装Erlang的运行环境和开发环境,我安装的是otp_win32_R16B02.exe,因为我用的是32位的windows7,这个otp带了erts-5.10.3,erts是运行Erlang的VM(虚拟机),otp则是开放的erlang的一些函数库,开发工具的选的是经常使用的Eclipse+erlide插件。

以下是我在学习Erlang程序设计的基础知识时的笔记:

1,原子:就是常量,全局有效
2,元组:大括号括起来的项,逗号隔开,首位可表示意义
3,列表:中括号括起来,逗号隔开,表头与表尾
4,模式匹配:变量与常量或表达式的对应关系,提取元素
5,字符串:ASCII码整数列表,$引用
6,模块:.erl文件,编译后为.beam文件
7,erlang中的三种标点符号的使用:逗号(分隔参数),分号(分隔子句),句点(分隔完整的函数和表达式)
8,函数的目:就是函数拥有的参数个数,用 /n 表示
9,fun:匿名函数
10,命名原则:变量大写开头,原子(常量)小写开头
11,类似与JAVA中的重载写法:分号分隔,模式匹配成功执行,不同目的函数是完全不相同的两个函数
12,函数式编程:fun函数既可以作为函数的参数,又可以作为函数的结果,还可以赋给变量(类似JS里的function)
13,高阶函数:能够返回fun或接受fun为参数的函数
14,恒等测试符号:=:=,返回true或false
15,list:map/2这样的函数:list模块中的函数很常见
16,注释:%与%%(自动缩排功能)
17,erlang中为什么没有for循环:因为有了强大的模式匹配
18,申明:-import(模块名,[逗号分隔人方法名]),申明导入的外部模块,与-export([逗号分隔人方法名]),申明导出的模块给外部调用
19,断言与断言序列:when,可以用分号隔开
20,记录(元组的伪装):-record(记录名,{ 名称(记录中的字段名)=元组中的元素,逗号分隔开 }),当元组庞大时方便记忆
21,需要知道的语法含义:-behaviour,-module,-export,-include,-define,-ifdef,-type,-spec,-endif,-record
22,erlang中的任何东西都是表达式,所有的表达式都有值
23,异常处理:模式匹配不成功时会有异常,try...of...catch...after...end,catch的是描述错误的一个元组,但常用case...of...end处理异常
24,BIF:内建函数,类似于JAVA中JDK提供的API,也就是库函数,所有的BIF都在erlang模块(module)中
25,二进制数据:<< 数据值 >>,ASCII码值
26,BIF apply:尽量少用
27,预定义模块属性与用户属性:-AtomTag(...),-module,-export,-import,-compile,-vsn
28,表达式序列与表达式块的值是最后一个表达式的值:begin...end,逗号隔开
29,包含文件:-include_lib(Name),引入库中的包含文件
30,列表操作符++与--:二元操作运算符,功能是列表的合并与删除
31,宏:-define(Constant,Replacement),条件宏,-undef(Macro),-ifdef(Macro),-ifndef(Macro),-else,-endif
32,进程字典:类似JAVA中的ThreadLocal,避免使用
33,各种比较表达式:>,<,=<,>=,等于==,不等于/=,恒(全)等于=:=,不全等于=/=
34,可视化工具:webtool:start(). http://127.0.0.1:8888/
35,并发原语:spawn、send、receive


总结一下:

其实Erlang集成了很多语言的特点,首先要理解什么是函数式编程语言和面向并发编程,当然,对于初学者的我还只有一个模糊的概念。看Erlang的代码到处是函数,我个人觉得Erlang还有一个核心的设计就是模式的匹配,像类C的语言里的for循环在Erlang中就找不到,代替的就是模式匹配。下面举个例子:

-module(test).

%% ====================================================================
%% API functions
%% ====================================================================
-export([area/2]).

area(c,{R,L,H}) ->
	R * L * H;
area(t,{R,L}) ->
	R * L;
area(m,{R}) ->
	R * R.

测试的结果如下:


Erlang里面还有一个重要的语法,就是元组(tuple),对于元组还有一个外衣叫记录(record),上面area的第二个参数就是元组,再给个元组的另一个简单用法:


-module(test).

%% ====================================================================
%% API functions
%% ====================================================================
-export([look/0]).


-record(person,{
			name=vince,
			age=25,
			sex=male				
		}).

look() ->
	X = #person{}.

测试结果如下:

 Erlang还有热替换的功能,在我改代码后不需要重新启动就可以得出修改后的结果。

今天介绍的只是入门级的知识,在我深入学习并用Erlang编写程序后再断续更新,最后解读ejabberd和Erlang的高并发之迷。

目录
相关文章
|
Kubernetes Shell 芯片
时间老去,Ruby不死,Ruby语言基础入门教程之Ruby3全平台开发环境搭建EP00
如果说电子游戏是第九艺术,那么,编程技术则配得上第十艺术的雅称。艺术发展的普遍规律就是要给与人们对于艺术作品的更高层感受,而Matz的Ruby语言则正是这样一件艺术品。 无论是语法还是理念,都让Ruby开发者感受到款待,如此,Ruby代码就像活了过来,它们时而高声,却藏不住优雅,时而细语,却意外地铿锵,真是美妙,这种庄重而温柔的魅力,用那一代奉松本行弘为偶像的人的话说,叫剑胆琴心。现在的话又讲,心有猛虎,细嗅蔷薇。
时间老去,Ruby不死,Ruby语言基础入门教程之Ruby3全平台开发环境搭建EP00
|
算法 Ruby
【Ruby on Rails全栈课程】2.1 ruby语言入门
在第一章中,项目我们已经创建好并且能输出第一个helloworld了,我们先不急着做项目,先了解一下ruby,只是需要看得懂代码。这一章我们简单介绍一些ruby语言的语法
136 0
|
网络安全 数据库 数据安全/隐私保护
【Ruby on Rails全栈课程】3.5 注册功能
订阅专栏 注册页面成功显示之后,我们开始实现注册功能~~ 1、功能描述 (1)注册时需要填写信息:用户名、邮箱、密码、确认密码、选择角色 (2)用户角色分为普通用户、管理员、超级管理员,后期方便对用户进行权限管理 (3)邮箱要求唯一,注册成功发送欢迎邮件到注册邮箱(之后章节讲解) (4)密码需要通过SSL进行加密之后,存入到数据库 (5)用户名的长度规定小于等于5个字符、密码和确认密码需要一致
75 0
|
Ruby
【Ruby on Rails全栈课程】2.9 ruby的控制结构
1、条件判断语句 (1)if 如果case1条件为true,则执行code1(执行完case1,条件判断语句结束,不会再去判断case2条件是否为true)。如果case1条件为false,接着判断case2条件,若为true,执行code2,若为false,则执行else子句中的code3。
51 0
|
Go 调度 云计算
为什么我们放弃了Erlang技术栈
结合小博无线技术团队的具体经验,深入讨论了Erlang技术栈在云计算环境中所遇到的问题。
11848 2
|
测试技术 Shell 开发工具
|
C#
[Erlang 0112] Elixir Protocols
Why Elixir        为什么要学习Elixir?答案很简单,为了更好的学习Erlang.这么无厘头的理由?      Erlang语法设计几乎没有考虑过取悦开发者,所以学习之初的门槛略高.
1170 0