Chinaunix首页 | 论坛 | 博客
  • 博客访问: 8104089
  • 博文数量: 159
  • 博客积分: 10424
  • 博客等级: 少将
  • 技术积分: 14615
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-14 12:45
个人简介

啦啦啦~~~

文章分类
文章存档

2015年(5)

2014年(1)

2013年(5)

2012年(10)

2011年(116)

2010年(22)

分类: LINUX

2011-12-29 23:09:23

作者:gfree.wind@gmail.com
博客:blog.focus-linux.net   linuxfocus.blog.chinaunix.net
 
 
本文的copyleft归gfree.wind@gmail.com所有,使用GPL发布,可以自由拷贝,转载。但转载请保持文档的完整性,注明原作者及原链接,严禁用于任何商业用途。
======================================================================================================

根据很多大师的经验,学习一门新的语言,会给程序员带来一个新的编程视角。尤其是这门语言的思想或者方法与程序员最擅长的语言不同。

以我自己来说,最擅长的是C——面向过程的语言,C++也还凑合,但是缺乏大型项目的境遇。不过由于一直喜欢C++,所以经典的C++书籍都认真拜读过,因此C++的语法和细节还算比较清楚。这又是一个面向对象的语言。

就语言本身来说,不过是种工具。比如C虽然是面向过程的语言,但是照样可以使用C写出很好的面向对象的代码。反之亦然。不过由于C本身不是天然的面向对象,所以还是有一定的局限性。对于实现所以的面向对象的思想,还是不太自然。

扯远了,往回扯。所以这次我要选择一个另外一种思想的语言,即面向函数的编程语言。最早我想体验一下Lisp,但是看了一点就觉得对于Lisp的语法,我还是很抵触的。没有兴趣的东西,学起来肯定是事倍功半。后来看了点Haskell,就是《Real Word Haskell》,至少在开头几页,觉得还不错,挺有兴趣。那么就选择它了。

为了尊重历史,我的第一个Haskell代码,仍然是永恒的“Hello World\n”。
  1. -- file: hello world.hs
  2. main = putStrLn "Hello World!\n"
运行:
  1. [fgao@fgao-vm-fc13 haskell]$ runghc hello_world.hl
  2. Hello World!
 
这个纯粹是玩笑了。一点都没有体现Haskell的思想。借用书中的一段话。"In Haskell, we deemphasize code that modifies data. Instead, we focus on functions that take immutable values as input and produce new values as output. Given the same inputs, these functions always return the same results. This is a core idea behind func-tional programming."

大师就是大师,一句话就可以概括本质,突出主要思想。对于面向函数的编程来说,给定相同的输入,函数总是返回相同的结果。

这句话看似简单,其实是一种设计思想。乍一看,好像说的很平常,对于函数来说,相同的输入不就是该产生相同的结果嘛。但仔细想想,在我们平常的代码中,我们的函数是否真的做到了这一点?有多少函数会依赖于外界的状态,而导致相同的输入,而产生不同的结果。

如果做到上面的那个原则,无疑给代码的维护和测试带来极大的便利。虽然我平时的工作中,大部分的代码都是不依赖于外界的状态的。但是有些地方,难免会有对外界状态的判断。也就是说,平时在不知不觉中,已经是向着这个目标努力的。不过却没有真正总结这样做的好处。

当我看到上面那句话的时候,已经觉得去学习这个绝不会应用于工作中的Haskell,不是浪费,是值得的。
阅读(7238) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

fera2012-05-08 13:48:16

scheme、haskell、erlang、common lisp等等各自有不同的应用场景

GFree_Wind2012-01-11 15:49:52

erazy0: 咋不试试scheme,我觉得挺好.....
听说过,还没尝试呢。