【问题标题】:Is this redundant?这是多余的吗?
【发布时间】:2019-07-10 18:43:07
【问题描述】:

这是多余的吗?有没有更简单的写法?

  if(e.range.getSheet().getName() == 'Estimate'){  
    var thisss = SpreadsheetApp.getActive().getSheetByName('Estimate');
  }

【问题讨论】:

  • e.range.getSheet() 通常用于 onEdit() 函数以返回当前脚本中未涉及的工作表。因此,if 语句中发生的所有事情都涉及到“估计”的活动工作表,是的,它是多余的。如果我要多次使用 e.range.getSheet(),那么我通常会在函数的开头做一个类似 var sh=e.range.getSheet() 的声明。
  • 人们这样做的原因是因为不使用事件对象更容易调试 onEdit() 函数。不幸的是,它还占用了必须在 30 秒内完成的功能的处理时间。所以最好先做一次var sh=e.range.getSheet(),然后在if的范围内使用引用变量sh

标签: javascript google-apps-script triggers


【解决方案1】:

是的。这称为WET 解决方案。

DRY(不要重复自己)原则被表述为“系统中的每条知识都必须有一个单一的、明确的、权威的表示”。

简单地说,如果你跟踪代码的一个分支(比如一个变量信息),它应该有一行到树/代码的根,并且不能在代码的其他地方重复。

if(e.range.getSheet().getName() == 'Estimate'){  
  var sheet1 = SpreadsheetApp.getActive().getSheetByName('Estimate');
}

这里有两个分支(e.range.getSheet()SpreadsheetApp.getActive().getSheetByName('Estimate'))可以访问同一个工作表对象(sheet1)。这可以修改为

var editedSheet = e.range.getSheet();
if(editedSheet.getName() === 'Estimate'){  
  //Do something with editedSheet here
}

违反 DRY 的行为通常被称为 WET 解决方案,它通常代表“将所有内容写两次”、“我们喜欢打字”或“浪费每个人的时间”。

【讨论】:

    【解决方案2】:

    是的,它是多余的,也可能是时间效率低下。

    如果您已经知道e.range.getSheet() 返回的类表对象的名称等于'Estimate',则无需执行通常会耗费大量执行时间的 Google Apps 脚本服务调用。

    要确定它是否消耗执行时间,您应该查看执行记录。

    【讨论】:

      猜你喜欢
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-03-12
      • 2020-07-21
      • 1970-01-01
      相关资源
      最近更新 更多