1

Is this redundant? Is there a simpler way to write this?

  if(e.range.getSheet().getName() == 'Estimate'){  
    var thisss = SpreadsheetApp.getActive().getSheetByName('Estimate');
  }
Rubén
  • 34,714
  • 9
  • 70
  • 166
TC76
  • 860
  • 1
  • 8
  • 17
  • 3
    e.range.getSheet() is often used in an onEdit() function to return sheets that are not involved in the current script. So everything that occurs within the if statement involves the active sheet being 'Estimate' and yes it is redundant. If I'm going to use e.range.getSheet() more than once then I usually do a declaration like var sh=e.range.getSheet() at the beginning of the function. – Cooper Jul 10 '19 at 18:55
  • 2
    The reason people do it is because it's easier to debug onEdit() functions by simply not using the event object. Unfortunate it also takes processing time away from a function that has to complete within 30 seconds. So it's better to have done the `var sh=e.range.getSheet()` once and then use the reference variable `sh` within the scope of the if. – Cooper Jul 10 '19 at 19:01

2 Answers2

3

Yes. This is known as WET solution.

The DRY(Don't repeat yourself) principle is stated as "Every piece of knowledge must have a single, unambiguous, authoritative representation within a system".

Simply put, If you trace a branch of code(say, a variable information), it should have a single line to the root of the tree/code and must not be repeated elsewhere in the code.

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

Here you have two branches(e.range.getSheet() and SpreadsheetApp.getActive().getSheetByName('Estimate')) to get to the same sheet object(sheet1). This can be modified as

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

Violations of DRY are typically referred to as WET solutions, which is commonly taken to stand for either "write everything twice", "we enjoy typing" or "waste everyone's time".

TheMaster
  • 45,448
  • 6
  • 62
  • 85
2

Yes, it's redundant and it could be time inefficient too.

If you already know that the name of the Class Sheet object returned by e.range.getSheet() is equal to 'Estimate' there is no need to do a Google Apps Script service call that usually are expensive in terms of execution time.

To be certain if it is consuming or not execution time you should look that the execution transcript.

Rubén
  • 34,714
  • 9
  • 70
  • 166