首页 > 代码库 > Why Erlang? - partial

Why Erlang? - partial

前言

希望不是一个坑。计划采用结构化拖延策略,在死线(7月是计划中的Erlang月)前写完。

 

完美的计划

相对于Java而言Erlang的优势或有意思的地方:命令式语言 V.S. 函数式语言,线程抽象和体系结构,分布式编程支持度

 

残酷而丑陋的实践

示例1 快排

Java实现(数据结构与算法-排序算法-partial http://www.cnblogs.com/zhoujiagen/p/3690243.html)

Erlang实现

 1 -module(lib_misc). 2  3 %% API 4 -export([for/3, qsort/1]). 5  6 %%%=================================================================== 7 %%% API 8 %%%=================================================================== 9 % simulate ‘for‘ syntax contructor - inner DSL 10 for(Max, Max, F) ->11     [F(Max)];12 for(I, Max, F) ->13     [F(I)|for(I+1, Max, F)].14 15 % quick sort16 qsort([]) ->17     [];18 qsort([Pivot|T]) ->19     qsort([X || X<-T, X < Pivot])20     ++ [Pivot] ++21     qsort([X || X<-T, X > Pivot]).22 23 24 %%--------------------------------------------------------------------25 %% @doc26 %% @spec27 %% @end28 %%--------------------------------------------------------------------29 30 %%%===================================================================31 %%% Internal functions32 %%%===================================================================
View Code

脑洞大开,语言是程序员的武器,具备接近问题本质表达能力的语言不可避免的很简洁。

 

示例2 继承

计算图形的面积,只要计算长方形、正方形和圆的面积。

正统的OO程序员(包括我)用Java实现时需要四个类。

Erlang实现

 1 %%%------------------------------------------------------------------- 2 %%% @author  <lenovo@ZHOUJIAGEN> 3 %%% @copyright (C) 2014,  4 %%% @doc 5 %%% 6 %%% @end 7 %%% Created :  6 Jul 2014 by  <lenovo@ZHOUJIAGEN> 8 %%%------------------------------------------------------------------- 9 -module(geometry).10 11 %% API12 -export([area/1]).13 14 %%%===================================================================15 %%% API16 %%%===================================================================17 area({rectangle, Width, Height}) ->18     Width * Height;19 area({square, Side}) ->20     Side * Side;21 area({circle, Radius}) ->22     3.14159 * Radius * Radius.23 24 %%--------------------------------------------------------------------25 %% @doc26 %% @spec27 %% @end28 %%--------------------------------------------------------------------29 30 %%%===================================================================31 %%% Internal functions32 %%%===================================================================
View Code

好吧,好像用枚举的Java实现也可以很简洁。

另一个例子,虽然我是Python二把刀,但我敢说Python写的数据库访问代码比Java JDBC访问代码短80%。

没别的意思,只是想表达出虽然条条道路通罗马,大多数人还是比较喜欢路程短的道路。