【问题标题】:CoffeeScript function parenthesesCoffeeScript 函数括号
【发布时间】:2013-11-04 12:26:49
【问题描述】:

我刚刚学习 CoffeeScript,我正在尝试做一些我通常会用普通的 ol JavaScript 做的事情。

这是我尝试做的:

initializeWebGL = (canvas) ->
    gl = canvas.getContext "webgl" or canvas.getContext "experimental-webgl"

这符合我的期望:

var initializeWebGL;

initializeWebGL = function(canvas) {
  var gl;
  return gl = canvas.getContext("webgl" || canvas.getContext("experimental-webgl"));
};

为了得到我真正想要的,我必须将getContext 参数用括号括起来:

initializeWebGL = (canvas) ->
    gl = canvas.getContext("webgl") or canvas.getContext("experimental-webgl")

产生我想要的东西:

var initializeWebGL;

initializeWebGL = function(canvas) {
  var gl;
  return gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
};

除了像第二个示例那样在函数调用周围添加括号之外,还有更好的方法来实现我想要实现的目标吗?

【问题讨论】:

  • 我(几乎)在调用函数时总是包含括号,这样我就不必在精神上解析代码来知道它在做什么:括号增加可读性和可读性更重要比正统。在您的具体情况下,如果您不喜欢 CoffeeScript 解释代码的方式,请添加括号来强制解决问题,这就是它们的用途。
  • 仅仅因为 Coffeescript 足够聪明,可以识别函数参数(在许多情况下),并不意味着您现在(或者在您维护代码 6 个月后将会)。

标签: coffeescript


【解决方案1】:

除了像第二个示例那样在函数调用周围添加括号之外,还有更好的方法来实现我想要实现的目标吗?

不,我不这么认为。我的经验法则是,当函数调用及其参数是一行的最后一件事时,可以省略括号,否则包括它们。

好的

someFunction 1, 2, 3

不行

someFunction 1, someOtherFunction 2, 3

总的来说,我尽量避免过于简洁、简洁的陈述。它们在精神上更难处理,而在调试器中单步执行则更棘手。

【讨论】:

  • 您还应该避免使用 somefunction 1, 2 .callback (para),因为它会尝试在 2 上运行回调。如果它与 promises/ .then 一起使用。
【解决方案2】:

我不会说这是更好的方法,但你可以这样做:

initializeWebGL = (canvas) ->
  gl = canvas.getContext "webgl"
  gl = gl or canvas.getContext "experimental-webgl"

我个人更喜欢可读性而不是编写更少的代码:

initializeWebGL = (canvas) ->
  gl = canvas.getContext "webgl"
  if !gl? then gl = canvas.getContext "experimental-webgl"

【讨论】:

  • 这取决于什么是“可读性”。这是非常主观的。例如,第二个示例对我来说比第一个更具可读性。
猜你喜欢
  • 1970-01-01
  • 2013-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-25
  • 1970-01-01
  • 1970-01-01
  • 2012-02-17
相关资源
最近更新 更多