Day 3 — 拆解 GAS 的执行

昨天我们写了第一个 GAS 程序: Hello World ,今天我们来拆解一下我们到底写了什麽东西。


昨天我们直接开始写程序,还没有机会好好认识一下 GAS 提供的程序设计平台,现在就让我们看一下整个 IDE 的结构:

第一排包含了你写的专案名称、进行专案部署以及可以分享给其他人共同编辑。

左侧栏位,当滑鼠在上面停留久一点後,他会出现项目名称,可以看到有很多选项,之後会再介绍到!

左二侧栏,则是可以看到你所有的档案、连结 GCP 的资料库以及进阶的 Google 服务。

跟一般的 IDE 差不多,都具备着上下步、存挡、执行程序、侦错模式及 Console 介面,但是比较特别的是他有着可以选择你要特定执行哪一个函式的特点。

为什麽他要这样设计呢?原因是他的程序执行概念核心是 Functional Programming (注一)的模式,这也是现代在写 JS 很推荐的一种程序撰写模式,例如 React Hooks 就是这种设计模式。


基本介绍完,就来说说昨天提到的问题吧!

为什麽不能把 console.log() 放在 myFunction() 外面?

其实这边可以让你想个 3 秒钟,回想一下我刚刚讲的 Functional Programming,你就会知道答案了?

Photo by Juan Rumimpunu on Unsplash

好罗!公布解答罗:

答案是当然可以放在外面!

有多少人被骗呢?(恶魔笑)

基本上,放在函式外面的会被 GAS 「不管选择哪一个 function 做测试执行,都一定会执行」。

在撰写 GAS 中时,本质上你还是在写 Javascript 的程序码,所以其实概念是共通的!

光说不练没有用,作为程序猿,直接实作才是真理!

今天我写了两个函式: myFunction1() 以及 myFunction2() ,另外在外部会执行
console.log("我在函式外面RRR") 。让我们来看看程序码:

接着我们在上方选定 myFunction1 作为我们要测试执行的函式:

然後按下执行:

console.log(“我在函式外面RRR“) 被执行了

你会注意到,他就会特别去呼叫 myFunction1 来执行。

换成 myFunction2 也是一样:

毫无意外

所以,当你在撰写 GAS 时,很容易的就可以执行「单元测试」的功能,可以测试执行「没有参数输入」的函式。

这个功能非常重要,会让你在开发 GAS 的应用时可以用最快速度进行 debug,或是出现错误时方便你进行测试修正。

GAS 就是香啦~


为什麽不用侦错执行功能?

如果有使用其他 IDE 在开发软件的人就会知道,其实他也是在方便开发者进行快速找出错误的好方法,就跟我们在程序码中塞满了 console.log() 印出目前进程一样。

例如下图的程序码:

"Google Document ID" 後面会告诉你在哪?

在执行侦错的时候必须要先决定在哪些断点 (break point) 停下进行侦错讯息输出,所以我们的滑鼠移到旁边的行号处:

你会发现多了一个紫色圈圈让你可以点击。点下紫色圈圈让他变成是实心的之後,就去按下侦错:

在最右边的地方就会多一个侦错工具,可以让你看到目前的程序运作、区域变数或全域变数的状态!

当然你也可以有多个断点让他进行侦错:

藉由多个断点,你可以让他逐步执行你的程序,看他到底是怎麽回事!

之後在撰写程序的过程中,可以多多利用!


今天大致的讲解完了整个 Google Apps Script 提供的一些功能以及撰写概念,明天我们就要正式的藉由撰写专案来体会 GAS的强大!


今天的作业是:

请你思考一下,如果我今天是要测试「有带参数的函式」,那麽你应该要怎麽利用上面的说明做单元测试呢?


下周会要收这三天的作业喔~请大家务必记得做一下!

另外如果对於 Javascript 不熟的同学,可以去 Codecademy 找到免费的 Javascript 学习资源喔~(这还是官方推荐选项呢!)


关於兔兔们:


学生:老师,你不是说接下来都是实作,今天怎麽拉哩拉匝讲这麽多的概念性东西啊?
我:阿我不这样教,你们到时候又来跟我哭说不会用。 
学生:可是我们之前说不会用你也只会叫我们去 Google 啊…?
我:…所以我下次不教,让你们直接 Google 罗?
学生:(感受到同学们的杀气)恩!老师您还是讲得越详细越好!

注一:
https://totoroliu.medium.com/javascript-functional-programming-%E5%87%BD%E5%BC%8F%E7%B7%A8%E7%A8%8B%E6%A6%82%E5%BF%B5-e8f4e778fc08



<<:  Day04 - Amazon ECS Anywhere 基础说明与建置(下)

>>:  成为工具人应有的工具包-03 CredentialsFileView

Day23 Load balance with Istio

昨天非常粗浅的介绍过 istio 後,今天我们要来实际将 Istio mesh 注入我们的 clus...

Day24:老板我等等来拿

Future介面定义有get()方法以及isDone()方法,其目的就是在呼叫get()时看看能不能...

Day25 - 补充 Container 和 Hashing

大家好,我是长风青云。今天是铁人赛的第二十五天。 突然发现我有些东西没说,而Hash这个我也忘记说,...

【後转前要多久】# Day17 BootStrap - 介绍、导入

个人主要是看金鱼都能懂的Bootstrap影片学习BootStrap的, 比起看文件的方式学习,金鱼...

[Day 8] 阿嬷都看得懂的替 HTML 标签穿上行内样式

阿嬷都看得懂的替 HTML 标签穿上 CSS 样式 今天我们要来介绍排版的核心标签--div。 di...