erlang浅谈(2)--语言特点

1. 结构: 应用--<>模块--<>函数--<>语句--<>子语句--<>表达式--<>子语句..

2. 函数式编程

a) 函数式编程,本身不存放状态,对它的影响只有输入参数,而它的影响就是输出函数。

b) 函数式编程,是分布式应用中,高并发,代码热替换的基石

c) Erlang应用就是由这些函数构成的,它的重要理念,everything is function,所有的函数都有返回值。(相当于默认最后一句就是return的值)

3. 变量

a) Erlang是面向函数式编程的,进程本身没有全局变量。

b) 在函数上下文中,可有局部变量,所有的局部变量都是readonly,及只能赋值一次

4. 尾递归优化

a) Erlang没有循环,如果要实现循环只能通过递归来实现。

b) Erlang对函数调回,如果该函数后面没有下文,则被优化,栈空间不会被占用

先看一个例子,对前面的一个总结

raw_read_loop(File, Acc) ->  %%函数

    case file:read(File, 10) of

        {ok, Bytes} ->

            raw_read_loop(File, [Acc | Bytes]);  %%递归实现循环,尾递归优化

        eof ->

            file:close(File),        %%表达式直接用逗号隔开

            {ok, iolist_to_binary(Acc)};  %%子语句用分号隔开

        {error, Reason} ->

            file:close(File),

            erlang:error(Reason)

end.

5. 模式匹配

a) 这个是横行于Erlang和区别其他语言的重要特性

b) 通过模式匹配把函数拆分成多个子句

convert_to_celsius({Name, {c, Temp}}) ->  

    {Name, {c, Temp}};  %%子句

convert_to_celsius({Name, {f, Temp}}) ->  

    {Name, {c, (Temp - 32) * 5 / 9}}.


调用convert_to_celsius("ABC", {f, 1234}}) . 根据(f),将匹配第二句

c) 分支判断

case catch onecached_storage:get_item(Storage, Key) of

{ok, {Flags, Data}} ->

    ...

none ->

    ok;

Other ->

 ...

 end.

d) 协议匹配

case Packet of

    <<Len:16,  PayLoad:Len/binary, 16#ef>> ->

        {body, PayLoad};

    _ ->

        {error, invalid_packet}

end.

总结:

主要说他的限制把,Erlang不是GSL(通用语言),因此使用性和流行度上有天生的限制。流行度不够,所以发展也相对缓慢。其纯函数式编程,对那些复杂业务编程不太适合。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值