CoffeeScript 函数括号

4

我正在学习 CoffeeScript,尝试用它完成平常使用 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");
};

有没有比第二个示例中只是在函数调用周围添加括号更好的方法来实现我想要的效果?


2
我(几乎)总是在调用函数时包括括号,这样我就不必在脑海中解析代码以了解它正在做什么:括号增加了可读性,而可读性比正统更重要。在您的特定情况下,如果您不喜欢CoffeeScript如何解释您的代码,则添加括号以强制执行该问题,这就是它们的作用。 - mu is too short
仅仅因为Coffeescript聪明到可以识别函数参数(在很多情况下),并不意味着你也是这样的(或者在六个月后维护代码时会变得聪明)。 - hpaulj
2个回答

5

有没有更好的方法来实现我想要的效果,而不仅仅是像第二个例子一样在函数调用周围添加括号?

不,我认为没有。我的经验法则是,当函数调用及其参数是行末时,可以省略括号,否则应包括它们。

好的

someFunction 1, 2, 3

不好

someFunction 1, someOtherFunction 2, 3

一般来说,我会尽量避免使用过于简洁的陈述。这种陈述不仅在思维上更难处理,而且在调试器中跟踪时也更加棘手。


你还应该避免使用 somefunction 1, 2 .callback (para),因为它会尝试在 2 上运行回调函数。如果使用 promises/ .then,可以解决这个问题。 - andig

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

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

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"

这取决于什么是“可读性”。这是非常主观的。例如,第二个例子对我来说比第一个更易读。 - Martin Poljak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接