javascript / nodejs中的功能思维

时间:2013-06-10 17:41:03

标签: javascript node.js functional-programming

我是一个关于javascript中的功能性思维的新手阅读。我的背景主要是Java / Ruby中的OOP。

假设我想在节点中获取用户输入,我可以这样做:

process.stdin.resume();
process.stdin.setEncoding("ascii");
var input_buffer = "";

process.stdin.on("data", function (input) {
  input_buffer += input;
});

function process_input()
{
  // Process input_buffer here.
  do_something_else();
}

function do_something_else()
{

}
process.stdin.on("end",process_input);

我在这里保持明确的状态。实现相同目标的功能方法是什么?

1 个答案:

答案 0 :(得分:5)

  1. 为尽可能多的程序编写纯函数
    • 没有I / O,没有副作用,没有可变数据结构等
  2. 让您的I / O保持清洁分离和整理

  3. 所以一般来说,纯功能程序员喜欢将他们的I / O代码保存在一个包含良好的小盒子中,这样他们就可以尽可能地集中精力编写接受内存数据类型作为参数和返回值的纯函数(或使用值调用回调。所以考虑到这一点,基本的想法是:

    //Here's a pure function. Does no I/O. No side effects.
    //No mutable data structures. Easy to test and mock.
    function processSomeData(theData) {
      //useful code here
      return theData + " is now useful";
    }
    
    //Here's the "yucky" I/O kept in a small box with a heavy lid
    function gatherInput(callback) {
      var input = [];
      process.stdin.on('data', function (chunk) {input.push(chunk);});
      process.stdin.on('end', function () {callback(input.join('');});
    
    }
    
    //Here's the glue to make it all run together
    gatherInput(processSomeData);