需要同步编程

时间:2011-04-25 23:22:09

标签: oop programming-languages asynchronous

编辑:这个问题很糟糕。我真正想问的是:

是否有什么东西不能用OO语言编写(支持闭包)使用延续传递方式?

你可以谷歌CPS的意思或者只是坚持功能/方法的定义永远不会返回任何东西,总是在某处推送数据 - 使用传递的回调。

从原始问题开始,我甚至可以回答自己 - 没有那样的。而且它实际上是非常好的OO原则,叫做告诉不要问

function getName(){
  return this.name;
}

console.log(xyz.getName())

VS

function pushNameTo(callback){
  callback(this.name);
}

xyz.pushNameTo(console.log)

很好,但这一次是以如何命名的,让它在它做什么之后命名并使其更加OO:

function renderOn(responseBuilder){
  var b = responseBuilder;

  //or just string, whatever, depending on your builder implementation
  b.field("Name: ", this.name);
  b.field("Age: ", this.age);
  b.image("Profile photo", this.imageData);
}

person.renderOn(htmlBuilder);

这里的要点是 - 对象不仅包含其数据,还包括行为,精神,个性。 还有谁应该负责表达个人的陈述而非个人本身?

当然,这并不一定意味着您的代码中应该包含html,构建器可以实现此目的。它甚至可以为实际的UI渲染层生成一些xml或其他数据格式。但它总是推动而不是拉动。

2 个答案:

答案 0 :(得分:3)

当然没什么。考虑一下:如果你有一个完全顺序的程序,你可以简单地将它插入某种包装器,如document.onload()。然后顺序程序将异步启动。

反过来说,如果你拥有的只是一种同步语言,你总是可以通过创建一个要执行的片段表来编写异步案例,以及一个内部循环,它看起来已经启用了什么,然后接受它从表中执行。事实上,这看起来非常像你的javascript运行的底层运行时。

答案 1 :(得分:0)

有两种类型的程序 - 命令式和功能性。

势在必行的计划是一步一步的。 C ++,Java等就是例子。

功能程序可能不是顺序的。大多数异步模式都使用“延续式”编程,这是一种具有强制性泛音的函数式编程。

JavaScript是一种具有一流功能的命令式语言,即它还支持某些函数式编程范例。

您在问题中描述的是“延续式”异步编程。请注意,“延续”的含义是“此行之后的其余程序”。因此,理论上,每个命令性程序都可以以“连续”方式重写(即,第一行继续从第二行开始的程序的其余部分,依此类推等等)。例如:

Statement #1
Statement #2
Statement #3

可以改写为:

do(Statement #1, function{
  do(Statement #2, function{
    Statement #3
  })
})

其中do的第二个参数是语句的延续。

虽然循环更棘手,但它们也可以类似地重写 - 基本上将循环体itsslef作为延续。