April 11, 2017

继续探索with语句

在上一篇博客《漂亮的with,鱼与熊掌可以兼得》中,展现了with的优雅之处,然而在比较with与|>时,言犹未尽,讲得不够透彻。

在那篇博客中,我说:

毕竟with/1并不是try/catch,它并不能捕获执行中抛出的错误,然后转向else进行错误处理。只有当模式匹配出现错误时,才会转向else。

要优雅地处理错误,并用优雅的with/1将逻辑串联起来,就需要重构get_user,get_response,send_response等函数。当程序逻辑正确时,返回一个tuple对象{:ok, result};如果出现错误,则返回{:error, error}。

如果进行了这样......

April 05, 2017

漂亮的with,鱼与熊掌可以兼得

假设要加载磁盘上的一个文件,并以二进制形式读取文件的数据。若要从健壮性的角度考虑,需得考虑两种异常情况:

加载文件失败,例如给定的文件路径并不存在该文件

读取文件数据失败,例如磁盘扇区有故障

显然,生活中总是存在着例外,我们不能乐观对待,还得未雨绸缪,唯有对这些异常情况做充分判断,由代码组成的软件系统才够健壮:

case File.read(path) do

{:ok, binary} ->

case :beam_lib.chunks(binary, :abstract_code) do

{:ok, data} ->

......

March 04, 2017

有趣的Code Poster

Pete Corey的博客《Build your own code poster with Elixir》展示了如何通过Elixir实现一个类似Commits.io一样的功能,即可以将自己的代码融合到一张LOGO图片中,例如这样的效果:

这很有趣。

实现代码并不复杂,不到200行代码。虽然简单,代码却很好地体现了Elixir编程的风格。这种风格提倡运用|>管道符以流的形式传递数据,体现函数组合子的强大威力。针对问题域,我们的解决方案是思考数据流动的方向,......

February 09, 2017

神奇的仙丹,性感的Elixir

在IT世界里,没有银弹,但却有神奇的仙丹(Elixir)。我不知道是什么灵感刺激这门语言的创造者José Valim想到了这么酷的命名,但这枚仙丹确实经由多种神奇的灵药炼制而成,这些灵药包括Erlang、Ruby、Clojure、Haskell。

品尝这枚仙丹确实令人飘飘欲仙,至少,我在浅尝Elixir时,这种奇妙的感觉一直萦绕在我心间,怦然心动因而不舍离去。或许如Erlang之父Joe Armstrong所说,是“一种先行于逻辑的内心感性的感觉”;又或者如Dave Th......