1、何为Erlang?
Erlang是一种通用的面向并发的编程语言,内建了并行的计算支持,非常适合构建分布式应用和实时软件并行计算系统。使用Erlang编写的应用运行时通常由成千上万个轻量级进程组成,并通过消息相互传递。比起C程序的切换更为高效。
如果说c++构建高并发的服务框架程序,Erlang不仅高效而且简单。尤其是Erlang编写的分布式应用的软件,分布式机制透明。因此对于我们写的程序来说,并不知道自己是在分布式运行的。
从运行时的环境上来说,Erlang也需要一个虚拟机,类似JAVA的虚拟机,.net的Framework,这样代码一次编译,随处运行。更可观的是,它的运行时系统甚至允许代码再不中断的情况下更新。
2、Erlang的特性:
3、Erlang 如何学习?
好好学习,天天向上吧,多看官网,多code。多翻资料。现在我们就来介绍下Erlang 的一些知识:
1)创建一个Module,等同我们常说的OOP中的Class。Module中可以包含一些对象的属性和方法。如:
创建一个Module名为test的erl文件,
vim test.erl.
2)声明一个类test,这里的.代表着该语句结束。
-module(test).
3)创建一个函数
bbs(cc) -> 12*cc.
注意这里的->相当于我们程序中的{}
4)执行函数调用,export
-export([bbs/1]).
注意:Erlang为弱类型,其函数体命名的方式为:
函数名(参数名) ->
函数体内部
如果要执行该函数的话,则为-export([函数名/1]).
完成以上代码后,我们现在来编译下这个例子
进入erlang编译环境:erl
输入c(test).
输入:test:bbs(10).
结果:120.
4.Erlang的开发规范:
一:开始
每条语句以一个“.”结束
Erlang遵守四则表达式的规则
可以计算很大的数字
二:变量
1.所有的变量名都必须以大写字母开头
2.变量只能赋值一次。即变量不能多次赋值,否则会得到一个错误
首先:用户定义的变量并不是真正意义上的变量;
其次:"="并不是一个赋值操作符
3.事实上"="是一个模式匹配操作符,对于一个未绑定变量来讲,它的行为类似与赋值操作
4.变量有作用域,即多个函数内的同一个变量有不同的值
5.Erlang中的=号是一个模式匹配操作符
6.=号的作用是先计算右边的操作数类型,然后与左值的类型匹配
7.对于一个变量,它只是一种简单的类型。未绑定变量作为左值时先是给它匹配上一个右值类型
8.=号的右值可以是变量或其他的类型,如序列和列表
注:由于变量的一次赋值性,在Erlang中没有共享内存,所以便于编写并行化的程序。
三:浮点数
1. /号返回浮点数除法的商
2.div 号返回整数除法的商
3.rem 号返回整数除法的余数
四:原子量(Atoms)
1.Erlang中atoms用来表示不同的常量
2.atoms是全局性的
3.atoms以小写字母开头,后面跟上数字,字符,下划线,或“@”,例如:: red,
december, cat, meters, yards, , and a_long_name.
4.atoms可以用单引号引起来,使用这种形式后可以创建大写字符开头的atoms,或
者包含非数值字符的atoms,例如’Monday’, ’Tuesday’, ’+’, ’*’,
’an atom with spaces’
5.atoms的值只是atom
五:元组(Tuples)
1.使用tuple可以实现复杂的数据结构
2.使用封闭的花括号创建tuple,其中的数据项是匿名的
3.tuples可以嵌套使用
4.tuple有垃圾回收机制,无需自己整理内存,当变量不使用后可以自动回收空间。
5.可以将一个tuple绑定到一个变量上,之后这个变量也就有了相同的结构
6.可以使用将一个结构相同的tuple变量赋值给另一个tuple(不能是tuple变量),则会将tuple变量中的
对应值赋给左值tuple中的对应变量。例如Point = {point, 10, 45}. {point, X, Y} = Point.之后
则精确的将10赋给X,45赋给Y。其中的point可以是=号两边精确的匹配,体现=号的匹配作用
7. 1> Person={person,{name,{first,joe},{last,armstrong}},{footsize,42}}.
2> {_,{_,{_,Who},_},_} = Person.
如上,_是一个占位符,这样可以用单个变量提取tuple中的值。在Erlang中称其为匿名变量。
六:列表(list)
1.list可以用来存储一系列量。
2.使用[]来创建列表。
3.可以使用[X|Y]=L来提取L中的最左边的一个值到X,而将剩余的部分赋给Y
例如:1> ThingsToBuy = [{apples,10},{pears,6},{milk,3}].
3> ThingsToBuy1 = [{oranges,4},{newspaper,1}|ThingsToBuy].
4> [Buy1|ThingsToBuy2] = ThingsToBuy1.
5> [Buy2,Buy3|ThingsToBuy3] = ThingsToBuy2.
之后则
Buy1={oranges,4}
ThingsToBuy1=[{oranges,4},{newspaper,1},{apples,10},{pears,6},{milk,3}]
ThingsToBuy2=[{newspaper,1}, {apples,10}, {pears,6}, {milk,3}].
Buy2= {newspaper,1},
Buy3 = {apples,10},
ThingsToBuy3=[{pears,6}, {milk,3}]
七:字符串(Strings)
1.字符串实际上是只是一个整数的列表(list)
2.字符串用双引号标记
3.当一个列表中的元素都为可打印字符的ASCII码时显示出的就是这个列表对应的字符串。
4.可以将$号放在一个可显示的字符前时,即可取出该字符的ASCII码
5.Erlang的字符串中使用的字符集是Latin-1 (ISO-8859-1)
八:1.在shell中输入f()后可以是所有的已经绑定的变量解除绑定
5、注意事项:
(函数名/1):代表有Module内只有1个方法
(函数名/2):代表Module内有两个方法,且方法重名,参数个数相等。以此类推