技术头条 - 一个快速在微博传播文章的方式     搜索本站
您现在的位置首页 --> 发现 --> 你从未听说过的一种编程方式

你从未听说过的一种编程方式

浏览:3203次  出处信息
本文是从 A Programming Idiom You\'ve Never Heard Of 这篇文章翻译而来。

    下面是一系列的动作:

    从小屋里拿出耙子,用它把院子里的树叶堆起来,然后把耙子放回小屋。

    飞到西雅图,看风景,然后飞回。

    把钥匙插进钥匙孔,打开,然后取出钥匙。

    点亮你的手机,查看时间,然后把它置回睡眠状态。

    看到这些模式没?你做一种事情,然后做另外一种事情,然后又撤销你做的第一件事情。或者用更精确的说法,这最后的一步是第一步的反向操作。一旦你认识到这种模式,你会发现它无处不在。拿起茶杯,喝一口茶,放回茶杯。同样,在程序代码里有到处都是:

    打开一个文件,读取内容,关闭文件。

    分配一段内存,用它做一些事情,释放它。

    把内存地址内容加载到寄存器,修改它,然后存回内存。

    虽然这很容易解释,也很容易举出例子,但想实现它却不那么容易。我们需要的这种操作看起来应该像这个样子:idiom(Function1, Function2),于是我们上面说的打开文件的例子应该是idiom(Open, Read)这个样子。问题是,需要有一种程序的方法能知道这“open”的反向操作是“close”。是否有一种语言,里面的方法可以反向执行?

    也许会让你惊讶:有。这就是J语言。我在这里反复唠叨的这种编程模式,实际上是J语言里的一个内置函数,叫做under。在英语里,这打开文件的例子可以说成“read under open”。

    “under”在J语言里一个非常常见的用处就是计算vector的数量级。算法非常简单:平方每个元素,把值加起来,然后取平方根。哈哈,这第三步正好是第一步的反向。求和 “under” 平方。在J语言里的写法是:

    mag =: +/&.:*:

    +/ is “相加”。 这&号,点号,分号序列就是“under”。*:就是“平方”。

建议继续学习:

  1. 面向“接口”编程和面向“实现”编程    (阅读:12437)
  2. 我学编程时犯的最大两个错误    (阅读:6767)
  3. 提高编程技能最有效的方法    (阅读:5531)
  4. 我是如何学习计算机编程的    (阅读:4746)
  5. 函数式编程很难,这正是你要学习它的原因    (阅读:4459)
  6. 如果你看不见你还能编程吗?    (阅读:3918)
  7. 那些曾伴我走过编程之路的软件    (阅读:3614)
  8. 函数式编程    (阅读:3590)
  9. 也谈编程改革    (阅读:3422)
  10. 编程的首要原则(s)是什么?    (阅读:2621)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
© 2009 - 2024 by blogread.cn 微博:@IT技术博客大学习

京ICP备15002552号-1