设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

带你走进Erlang(入门篇)

2015-10-26 20:31| 发布者: joejoe0332| 查看: 740| 评论: 0|原作者: 伍昆|来自: CSDN

摘要: 作为一种通用的面向并发的编程语言,Erlang与其它语言相比有什么特点?在学习Erlang有哪些地方需要注意呢?接本文以系列文的形式对此展开讨论,希望起到抛砖引玉的作用。Erlang的推出则是为了打造一款高并发高扩展性 ...

作为一种通用的面向并发的编程语言,Erlang与其它语言相比有什么特点?在学习Erlang有哪些地方需要注意呢?接本文以系列文的形式对此展开讨论,希望起到抛砖引玉的作用。


Erlang是丑小鸭?

每一门编程语言的推出都是有目标的。大多数的目标是为了:提升性能,提升开发者表现力,提升开发者生产力,如Haskell,Python,Go等都是以这三点为主要设计核心的。

Erlang的推出则是为了打造一款高并发高扩展性的实时系统。例如应用于电信,银行,商业,即时通讯等场合。Erlang的运行时系统内置了对并发,分布式,容错等的处理。可见与其它以速度,简洁,表达性见长的语言相比,Erlang无疑就是只默默无闻的丑小鸭。

Erlang的容错能力是它与生俱来的的能力,因为这是电信领域的重要需求。但是这并不代表Erlang是复杂的、不具表达力的。


语法

Erlang的语法是很简单的,总共只有550行代码。因此尽管erlang语法与主流语言比有所不同,但是掌握起来也是很轻松地。连贯性是它的亮点,请看如下代码:


我们在erlang shell中执行它


再来看一个复杂一点的代码:


这个例子里使用了模式匹配功能,稍后再详细讲。现在尝试调用fac函数:


怎么样?它的语法不复杂吧,我想只有Lisps可与之媲美简单性。


表达性

当说到Erlang表达性的时候,第一时间想到的可能是消息传递,过程创建和管理。然而这里的重点是模式匹配,特别是接收消息后,模式匹配可使其处理变得非常简便。请相当这个以下这个模式匹配的例子:


首先,我们想访问Body和Headers变量。Shell提示的非常清楚:变量是非约束的。接下来尝试做更有趣的。


复制之前的代码后,接下来我们将会使用到http库(ibrowse):


然后执行shell


回到之前的代码里,


这里从ibrowse里调用了send_req函数。第一个参数是URL。第二场数是headers列表,即我们想发送的请求。在这里我们没有发送任何的header。最后,第三个参数是我们指定的请求动作。


接下来看看其执行结果:


其输出是包含4个元素的数组,{Term1,…,TermN}。Erlang数组与Python数组是很相似的。第一个元素是“ok”信息,说明程序执行正常。第二个元素是302,HTTP状态码302表示用户被重定向。第三个元素是google返回给我们的headers结果。


接下来尝试存储该结果:


其运作过程是:我们发送了一个请求给google,然后google对此进行响应并返回结果。ok是一个原子,302是一个字符串。他们都没有被指派,因为他们不是变量。但为什么这里使用了“=”号?原因在于Erlang中“=”号是作用不是指派。由于Erlang支持模式匹配机制,“=”在这里会作为匹配符来使用。它会尝试寻找“=”号左右两部分的共同点,然后把值与非约束变量进行绑定,因此最后会把值指派到正确的变量。


所以从ibrowse得到的结果是:send_req,Erlang会认为我们得到了一个以元素ok和302为开头的一个四元数组。然后因为Headers和Body是非约束的,所以把Google返回的对应内容进行指派。


也就是说,模式匹配是与它语言的switch或if/else/elif有着异曲同工之妙。


过程和消息


在函数式编程里函数的地位是举足轻重的。他们可以被指派到变量,或是作为参数传给其它函数或从其它函数里作为返回值返回。不妨把函数看作是其它类型。


Erlang创建一个过程是很简单的,这里使用了内置的spawn函数进行过程创建。



Spawn的作用是创建新过程并返回PID过程标识。



如果你想针对消息进行处理,而不仅仅局限于在shell中检视结果,可以进行如下处理:



这里创建了一个Echofun函数,作用是接收消息并显示。



写在最后

以上是有关Erlang入门的初步介绍,有关消息传递,模式匹配,轻过程等更多内容将会在后续继续讲解。

  • 安装Erlang17,安装链接
  • 基本HTTP知识,阅读链接

酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部