One of the challenges with V8 compared to Rhino is that you can’t be sure of the order of global variable initialization. Personally this is not an issue for me, as I avoid any such use of global space, but it is an issue for some. A nice way of dealing with global space is to use namespaces and IEF as I described in Apps Script V8: Multiple script files, classes and namespaces but another, perhaps less obvious way, is put all the variables (and even functions) you need to access from multiple functions in a keystore.
Interesting solution for storing/retrieving variables, particularly when you are using the new V8 runtime.
Source: Apps Script V8: Keystore for global space – Desktop liberation
Apps Script doesn’t have a module loader system. If you’re used to developing in NodeJs, you’ll also be familiar with importing and exporting to include required modules in your project. With Apps Script, you have no control over the order in which multiple script files are executed. In Legacy Apps Script, there seemed to be some kind of workaround going on so that global statements were executed in a sensible order (I don’t know the details), but in V8 this is not the case. …
My golden rules are
- Nothing executable should be in global space
- Don’t rely on the order that things are processed
- Minimize the number of executable functions (1 is good)
- Always assume your code will be reused somewhere else.
Source: Apps Script V8: Multiple script files and namespaces – Desktop liberation
Source: Apps Script V8: spreading and destructuring – Desktop liberation
More tips and guidance from Bruce Mcpherson for developers migrating code to the Apps Script V8 runtime.
Sets and Maps can often be a cleaner way of storing data than using Objects or Arrays, even though at first glance they may seem a little redundant. Unlike an array, they are aware of what else is in the map or set (so you can avoid duplicates), and unlike an object, you can use anything as the key – including the item value itself
Given many Apps Script projects focus on manipulating data Bruce Mcpherson provides a useful introduction to Maps and Sets.
Source: Apps Script V8: Maps and Sets – Desktop liberation
It’s a shorthand way of using a template into which variables are subsituted in a string. This allows for better reuse of string structures, and a few other goodies besides (like all V8 additions, it’s more than just a syntactical spruce up)
Bruce Mcpherson has a very useful post highlighting the benefits of using the new V8 runtime when working with string output
Source: Apps Script V8: Template literals – Desktop liberation
One of the key things that V8 has sorted out is the scope of variables. Using var to declare variables meant that anything declared within the scope of a function could easily be accidentally overwritten, causing hard to track down errors. ES6 (since it’s commonly known as V8 in Apps Script – I’ll be referring to it as V8 from now on), has added const and let to the variable declaration vocabulary to help prevent these kind of problems.
When dealing with matching in sheets, you sometimes need to get close matches. This post shares the “Rough” namespace of the cUseful library
Source: Roughly matching text – Desktop Liberation
If you are after performance and self cleansing then the CacheService is the best solution for caching, and if you are after permanence and small amounts of data, the properties service is a good solution. You can also get round many of the limitations of each service using my properties and cache plugins, covered in Squeezing more into (and getting more out of) Cache services
Source: Google Drive as cache – Desktop Liberation