15 ก.พ. 2021 (พมิพ พพ์ครรั้งทที่ 4)
พพมิ พพ์ครง้รั ทที่ 1 : 12 พ.ย. 2019
พพิมพค์พ รรั้งที่ท 2 : 1 ธ.ค. 2019
พิมพ พค์พ รงรั้ ทท่ี 3 : 2 เม.ย. 2020
พมิพ พ์คพ รรั้งทที่ 4 : 15 ก.พ. 2021
หลกัล การเขขยี นโปรแกรม
Google Apps Script
เรรียบเรรียงโดย
วสัสนต์ต คณุค ดิลด กเศวต
[email protected]
Line ID : wasankds
08-1459-8343
www.poeclub.org
สารบญลั
สารบัลญ............................................................................... 4
คาค นคา................................................................................14
บทททีข่ 1 Hello World..............................................................17
1.1. Google Apps Script แบบ Embbed Script และ Stand alone .......................18
1.1.ก.) แบบ Embbed Script (ฝัฝงอยยู่ในไฟลล) (18)
1.1.ข.) แบบ Stand alone (ไฟลลโดด) (19)
1.2. โคค้ดแรก และ คทยล์พ รดท่ทีสสสำครญในกสำรเขทยนโคค้ด ...........................................................20
1.2.ก.) โค้ดค แรก (20)
1.2.ข.) คอมเม้นค ตล (20)
1.2.ค.) คคียลล ลัด (21)
1.2.ง.) รนลั โคดค้ (22)
1.2.จ.) เปดิป ดย Logs (23)
1.2.ฉ.) Logs - Chrome V8 (23)
1.2.ช.) Logs – New IDE (24)
1.3. Apps Script Dashboard .................................................................................... 25
บททขีท่ 2 ตัวล แปร และ โอเปอรเ์ร รเตอร์ร..........................................27
2.1. Variables และ Data Types ................................................................................ 28
2.2. Operators ............................................................................................................ 29
2.2.ก.) Arithmetic Operators (สสสำหรับล ตลวั เลข) (29)
2.2.ข.) Assignment operators(30)
2.2.ค.) String operators (30)
2.2.ง.) Comparison operators (31)
2.2.จ.) Logical Operators (31)
2.2.ฉ.) in (32)
2.2.ช.) Ternary Operator (ประกสำศตัลวแปรตสำมเงอื่ง นไข) (33)
2.2.ซ.) ใช้ค || และ && ประกสำศตวัล แปรตสำมเงองื่ นไข (33)
2.3. Backticks – Chrome V8 ..................................................................................... 34
2.3.ก.) ใชต้ค วลั แปรใน Backticks (34)
2.3.ข.) พมิพ พอล ลักขระพเิพ ศษใน Backticks (34)
2.4. Use Strict – Chrome V8 .................................................................................... 35
2.5. Bitwise Operators ............................................................................................... 36
บททขีท่ 3 var, let และ const (Chrome V8)...................................37
3.1. let และ var ........................................................................................................... 38
3.1.ก.) Global Scope (38)
3.1.ข.) Function Scope (38)
3.1.ค.) Block Scope (39)
3.1.ง.) Redeclaring Variables (ประกสำศตลวั แปรซสสซ ำ) (39)
3.1.จ.) Loop Scope (40)
3.2. Global Variables in HTML ................................................................................ 40
3.2.ก.) ตวลั แปร Global scope ทคปี่ืง ระกสำศดค้วย var เป็ปนของ Window object (40)
3.2.ข.) ตวลั แปร Global scope ท่ืีปคง ระกสำศดคว้ ย let ไมู่ยไดค้เปปน็ ของ Window object (41)
3.3. กสำรประกสำศตวร แปรซส้ัสร ำ ............................................................................................ 42
3.4. Hoisting ................................................................................................................ 43
3.5. const ..................................................................................................................... 44
3.5.ก.) Block Scope (44)
3.5.ข.) Assigned when Declared (44)
3.6. เปลีทย่ นไดค้ หรอรื ไมไม่ ดค้ ................................................................................................ 44
3.6.ก.) Not Real Constants (44)
3.6.ข.) Primitive Values (45)
3.6.ค.) Constant Objects can Change (45)
3.6.ง.) Constant Arrays can Change (45)
3.7. Redeclaring (const) ........................................................................................... 46
บทที่ขท 4 ฟัฟงกช์ร ่ลนัที ....................................................................47
4.1. ฟงัฟ กพ์ชทร่นี (Functions) ............................................................................................. 48
4.1.ก.) โครงสรส้ค ำงของฟฝงั กชล ลื่นงั (48)
4.1.ข.) Globally declared และ Locally declared (48)
4.1.ค.) ตวลั อยูยส่ ำง – ฟัฝงกชล งืลัน่ ทีมงค่ื คีกสำรสู่งย ผสยู่ ำน Agruments 2 ตัลว (49)
4.1.ง.) ตวลั อยู่ยสำง - เรีคยกใชฟค้ งัฝ กชล ืลัง่นองน่ื จสำกอกีค ฟงัฝ กชล ลงัน่ื (49)
4.1.จ.) ตัลวอยสู่ย ำง – เก็บก ฟฝงั กชล ั่นลืง ไวคใ้ นตลัวแปร (49)
4.1.ฉ.) ตวลั อยสยู่ ำง – Agruments ทีเ่ืคง ป็นป ฟังฝ กชล งัล่ืน (50)
4.1.ช.) สร้สค ำงฟฝงั กลชงันล่ื ไว้คใชง้ค สำนใน Google Sheet (50)
4.1.ซ.) ทสสำใหเค้ รคียกใชคง้ สำนได้คเหมงอนกับล ฟงัฝ กลช่ลงัืน Built-in (51)
4.1.ฌ.) โคคด้ แบบ Global declared (51)
4.1.ญ.) Global variable เก็กบคยูส่ ำจสำกกสำรรลนั ไวค้หรอง ไมยู่ ? (52)
4.2. Arrow function - Chrome V8 ........................................................................... 53
4.3. ฟงฟั กพช์ ทรี่น Generator ............................................................................................... 54
4.4. Default parameters – Chrome V8 ..................................................................55
4.5. วรตถถุ Arguments ................................................................................................... 55
บททีทข่ 5 คาค เฉพาะ..................................................................57
5.1. undefined ........................................................................................................... 58
5.2. null ....................................................................................................................... 58
5.3. this ........................................................................................................................ 59
5.4. infinity .................................................................................................................. 59
5.5. continue .............................................................................................................. 60
5.6. break .................................................................................................................... 62
บทท่ีทข 6 ตัวล แปรวัตล ถถ...............................................................65
6.1. ตวร แปร Object (วตร ถ)ุถ ........................................................................................... 66
6.2. เพี่มทิพ , ลบ, แทรก สมสำชิพกใหค้ Object ........................................................................ 67
6.3. get, set และ Object method - Chrome V8 ...................................................68
6.3.ก.) get และ function ใน Object (68)
6.3.ข.) set (69)
6.3.ค.) Object.defineProperty() (69)
6.4. Object Constructors - Chrome V8 .................................................................70
6.4.ก.) Object Types (Blueprints) (Classes) (70)
6.5. Object Prototypes - Chrome V8 - ยค้สำย ..........................................................71
6.6. Classes - Chrome V8 - ยสค้ ำย ............................................................................... 72
6.6.ก.) Classes (72)
6.6.ข.) The Constructor Method (72)
6.6.ค.) Class Methods (73)
6.7. Class Inheritance หรรือ Child classes ..............................................................74
6.7.ก.) Class Inheritance (74)
6.7.ข.) Getters and Setters (75)
6.7.ค.) Hoisting (76)
6.8. เมถอด static ......................................................................................................... 77
6.9. Object destructuring – Chrome V8 *** ........................................................79
บทท่ีทข 7 วตัล ถถ Object..............................................................83
7.1. assign() ................................................................................................................. 84
7.2. create() ................................................................................................................ 84
7.3. defineProperty() ................................................................................................ 87
7.4. Descriptors .......................................................................................................... 88
7.5. defineProperties() ............................................................................................. 89
7.6. entries() ............................................................................................................... 89
7.7. fromEntries() ....................................................................................................... 90
7.8. freeze() ................................................................................................................ 91
7.9. isFrozen() ............................................................................................................. 91
7.10. seal() .................................................................................................................. 92
7.11. isSealed() ........................................................................................................... 93
7.12. is() ....................................................................................................................... 93
7.13. isExtensible() .................................................................................................... 94
7.14. preventExtensions() ........................................................................................ 95
7.15. keys() *** .......................................................................................................... 96
7.16. values() *** ....................................................................................................... 97
7.17. getOwnPropertyDescriptor() .........................................................................97
7.18. getOwnPropertyDescriptors() ........................................................................ 99
7.19. getOwnPropertyNames() ................................................................................ 99
7.20. getOwnPropertySymbols() ..........................................................................100
7.21. getPrototypeOf() ........................................................................................... 101
บทท่ทขี 8 วตัล ถถน่าน สนใจ............................................................103
8.1. วตร ถุถ Set ............................................................................................................... 104
8.2. วตร ถุถ WeakSet ..................................................................................................... 104
8.3. วรตถถุ Map ............................................................................................................ 105
8.4. วตร ถถุ WeakMap ................................................................................................... 107
8.5. วรตถุถ Symbol ...................................................................................................... 107
บทท่ีทข 9 เทคนคนิ ตัวล แปรวตลั ถถ....................................................109
9.1. จรบ Key จสำก Value แบบทที่ 1 ............................................................................. 110
9.2. จรบ Key จสำก Value แบบทที่ 2 สรส้ค ำงเปปน็ เมถอด ...................................................111
9.3. กรองตวร แปรวรตถทถุ ี่ซท สรั้สำ ........................................................................................... 112
9.4. กรองตรวแปรวรตถุทถ ซ่ีท สัร้ส ำ โดยใชค้ 1 คยท ์พ .......................................................................113
9.5. กรองตรวแปรวรตถุทถ ทซ่ี รสส้ั ำ โดยใช้ค 1 คทยพ์ - Map ...........................................................114
9.6. กรองวตร ถถตุ สำมคยท ทพ์ ที่ระบถุ ......................................................................................... 114
บทท่ีทข 10 เงอี่งท นไขและลูลป.......................................................117
10.1. if – else if - else ............................................................................................. 118
10.1.ก.) รยปแบบของ if (118)
10.1.ข.) รยปแบบของ if – else (118)
10.1.ค.) รปย แบบของ if – else if - else(119)
10.2. switch ............................................................................................................... 119
10.3. for ..................................................................................................................... 120
10.4. for in ................................................................................................................ 122
10.5. for of ................................................................................................................ 124
10.6. while ................................................................................................................. 125
10.7. do while .......................................................................................................... 125
10.8. try catch throw finally ................................................................................. 126
10.8.ก.) try และ catch (126)
ผล (127)
10.8.ข.) throw (127)
10.8.ค.) finally (128)
บททีขท่ 11 อาเรย์ร..................................................................131
11.1. อสำเรยค์พ อืร อะไร ..................................................................................................... 132
11.2. พนรื้ั ฐสำนข้คอมลมู ชนดพิ อสำเรย์พ .................................................................................... 132
11.3. อสำเรย์พ 2 มตพิ พิ ....................................................................................................... 132
11.3.ก.) กสำรเขคียนอสำเรยล 2 มติพ ิพ (133)
11.3.ข.) กสำรเขส้ค ำถึถงสมสำชิพกในอสำเรยล 2 มิพติพ (133)
11.3.ค.) กสำรนบัล จสสำนวนสมสำชิพกในอสำเรยล (133)
11.4. Spread operator (3 จดุถ ) - Chrome V8 .......................................................134
11.5. Rest parameter – Chrome V8 .....................................................................135
11.6. Array destructuring – Chrome V8 ..............................................................136
บททขีท่ 12 อาเรย์รเมถอด.........................................................139
12.1. push() .............................................................................................................. 140
12.2. unshift() ........................................................................................................... 140
12.3. pop() ................................................................................................................ 141
12.4. shift() ............................................................................................................... 141
12.5. splice() ............................................................................................................. 142
12.6. slice() ............................................................................................................... 143
12.7. ตรวอยม่สำงกสำรใชค้งสำนอสำเรยเ์พ มถอดกบร อสำเรยพ์ 2 มตพิ พิ ..................................................144
12.8. join() ................................................................................................................. 144
12.9. concat() ........................................................................................................... 145
12.10. indexOf() *** ............................................................................................... 146
12.11. lastIndexOf() ................................................................................................ 147
12.12. reverse() ........................................................................................................ 148
12.13. includes() - Chrome V8 ............................................................................. 148
12.14. toString() ....................................................................................................... 149
12.15. keys() ............................................................................................................. 149
12.16. fill ................................................................................................................... 150
12.17. Array.from() .................................................................................................. 150
บททที่ข 13 อาเรยรเ์ มถอด ตระกูลลวนลลูป........................................153
13.1. map() ............................................................................................................... 154
13.1.ก.) map() และ อสำเรยล 1 มพิตพิ (154)
13.1.ข.) map() และ อสำเรยล 2 มพติ พิ (155)
13.2. filter() ............................................................................................................... 157
13.2.ก.) ตลัวอยย่สู ำงทีคง่ื 1 (157)
13.2.ข.) ตัวล อยู่สย ำงทีืง่ค 2 – ใสู่ฟย ังฝ กชล ่ืนังล เป็ปน Argrument (157)
13.2.ค.) ตวลั อยยู่สำงท่คีืง 3 - กรองตัวล เลข (158)
13.2.ง.) ตวลั อยู่สย ำงทคืง่ี 4 - กรองขค้อควสำม (158)
13.2.จ.) ตวลั อยูยส่ ำงทื่ีคง 5 – คน้ค หสำในอสำเรยล (159)
13.3. sort() ................................................................................................................ 160
13.3.ก.) ขค้อมลย เป็ปนตลัวเลขทซลังหมด (160)
13.3.ข.) ข้คอมยลเปป็นข้คอควสำมทงัลซ หมด (161)
13.3.ค.) ขค้อมยลผสม (163)
13.3.ง.) เรยคี งข้อค มยลในอสำเรยล 2 มิพตพิ (165)
13.3.จ.) เรยคี งโดยใช้ค 2 คยีค ล (หรงอมสำกกวยสู่ ำ) – ใช้คอสำเรยอล ยสู่ย ำงเดยคี ว (166)
13.3.ฉ.) เรียค งโดยใช้ค 2 คยีค ล (หรอง มสำกกวู่สย ำ) – ใชค้ Object ชยวู่ ย (167)
13.4. every() และ some() ....................................................................................... 168
13.4.ก.) ตวลั อยู่สย ำงทคงืี่ 1 : อสำเรยล 1 มตพิ พิ (169)
13.4.ข.) ตวลั อยสู่ย ำงทคีงื่ 2 : อสำเรยล 2 มพติ พิ (169)
13.4.ค.) ตวัล อยู่สย ำงทื่งีค 3 : ตวัล แปรวตลั ถถ (170)
13.5. forEach() .......................................................................................................... 171
13.5.ก.) รยปแบบกสำรใชง้ค สำน (171)
13.5.ข.) ตวัล อยยู่สำงทีคงื่ 1 : กสำรใช้คงสำนแบบ 1 Argrument (171)
13.5.ค.) ตวลั อยยู่สำงที่งคื 2 : กสำรใช้คงสำนแบบ 2 Argruments (172)
13.5.ง.) ตวลั อยูย่สำงทืงี่ค 3 : : กสำรใชค้งสำนแบบ 3 Argruments (172)
13.5.จ.) ตัวล อยสูย่ ำงทงีื่ค 4 : ตลัวอยสยู่ ำงอน่ืง ๆ (173)
13.6. reduce() ........................................................................................................... 173
13.6.ก.) รยปแบบกสำรใช้คงสำน (174)
13.6.ข.) ตวัล อยยู่สำงทื่งคี 1 : รวมคู่ยสำของสมสำชกพิ ในอสำเรยล (174)
13.6.ค.) ตวัล อยยูส่ ำงทงคีื่ 2 : ลดมพิตขิพ องอสำเรยล (175)
13.6.ง.) ตวัล อยยู่สำงทงีคื่ 3 : หสำคูย่สำเฉลืงค่ยี ของสมสำชพกิ ในอสำเรยล (175)
13.6.จ.) ตวัล อยยูส่ ำงทคีงื่ 4 : หสำตลัวซสซสำ และจสส ำนวนกสำรซซสสำ (176)
13.6.ฉ.) ตวัล อยสยู่ ำงทคีง่ื 5 : หสำจสสำนวนตลวั ซซสสำ และจสสำนวนกสำรซสสซ ำ (2) (178)
13.6.ช.) ตวลั อยยูส่ ำงท่ืงีค 6 : หสำผลรวมเป็ปนกลมถยู่ ๆ (178)
บททขีท่ 14 วตลั ถถ Array............................................................181
14.1. วตร ถถุ Array ......................................................................................................... 182
14.2. Array() constructor ....................................................................................... 182
14.3. Array prototype constructor ......................................................................183
14.4. Array.prototype.slice.call(arguments) ......................................................183
บททีท่ข 15 เทคนคนิ อาเรย.ร์ ........................................................185
15.1. จบร แถวและคอลมร น์พใน Google Sheets มสำใสม่อสำเรยพ์ ..........................................186
15.2. จบร เร้นค จ์ใพ สใม่ นอสำเรย์พ จบร อสำเรยใ์พ สใ่ม นเรน้ค จพ์ (Google Sheets) ...............................186
15.2.ก.) จลับเร้นค จใล น Google Sheet มสำใสูใ่ย นอสำเรยล (187)
15.2.ข.) จัลบค่ยูสำในอสำเรยล ไปใสู่ยใน Google Sheet(187)
15.3. นสส ำคอลรมนพ์ในช้รททั มสำคสส ำนวณ แลว้ค วสำงไว้คอทกคอลรมนหพ์ นนีงท่ (Google Sheets) .........188
15.3.ก.) พัฒล นสำกสำรท่คีงื 1 (188)
15.3.ข.) พัลฒนสำกสำรท่คงืี 2 (189)
15.4. กรองแถววมส่ ำง หรรือ แถวท่ทมี เท ซลลว์พ สม่ ำงทังิรพ้ ..............................................................190
15.5. กสำรกรองตรวซสรั้สำในอสำเรยพ์ ให้คเหลอืร แตมต่ วร ททไี่ ม่มซ้สัสร ำ ....................................................191
15.5.ก.) เทคนคิพ ทงีค่ื 1 - สซัลนแตู่มย ีปค ระสพทิ ธิพภสำพสยง (191)
15.5.ข.) เทคนคพิ ทงีื่ค 2 - แยกสมสำชกิพ ในอสำเรยลทค่ืซีง สสซ ำและไมซู่ย สซส ำออกเปน็ป อสำเรยล 2 กค้อน (192)
15.6. กสำรกรองตวร ซสส้ัร ำในอสำเรย์พ ใหค้เหลืรอแตต่ม วร ทีทม่ กท สำรซรส้ัสำ ...............................................192
15.7. กรองตรวซั้สรส ำในอสำเรย์พ ให้เค หลอรื แตต่ม วร ทที่ Unique ....................................................194
15.8. กสำรกรองตรวซส้ัรส ำในอสำเรยพ์ 2 มตพิ พิ ใหค้เหลรือแต่มแถวท่ีท Unique ..................................194
15.8.ก.) วิธพ คีทงีคื่ 1 (194)
15.8.ข.) วธิพ คีทคงื่ี 3 (195)
15.9. เปรทยบเทยท บอสำเรย์พ 2 กคอ้ น .................................................................................. 195
15.9.ก.) เปรยคี บเทยีค บอสำเรยล 2 ก้คอน เกกบ็ ตวัล ทงคื่ไี มซู่ย ซสสำกนลั ไวค้ (195)
15.9.ข.) เปรคียบเทยีค บอสำเรยล 2 กคอ้ น เกกบ็ ตัลวท่ืคงไี มูซ่ย สสซ ำกนลั ไว้ค วธิพ คีทค่ืงี 2 (196)
15.10. กรองเซลล์วพ ่สม ำงทงั้ิพร (ขค้อมูมล 1 คอลมร นพ์) ...............................................................196
15.11. ใชค้ filter() กรองตสำรสำงขอ้ค มมูลใน Google Sheet .............................................197
15.11.ก.) พฒลั นสำกสำรทื่คงี 1 : จับล คูยส่ ำในคอลมัล นมล สำกรอง (198)
15.11.ข.) พฒลั นสำกสำรทืงีค่ 2 : ใสู่ผย ลกสำรกรองกลับล ไปทืคงี่ชีทซค (198)
15.11.ค.) พฒัล นสำกสำรท่งีืค 3 : กรอง 2 เงงื่อนไข (199)
15.12. ทสส ำ VLOOKUP ด้ควยอสำเรยพ์ ............................................................................... 200
15.13. ทสสำ Lookup แบบคืนร หลสำยค่มสำ .......................................................................... 201
15.14. วนลมปู เซต็ซ ข้อค มลมู ลงใน Google Sheets ...........................................................202
15.15. แทรกคอลมร น์ลพ งในอสำเรยพ์ 2 มพติ ิพ ........................................................................203
15.16. จรบคอลมร นอพ์ อกมสำจสำกอสำเรย์พ 2 มตพิ พิ ...................................................................204
15.17. กสำรรวมอสำเรยพ์ 2 มพติ ิพ ......................................................................................... 204
15.18. ทสสำทรสำนสโพสอสำเรยพ์ 2 มิพติพ ............................................................................... 205
15.19. หสำคม่สำสูมงสดุถ ตสส ำสถุดในอสำเรย์พ โดยใชค้ Spread operator – Chrome V8 .............205
15.20. สรส้ค ำงอสำเรยพว์ ส่ม ำง ................................................................................................. 206
15.21. สร้คสำงอสำเรยพ์วส่ม ำง 2 มิพติพ ....................................................................................... 206
15.21.ก.) สรค้สำงอสำเรยวล ู่ยสำง 2 มติพ พิ (206)
15.21.ข.) วนลยปกสสำหนดคูยส่ ำใหกค้ บัล อสำเรยล 2 มพิติพ (207)
15.22. SUM แถวและคอลรมนใ์พ นอสำเรยพ์ 2 มติพ พิ ...............................................................208
15.23. กรองคอลรมนใ์พ นอสำเรยพ์ 2 มติพ ิพ ............................................................................. 209
15.24. Piovt table โดยใชเ้ค มถอดของอสำเรยพ์ - ขรั้นนบทใหมม่ ..........................................211
บททีข่ท 16 รูลจร้ ัลกกับล Google Services..........................................213
16.1. สรปุถ OOP .......................................................................................................... 214
16.2. Google Services (G Suite services) .............................................................214
16.3. กสำรเรทยกใชค้ Google Services ...........................................................................215
16.4. Enum หรืรอ Enumeration ............................................................................... 216
16.5. Interfaces ........................................................................................................ 219
บทท่ีทข 17 คลาส Logger และ console......................................223
17.1. คลสำส Logger .................................................................................................... 224
17.2. log() .................................................................................................................. 224
17.3. คลสำส console .................................................................................................. 225
บทททีข่ 18 Triggers...............................................................227
18.1. Triggers ครืออะไร ............................................................................................... 228
18.2. Simple Triggers .............................................................................................. 228
18.2.ก.) ตวลั อยย่สู ำง เมงอ่ื คอลัลมนล A เปลง่ืีคยน พมพิ พลเวลสำไวค้ทีคงค่ื อลลมั นล B(229)
18.3. Event Objects ................................................................................................. 229
18.4. Installable Triggers ........................................................................................ 231
18.5. newTrigger() .................................................................................................... 233
บททขีท่ 19 การใชโู้ร ปรเจค็จ Google Apps Script ในไฟล์รอนี่งท ...............235
19.1. กสำรนสสำโปรเจซ็ค Google Apps Script ไปใชค้ในไฟลอพ์ ทืี่นร .......................................236
19.1.ก.) ปญัฝ หสำกสำรใช้งค สำน 1 โปรเจค็ก (แบบฝฝงั ) ในหลสำยไฟลล (236)
19.1.ข.) กสำรนสสำโปรเจกค็ Google Apps Script ไปใชคใ้ นไฟลอล ง่นื (236)
19.1.ค.) กสำรนสสำโปรเจก็คไปใช้คในไฟลลอืง่นแบบข้คสำม Account และ ขคส้ ำม Domain (239)
19.1.ง.) สรปถ (239)
คาค นคา
ใครทค่ตืงี ้อค งกสำรเร่ิมงืพ ตค้นเขยีค นโปรแกรมดว้ค ย Google Apps Script หนงัล สอง เล่มูย นซีค เหมสำะสสส ำหรลบั กสำรเร่พงิืมตน้ค
ผยค้เขคียน เขีคยนหนลังสงอเลยู่มนคีซ “หลรกกสำรเขทยนโปรแกรม Google Apps Script” จถดประสงคลดัลซงเดิพม ก็กคงอ เก็ซบไวค้
อส่ม ำนเอง
เมือง่ ผค้ยเขคียนศถึกษสำเรอง่ื งอะไร กก็จะไปเรคียนรจ้คย สำกสงื่อออนไลนลในอนิพ เตอรลเนก็ต ทลัซงคอรลสออนไลนล วพดิ ีคโอ หรงอ เอกสสำร
ทงซัล ในแบบฟรีคและเสยีค เงนิพ
แตยู่ยคถ นซคี เรสำตค้องเรยคี นร้อคย ะไรใหค้เรก็ว โดยเฉพสำะเรืง่องของ IT ผ้ยเค ขคยี นจงถึ ตลัซงใจจะดวย ดิพ คโี อเพยีค งรอบเดคียว จงถึ ดไย ป
พมิพ พสล รปถ ไปดว้ค ย เวลสำจสสำอะไรไมู่ไย ด้ค มสำดจย สำกทพ่ืงีค ิมพ พลสรปถ ไวค้ งู่สย ำยกวยูส่ ำกสำรไปย้คอนดยจสำกวดิพ โคี อ นอกจสำกนกซคี ก็ยงัล นสส ำมสำทบทวน
ไดงค้ สู่ย ำย ในอนสำคตสสำมสำรถเพิพื่มง เตพิมเสรพิมแตง่ยู เนงซอหสำได้คเรงอ่ื ยๆด้วค ย
หนลังสงอเลู่ยมนีคซ ควสำมตัซลงใจดัซลงเดิพมของผคย้เขีคยน ก็กคงอ ตรั้งใจเก็ซบไว้คอ่มสำนเองคนเดทยว อยู่ยสำงไรก็กดีค อถตส่ยูสำหลพิพมพลไว้คเปป็น
หนงัล สอง แลคว้ จะเกบ็ก ไว้คอสยู่ ำนคนเดคียวกร็ก ค้ยสึกถ เสยคี ดสำย ฉะนลัซน ผคยเ้ ขีคยนจถึงนสสำออกมสำแบู่งย ปฝัน
เนอทืรี่ งด้วค ย ผเคมู้ ขยท นใหค้ค วสำมสสสำครญกรบประเดนซ็ ดสค้ ำนลพิขสิทพ ธธิพม์ สำก ฉะนร้ันจนงขอแจค้งไวค้ ณ ททน่ี รั้ท ตรง้ั แตตม่ น้ค
กคซ็ อืร
1. เนองซ หสำในหนงัล สอง ผยค้เขีคยนรวบรวมมสำจสำกแหลยูง่ ตสู่ย ำงๆในอิพนเตอรเล น็กต โดยจะพยสำยสำมใหม้ค สำกทีคงื่สดถ ทจค่ืีง ะบอก
ลพิงคลหรอง แหลยู่งทมคืีง่ สำในแตยู่ละหัลวขค้อ เพรสำะหนังล สอง เลยูม่ นคีซถยกเขียค นไว้คนสำนแล้วค บสำงเรอ่ืง งลมง กก็ก ๊อก ปปปีล้ พิงคมล สำแปะไว้ค
2. ผเคย้ ขยคี นรวบรวมเนงซอหสำมสำจสำกแหลยูง่ ตสู่ย ำงๆ และเขยีค นเพม่ืงิพ เติพมไปดวค้ ย
3. หนงัล สอง เลยู่มนคีซแจกฟรีค ผเคย้ ขีคยนไมู่ยมคีรสำยไดจ้ค สำกหนงลั สอง เลูยม่ นคซี
หนัลงสอง เล่มยู นคีซยัลงไมยูจ่ บเสยีค ทคีเดียค ว หสำกผเค้ย ขคียนวสู่ย ำง จะมสำเขยีค นเพงิมื่พ เติมพ เรง่อื ยๆ ใหดค้ เย วอรชล ลั่งืนตสำมวันล ทืงีท่ค งื่ีคปลอู่ย ยหนลังสอง
ขอขอบคถณุ ลมกู คค้สำทถุกท่มสำน สสสำหรรบกสำรจคส้ ำงงสำน ไมว่ม ส่ม ำจะงสำนอบรม(ท้ัรงออนไลนพ์ และ ออนไซตพ์) หรืรอ งสำน
เขทยนโปรแกรม เพรสำะทสส ำใหคผ้ คมู้เขยท นมทเนืรั้อหสำใหมมๆ่ และทท่ีจะอพร เดทหนรงสรือเล่มม นรอ้ัท ย่มเู สมอๆ
วสัลนตล คณถ ดพลิ กเศวต
[email protected]
081-459-8343
Line ID : wasankds
บทททขี่ 1
Hello World
1.1. Google Apps Script แบบ Embbed Script และ Stand alone
โปรเจ็กค Google Apps Script มคี 2 ลกัล ษณะใหญู่ยๆ ก็คก อง แบบ Embbed Script(แบบฝังฟ อยูม่ในไฟลพ์)
และ แบบ Stand alone(แบบไฟลพโ์ ดด)
1.1.ก.) แบบ Embbed Script (ฝังฝ อยยูใ่ นไฟล)ล
ขณะทสส ำงสำนอยูย่กับล ไฟลล Google Apps เชูนย่ Google Sheet, Google Docs หรอง Google Slide เปน็ป ตค้น
เรสำสสำมสำรถสรสค้ ำงโปรเจก็ค Google Apps Script ไดโ้ค ดย ไปทง่เคืี มนย Tools → Script Editor ตสำมภสำพ
จะปรสำกฎหนสค้ ำเวก็บสสสำหรบลั เขยีค นโคด้ค ซถงื่งึ เรสำเรยคี กหนสค้ ำนวซคี ู่สย ำ หน้สค ำโปรเจซ็ค Google Apps Script ตสำมภสำพ
สสสำหรลับ IDE ตวัต ใหมู่ย หรงอ Googl Apps Script Editor ตวัต ใหมยู่ (เริร่มใชช้ ม.ค. 2021) กคก็ งอ ตวลั แอพทค่ืงใี ช้ค
เขคยี นโปรแกรม Google Apps Script มีคหนค้สำตสำดัลงนคซี
( หากต้ตองการกลบัล ไปใชต้ Editor ตวลั เกา่ก ให้คต ลกิล ท่ทปี มุป่ Use legacy editor )
Google Apps Script แบบฝฝังอยยูใ่ นไฟลล Google Apps จะมองไม่เม หซ็นเป็ปนชรอี่ทื ไฟลใพ์ น Google Drive
เพรสำะฝังฝ อย่ยูกบัล ไฟลขล อง Google Apps
16 หลลกั การเขีขยนโปรแกรม Google Apps Script โดย วสัลนต์ต คณุค ดรลกเศวต ([email protected])
1.1.ข.) แบบ Stand alone (ไฟลโล ดด)
เรสำสสำมสำรถสรสค้ ำง Google Apps Script แบบ Stand alone ได้ทค คีงื่ Google Drive
โดย ทีืหค่ง นคส้ ำแรก Google Drive ไปทืีงค่ New → More → Google Apps Script (ตสำมภสำพถัดล ไป) จะ
เปป็นกสำรสร้คสำงโปรเจก็คและไฟลล Google Apps Script ขซถนึ มสำ
โปรเจค็ก Google Apps Script แบบนซีค สสำมสำรถมองเห็นก เปป็นไฟลใล น Google Drive ดว้ค ยเหตนถ ซีคจึถงเรยีค กวส่ยู ำ
Stand alone (ไฟลโล ดด)
หมสำยเหตสุถ สสำครญ !!!
หสำกเมนย New → More → Google Apps Script ไมู่ยมีค ใหค้เรสำเชงื่อมตอยู่ Google Drive กบัล แอพ Google
Apps Script กอยู่ น โดย ...
ทีงืคห่ นค้สำแรก Google Drive ไปทเคืง่ี มนย New → More → Connection more apps จะปรสำกฎหนส้ค ำตสูย่ ำง(ตสำม
ภสำพ) ใหค้ค ้คนหสำดว้ค ยคสส ำวสยู่ ำ apps script จะพบแอพทชื่งีค ือ่ง Google Apps Script (ตสำมภสำพ) จสำกนนซัล ให้คค ลิกพ ทืงีค่
Connect เพ่องื เชงื่อมต่ยูอกลบั แอพดลังกลยู่สำว
บททร่ิขี 1 : Hello World 17
1.2. โคดค้ แรก และ คคยี ์ยลลัดททส่ีค สสำคัลญในกสำรเขีคยนโคค้ด
เม่ืงอสรส้ค ำงโปรเจ็คก Google Apps Script มสำแลวค้ ใหค้เรสำมสำเร่งมืพิ ตค้น เขียค นโคด้ค แรกกนัล กอ่ยู น เพ่อืง ทสส ำควสำมเข้สค ำใจ
กบัล ระบบโดยรวมกยอู่ น
1.2.ก.) โคด้ค แรก
เขคียนโค้คดดังล ตอ่ยู ไปนีซค
function myFunction(){
Logger.log(“Hellow, World !!!”) ;
// ใชช้ console.log() เหมมอื น Javascript ไดแ้ช ลว้ช
console.log(“Hellow, World !!!”) ;
}
ตอนพพิมพล Logger ตสำมดคว้ ย . (จดุจ ) จะปรสำกฎ Trigger Suggest ซืงถงึ่ เปป็นรสำยกสำรของเมถอด หรอง
Properties ของคลสำส Logger ให้คเลอง ก กช็ก วยู่ ยให้คเรสำเขยีค นโค้ดค งสยู่ ำยขนถึซ
1.2.ข.) คอมเม้นค ตล
คอมเมค้นตพ์ กค็ก อง บรรทดัล ของโค้คดท่ืงีคเรสำไมตู่ย ้อค งกสำรให้ครลัน แต่มยู ไคี วค้สสสำหรบัล ให้ผค ย้เค ขีคยนโคดค้ เขคียนอธพิบสำย
ใชเค้ คร่งอื งหมสำย // คอมเมน้ค ตล เพองื่ มสำรลควสู่ย ำ บรรทลดั นซเคี ปน็ป คอมเมนค้ ตล
ใช้เค ครอง่ื งหมสำย /* คอมเมนค้ ตล */ เพงื่อมสำรลควส่ยู ำภสำยในบล็อก คเปปน็ คอมเมน้ค ตล
ตวลั อยสยู่ ำง
function myFunction(){
// พิมพ พลขอค้ ความ Hellow, World !!! ทีหท่ นค้าตู่ยาง Logger
Logger.log(“Hellow, World !!!”) ;
/*
โคด้ค ในบลลอ็ คนทน้ี ไมถู่ย กย รตัน
*/
}
18 หลกลั การเขยีข นโปรแกรม Google Apps Script โดย วสลันตต์ คณุค ดลร กเศวต ([email protected])
1.2.ค.) คยท ลลัดต
<Ctrl></> = ใสู่ย(หรอง เอสำออก) เครง่ืองหมสำย // หนค้สำบรรทดลั ก็กคอง บรรทัดล นนัลซ จะเปป็นคอมเม้นค ตล
<Ctrl><Space> = เปิปด Trigger Suggestion เพงอ่ื ดยรสำยกสำร Services/Method/sProperties …
<Tab> / <Ctrl><[> = เพงื่มพิ ยอ่ยู หนสค้ ำให้คกบลั บรรทดัล (Indent Line)
<Shift><Tab> / <Ctrl><]>= ล่ยนู ย่ยูอหนค้สำใหกค้ ลบั บรรทดัล (Outdent Line)
คทยลล ดัต สสาหรับต New IDE (ทที่เพทม่พิี เข้คามา)
<F1> = ดคย สสำสง่ลงัื ทซลังหมด (Command pallete)
<Enter> = ขซึถนบรรทดัล ใหมู่ย
<Ctrl><Shift><Enter> = เพงมื่พิ บรรทดัล ใหมไู่ย ว้กค ยู่อนหน้สค ำบรรทดัล ปัฝจจบถ ัลน
<F2> = เปลีคงื่ยนชงือ่ Symbol ทังซล หมด (Rename symbol) –
( Symbol หมสำยถงน ตวร แปร, ช่ีทอืร ฟฟงั กพช์ ีทรน่ ที่เท รสำตงร้ั เอง เปปน็ ต้นค )
<Ctrl><F2> = เพิง่มืพ เคอรลเซอรล ณ ตสส ำแหนยู่งทพ่คืีง บทลัซงหมด (Change all occurences)
<Ctrl><D> = เพมิงพื่ เคอรลเซอรล ณ ตสสำแหนงยู่ ทพืงคี่ บ ตวัล ถลัดไป (Add selection to next find match)
<Alt><Shift> + <Down>/<Up> = เพืงม่ิพ เคอรเล ซอรล ณ บรรทดลั ลสูย่ ำง/บน
<Ctrl><U> = ยกเลิพกเคอรเล ซอรล (ทลีค ะอนัล ทพ่คีงื ืงึงถ่ สรสค้ ำงไป)
<Alt> + <Down>/<Up> = ยสค้ ำยโคค้ดไปบรรทดัล ลยู่สำง/บน
<Ctrl><Shift> + <Left>/<Right> = เลอง กทงลซั คสส ำ ไปทสำงดคส้ ำนซคส้ ำย/ดสค้ ำนขวสำ
F1 → Editor Font Zoom In = ซมย เข้คสำ (ตวลั อลกั ษรใหญู่ขย นซึถ )
F1 → Editor Font Zoom Out = ซมย ออก (อลักษรเล็กก ลง)
F1 → Editor Font Zoom Reset = รีคเซต็ก กสำรซมย
<Ctrl><F> = คนค้ หสำ
<Ctrl><H> = คนค้ หสำและแทนทีค่งื
( เมงื่อไดผ้ค ลกสำรคนค้ หสำแลค้ว )
<Enter> = โดดไปยงลั คสสำทคีคง่ื ้คนหสำตัลวถลัดไป (เคอรเล ซอรตล อค้ งอยู่ทย งืคี่ Search Box)
<Shift><Enter> = โดดไปยงัล คสส ำทคคีืง่ นค้ หสำตวัล กยอู่ นหนสค้ ำ (เคอรลเซอรตล ค้องอยทยู่ ง่ีืค Search Box)
<Ctrl><Shift> + <[> = มว้ค นบรรทัดล ของโคด้ค เกบ็ก (ซู่ยอนโคดค้ ในบลอก็ ค)
<Ctrl><Shift> + <]> = คลบงืคี่ รรทดลั ของโคค้ดออก (แสดงโคด้ค ในบลกอ็ ค)
บททขีิ่ร 1 : Hello World 19
<Ctrl><Shift><O> = เปปิดหนค้สำตยูส่ ำงเพอ่งื เลอง กโดดไปยลงั Symbol ทตืคีง่ ้คองกสำร เชู่นย ตวัล แปร, ฟงัฝ กชล นัลื่ง
<Ctrl><Shift><I> = จลดั รปย แบบเอกสสำรทลัซงหมด (Format document)
<Ctrl> + <Down>/<Up> = เลื่อง นหนค้สำจอขถซนึ 1 บรรทดัล (เคอรเล ซอรไล มูข่ย ยบัล )
<Ctrl><Shift> + <K> = ลบทซงลั บรรทัลด
<Ctrl><Shift> + <\> = โดดไปยลังไปวงเลก็บทเคีง่ื ปป็นคยู่กลัน สลบัล ไปมสำ
หมสำยเหตุถ : คสส ำสลัื่งง อน่ืง ๆใหกค้ ด <F1> จะปรสำกฎรสำยกสำรคสสำสล่ืงังและคีคยลล ลดั
1.2.ง.) รัตนโคคด้
โคด้ค ถยกเขยคี นอยยู่ในบลอก็ คของฟัฝงกชล ั่งืลน เวลสำรัลนโค้คดเรสำจะรลันทฟงคื่ี ฝังกชล น่ลัืง ซงึถ่ืง สสำมสำรถรลนั ไดดค้ งัล นคีซ
ขร้นั ตอนกสำรรรนโคค้ด
1. บนร ทกน โปรเจ็คซ - คลกพิ ทคปงืี่ ปถ่มุ Save หรอง กด <Ctrl><S>
( <Ctrl><Shift><S> = บลนั ทึถกทกถ ไฟลล - New IDE ไมมู่ย แีค ลวค้ )
2. เลรือกฟงฟั กพ์ชท่นรี ทท่ีจะรรน – เชยูน่ ฟฝังกลชงัืล่นชอ่ืง helloWorld
3. รนร โคดค้ - คลกิพ ปม่ถุป Run(ปุปจม่ 3 เหลีทย่ ม) หรอง กด <Ctrl><R>
สสส ำหรัลบ New IDE
20 หลกัล การเขขยี นโปรแกรม Google Apps Script โดย วสลนั ต์ต คณุค ดรลกเศวต ([email protected])
1.2.จ.) เปิดป ดย Logs
( IDE ตวร ใหมม่ ไมม่ม แท บบนทร้แั ล้คว )
Logs เปป็นหนค้สำตูย่สำงทีคง่ืใชค้รลับผลจสำกกสำรรลันโคค้ดมสำแสดง เมืง่อรัลนโค้คดแลค้ว ถ้คสำโคค้ดของเรสำเรคียกใช้คบรพิกสำรของ
Logger เรสำสสำมสำรถเปปิดดย Logs ไดค้โดยไปทงืีค่ เมนย View → Logs หรอง กด <Ctrl><Enter>
1.2.ฉ.) Logs - Chrome V8
( IDE ตวร ใหม่ม ไมม่มทแบบนรแ้ทั ลว้ค )
Google Apps Script รนยู่ถ ลูยส่ ำสดถ ใชค้เครืง่องยนตล Chrome V8 ไดเ้ค พมงิื่พ Logs ระบบใหมู่ย กค็ก อง Stackdriver
logging เม่อืง รลันสครพปิ ตแล ลคว้ กด <Ctrl><Enter> เพงื่อดย Logs แบบเดพิมกไ็ก ด้ค (แตยูช่ ้คสำกวู่สย ำเดพิมมสำก)
หรอง จะดย Logs ท่คีืง Stackdriver logging กกไ็ ดค้ โดยไปทคืงเี่ มนย View → Stackdriver logging จะปรสำกฎ
หนส้ค ำตสำมภสำพ
คลกพิ ทงื่ีค Apps Script Dashboard จะปรสำกฎหน้สค ำเวก็บแสดง Logs ตสำมภสำพถลัดไป
บทท่รีิข 1 : Hello World 21
เมง่ือรลันสครพิปตล ผลจสำก Logs จะปรสำกกฎท่ืงีคน่ืคีง โดย Logs ต่สูย ำงๆทคี่งืเรสำเคยรลันไว้คจะเกก็บไวค้ทงีื่คนื่คีงดค้วย สสำมสำรถดย
ยค้อนหลงัล ไดค้ นีค่ืงเป็นป ขอ้ค ดขคี อง Logs แบบนีคซ
1.2.ช.) Logs – New IDE
New IDE ตวัล ใหมยู่ ของ Google Apps Script เมง่ือรนลั สครพิปตลหนค้สำตสู่ย ำง Execution Log จะปรสำกฎเลย
กรณีคตอค้ งกสำรดยหนสค้ ำรวม Logs ใหค้ค ลิพกทงื่ีคปถุป่ม (Execution Log)
22 หลัลกการเขียข นโปรแกรม Google Apps Script โดย วสันล ตต์ คณุค ดรลกเศวต ([email protected])
1.3. Apps Script Dashboard
เมองื่ สรค้สำงโปรเจก็ค Google Apps Script อะไรกก็ตสำม ไมว่ยู ู่สย ำจะแบบฝฝังในไฟลล หรอง แบบไฟลลโดด เรสำ
สสำมสำรถดยโปรเจ็กค Google Apps Script ทงซัล หมดไดทค้ ่ืีคง Apps Script Dashboard ตสำมลพิงคลดัลงตอู่ย ไปนคีซนีซค
https://script.google.com/home/my
สัลงเกตถท่คีงืไอคู่อย นหน้คสำช่งอื โปรเจค็ก จะเหก็นวสยู่ ำเป็ปนแบบฝัฝงในไฟลอล ะไร หรอง เป็ปนแบบ Stand alone
บททข่ิรี 1 : Hello World 23
24 หลลักการเขียข นโปรแกรม Google Apps Script โดย วสันล ตต์ คณุค ดลร กเศวต ([email protected])
บททที่ข 2
ตวลั แปร และ
โอเปอรเร์ รเตอร์ร
2.1. Variables และ Data Types
Apps Script Blastoff
https://courses.benlcollins.com/courses/enrolled/435404
JavaScript Data Types
https://www.w3schools.com/js/js_datatypes.asp
Variables หรอง ตวร แปร ใช้เค กกบ็ คยู่สำตย่สู ำงๆ โดย Variables มีหค ลสำยชนิพดแลวค้ แตวยู่ ส่ยู ำจะใชคเ้ กก็บอะไร ฉะนัซนล
Variables จึถงจสส ำแนกไดคห้ ลสำยชนิพด ซงถึ่ืง เรสำเรคยี กคณถ สมบัตล นิพ วีคซ สูย่ ำ Data Types หรอง ชนดพิ ขค้อมลย
ใหคท้ ดสอบพิพมพโล คดค้ ต่อยู ไปนีคซ แล้วค ดทย งีค่ื Logs เพงือ่ เรคยี นรยคเ้ รง่อื งชนดพิ ของข้อค มยล
ใช้ค typeof (ชนดิพ ตวตั แปร) เพ่องื ดวย ู่ยสำ ตวัล แปรดังล กลูสย่ ำวมีค ชนิพดขอ้ค มลย เป็นป อะไร
// 1. String (text values) – ข้ชอความ – ใหใช้ ชช้ Single qoutes ครอบ ============
var myName = 'Wasan Khunnadiloksawet' ;
Logger.log(myName) ; // พมร พต์ : Wasan Khunnadiloksawet
Logger.log(typeof myName) ; // พมร พต์ : String
// 2. Number – ตัลวเลข =============================================
var myAge = 41 ;
Logger.log(myAge); // พมร พ์ต : 41
Logger.log(typeof myAge); // พมร พ์ต : number
// 3. Boolean – บลบู ลนขี มขี 2 คา่ค true/false ===============================
var result = true ; // พมร พต์ : true
Logger.log(result); // พมร พ์ต : boolean
Logger.log(typeof result);
// ไมค่ได้ชประกาศตวลั แปร แบบนน้ขีไมดค่ ีข
alpha = 10 ;
Logger.log(alpha) ;
Logger.log(typeof alpha) ;
// 4. Function - ตัลวแปรแบบฟังฟ กชต์ นล่ิรั ==================================
var newFunc = function(a,b){ // พมร พ์ต : ( Code ของ newFunc )
return a+b ; // พรมพต์ : function
};
Logger.log(newFunc) ;
Logger.log(typeof newFunc) ;
// ตัลวอยาค่ งการเรียข กใช้งช านฟังฟ ก์ตชัริล่น // พมร พต์ : 16
Logger.log(newFunc(5,11)) ;
26 หลกัล การเขีขยนโปรแกรม Google Apps Script โดย วสลนั ต์ต คณคุ ดลร กเศวต ([email protected])
// 5. Object – ตัลวแปรวลัตถุค ============================================
var myDetail = { // พรมพ์ต : {name=Wasan, age=43.0, lastname=KDS}
name :'Wasan' , // พมร พ์ต : object
lastname :'KDS' ,
age : 43
};
Logger.log(myDetail);
Logger.log(typeof myDetail);
// 6. Array – อาเรยต์ - กอ้ช นขอ้ช มูลบ ============================================
var myArray = [ 1 , 2 , 3 , 4 , "AAA" ] ;
Logger.log(myArray); // พมร พ์ต : [1.0, 2.0, 3.0, 4.0, AAA]
Logger.log(typeof myArray); // พรมพต์ : object *** Array is an object data type.
2.2. Operators
JavaScript Operators
https://www.w3schools.com/js/js_operators.asp
Operators หรอง ตวร ดสสำเนพินกสำร เชูย่น เครอง่ื งหมสำย +, -, *, / เปป็นตนค้ แลคว้ แตูย่วสู่ย ำกสำรคสส ำนวณของเรสำเปน็ป
สตย รแบบไหน สยตรตลวั เลข ข้อค ควสำม บยลลีนค อสำเรยล เป็นป ตค้น กจ็ก ะมีเค ครง่อื งหมสำยโอเปอรเล ตอรใล หค้เลงอกใชต้ค ่สูย ำงกนัล
ทดสอบพิมพ พลโค้คดตอู่ย ไปนีซค แล้วค ดยที่งืค Logger
2.2.ก.) Arithmetic Operators (สสาหรบตั ตัวต เลข)
function mathOperators() {
var a = 10 ;
var b = 2 ;
// โอเปอร์เต รเตอรต์พมื้นนี ฐาน ============================================
Logger.log(a+b) ; // พรมพ์ต : 12.0
Logger.log(a-b) ; // พมร พต์ : 8.0
Logger.log(a*b) ; // พรมพต์ : 20.0
Logger.log(a/b) ; // พรมพต์ : 5.0
Logger.log(a**b) ; // พรมพ์ต : 100 ( 10 ยกกาก ลลงั 2 ) - ใช้ไช ด้แช ลว้ช ใน Chrome V8
// หารเอาเศษ ============================================
Logger.log(a%b) ; // พรมพ์ต : 0
Logger.log(5%2) ; // พมร พต์ : 1.0
Logger.log(1%0) ; // พรมพ์ต : NaN
// ยกกกาลงลั ============================================
// Math object ( ดเบู พรม่ิ เตรมขอช้ บททขีร่ิ 16 รู้บจช กลั กบัล Google Services หนาช้ 203 )
var c = Math.pow(a, b) ;
Logger.log(c) ;
บททีิรข่ 2 : ตวลั แปร และ โอเปอรต์เรเตอรต์ 27
2.2.ข.) Assignment operators
ใชก้ค สสำหนดคสูย่ ำใหคก้ ัลบตวัล แปร กคก็ อง =, +=, -=, *=, /=, %= และ **=
// เพริ่มคา่ค หรมอื ลดค่คาดชว้ ย 1 ============================================
var i=0 ; Logger.log(i) ; // พมร พต์ : 0
i++ ; Logger.log(i) ; // พมร พ์ต : 1
i-- ; Logger.log(i) ; // พมร พ์ต : 0
// เพิรม่ คา่ค หรืมอลดคคา่ ดวช้ ยค่าค อขกี ตลวั ========================================
var x = 1
var y = 50
var z = 5
var w = 100
for ( var i = 1 ; i < 5 ; i++){
x += i ; // x = x + i
y -= i ; // y = y + i
z *= i ; // z = z + i
w /= i ; // w = w + i
}
Logger.log(x) ; // พมร พต์ : 11
Logger.log(y) ; // พมร พ์ต : 40
Logger.log(z) ; // พมร พ์ต : 120
Logger.log(w) ; // พมร พ์ต : 4.1666666666666667
}
ดกย สำรลปย แต่ลยู ะครัลงซ ตสำมตสำรสำงตอู่ย ไปนคีซ
ลยป i x y x w
1 1 2 49 5 100
2 2 4 47 10 50
3 3 7 44 30 16.6666668
4 4 11 40 120 4.16666667
2.2.ค.) String operators
เครงอื่ งหมสำย + ใชเ้ค ชง่ือม String (อลกั ขระ ตวัล อกัล ษร หรอง ขค้อควสำม)
function stringOperators(){
// ใชเ้ค ครร่ีทองหมาย Single qoutes หรอร Doubles qoutes ครอบคู่าย ท่ีทเปป็นข้คอความ
// ตัวล ไหนกไ็ก ด้ช แตต่ค อ้ช งเหมือม นกนัล ทีง้ลัน บรรทดัล
var string1 = "Wasan"; // Double quotes
var string2 = 'Khunnadiloksawet' ; // Single quotes
var string3 = 'Napabhorn'; // Single quotes
// ใชเค้ ครีทรอ่ งหมาย + ในการเช่รอีท มขอค้ ความ
var fullname = string3+" & "+ string1 + " " + string2 ;
Logger.log(fullname) ;
// พมร พ์ต : Napabhorn & Wasan Khunnadiloksawet
}
28 หลักล การเขยีข นโปรแกรม Google Apps Script โดย วสันล ตต์ คณุค ดรลกเศวต ([email protected])
2.2.ง.) Comparison operators
ใชคส้ สสำหรบลั เปรคียบเทยคี บ ไดค้ทงซลั ตัวล เลขและข้คอควสำม เชยู่น เครงือ่ งหมสำย =, <, >, ! เป็ปนต้นค เนค้นทสส ำควสำม
เข้สค ำใจกัลบเครองื่ งหมสำยเทยู่สำกับล เพรสำะมถท นง 3 แบบ กก็คงอ = , == , ===
function comparisonOperators(){
var a=10 ; // Number
var b='10' ; // Text – เปป็นข้ชอความ แตคห่ นชา้ ตาเป็นป ตลัวเลข
Logger.log(a) ; // พมร พ์ต : 10.0
Logger.log(typeof a) ; // พมร พต์ : number
Logger.log(b) ; // พมร พต์ : 10
Logger.log(typeof b) ; // พมร พต์ : string
// 1. Single = : เครรืมอิ่ งหมาย = อนลั เดยีข ว เอาคา่ค จากขวาไปใส่ซค ้าช ย
a = b;
Logger.log(a) ;
Logger.log(typeof a) ;
// 2. Double == : เปรขยี บเทีขยบเฉพาะคคา่
Logger.log(a==b) ; // พมร พต์ : true - แมชช้ นดร ขชอ้ มบูลไมค่ตรงกลัน
// 3. Triple === : เปรีขยบเทยขี บค่าค และชนดร ขอช้ มูลบ
Logger.log(a===b) ; // พมร พ์ต : false - ตรวจสอบทงี้ลัน คาค่ และชนดร ของขอช้ มบลู
// 4. Not equal != : เปรียข บเทีขยบเฉพาะคาค่
Logger.log(a != b) ; // พมร พต์ : false - เพราะ ค่าค ตรงกัลน
// 5. Not equal !== : เปรขียบเทยขี บทล้ีนังคค่าและชนดร
Logger.log(a !== b) ; // พมร พต์ : true - เพราะ ชนดร ขชอ้ มลูบ ไมตค่ รงกัลน
// 6. Greater than, Less than operators
var c=50 ;
var d=100 ;
Logger.log(c>d); // พมร พ์ต : false
Logger.log(c>=d); // พมร พต์ : false
Logger.log(c<d); // พมร พต์ : true
Logger.log(c<=d); // พมร พ์ต : true
}
2.2.จ.) Logical Operators
Logical Operators
https://www.w3schools.com/js/js_comparisons.asp
Logical Operators หรงอ ตัวต ดาส เนนิพ การตรรกะ มีค 3 ตวัล ก็กคอง && (และ) , || (หรอง ) และ ! (ไม)ู่ย
Operators Description Example
&& and (x < 10 && y > 1)
|| or (x == 5 || y == 5)
! not !(x == y)
บททีริ่ข 2 : ตัวล แปร และ โอเปอรตเ์ รเตอร์ต 29
ตวร อยม่สำง
function myFunction() {
var num = 62 ;
if(num > 0 && num < 100) { // คะแนนมากกวค่า 0 และ น้อช ยกกวา่ค 100
Logger.log("คะแนนของคจุณ ครอ " + num) ;
} else {
Logger.log("Error") ;
} ; // End – if
} // End – function
ตวร อย่มสำงทท่ี 2
function myFunction2() {
var xxx = 62 ;
var yyy ; // ประกาศตัวล แปรแตค่ไมค่ไดก้ช าก หดนคคา่ - undefined
if(xxx) { // 62
Logger.log(xxx) ;
}
if(yyy) { // undefined
Logger.log(yyy) ;
}else{
Logger.log(typeof yyy) ;
}
} // End – function
2.2.ฉ.) in
The in Operator
https://www.w3schools.com/jsref/jsref_operators.asp
in จะคงนคสูย่ ำกลลบั มสำเปน็ป true ถ้สค ำคถณสมบลัตหิพ รงอคยคี (ล Property/Key)ท่งรืีค ะบถ มีใค นออ๊ก บเจก็กตล กรณีเค ปป็นอ๊กอบ
เจก็กตล ระบถโดยใชคค้ คียล กรณเีค ปปน็ อสำเรยล ระบถโดยใชด้ค รรนลีค สส ำดับล (ใช้คคถณสบัลติพ length ก็กได้ค) ตรวอยสม่ ำง
// Arrays
var cars = ["Saab", "Volvo", "BMW"] ;
"Saab" in cars // false (specify the index number instead of value)
0 in cars // true
1 in cars // true
4 in cars // false (does not exist)
"length" in cars // true (length is an Array property)
// Objects
var person = {firstName:"John", lastName:"Doe", age:50} ;
"firstName" in person // true
"age" in person // true
// Predefined objects - วัลตถคุทิ่มขีร อขี ยคบู่แลชว้ ในระบบ
"PI" in Math // true
"NaN" in Number // true
"length" in String // true
30 หลลักการเขียข นโปรแกรม Google Apps Script โดย วสนลั ต์ต คณุค ดรลกเศวต ([email protected])
2.2.ช.) Ternary Operator (ประกาศตตวั แปรตามเงทรี่อนไข)
JavaScript Comparison and Logical Operators
https://www.w3schools.com/js/js_comparisons.asp
ขอ้ค นคีซ ไม่รูย ยว้ค ส่ยู ำควรจะจดัล อย่ยูในหัลวข้อค ตวร แปร หรอง Operator ดีค เพรสำะมลนั คสำบเกย่คีงื วกลันทลัซง 2 อยสู่ย ำง
เรสำสสำมสำรถประกสำศตัลวแปร ตสำมเง่องื นไขไดคด้ ว้ค ย โดยใชค้ Operator ? ตสำมรยปแบบกสำรใช้คงสำนตยอู่ ไปนคีซ
variablename = (condition) ? value1 : value2
// true false
ถคส้ ำเงงื่อนไขเปปน็ true ตวัล แปร จะเกบก็ คู่สย ำ value1 แตูย่ถค้สำเปนป็ false จะเกบ็ก คสูย่ ำ value2 ไวค้
ตรวอยสม่ ำง
var voteable, age = 19 ;
ar voteable = (age < 18) ? "Too young" : "Old enough" ;
Logger.log(voteable) ; // พมร พต์ : Old enough
2.2.ซ.) ใช้ค || และ && ประกาศตตวั แปรตามเงีรทอ่ นไข
มีอค ีกค แบบทีคค่งื ล้สค ำยกบลั Ternary Operator ก็คก งอกสำรใช้ค || หรงอ &&
ตรวอยส่ม ำง
var a = false ;
// true ได้ชตลัวแรก false ไดตช้ ลวั ท่ิรีข 2
var b = a || "Hello" ;
Logger.log(b) ; // ผล : Hello
var x ; // ตอนนเีข้น ปป็น undefined
var y = x || "No" ; // ผล : No
Logger.log(y) ;
ตวร อยสม่ ำง
var msg = 0 ;
var newMsgTxt = "You have " + msg + " messages." ;
var noNewMsgText = "Sorry, you have no new messages." ;
Logger.log(( msg && newMsgTxt) || noNewMsgText) ;
ผล – ถคส้ ำ msg = 0 ;
Sorry, you have no new messages.
ผล – ถคส้ ำ msg = 1 ;
You have 1 messages.
บททิรขี่ 2 : ตวลั แปร และ โอเปอรต์เรเตอร์ต 31
2.3. Backticks – Chrome V8
คสู่ย ำทงีเ่ืค ปนป็ สตริงพ นอกจสำกใช้ค ' ' หรรอ " " ครอบสตริงพ แล้วค เรสำสสำมสำรถใช้ค Backticks หรอง Grave accent
หรงอ เครรีอ่ืท งหมสำย ` ` ครอบไดด้ค คว้ ย แตูย่มีคควสำมพพเิ ศษในกสำรใช้คงสำนมสำกกวูส่ย ำ
หมสำยเหตุถ
Backticks ตค้องใชค้ป่ปถุมตวัล หนอนในกสำรพพิมพล ซืง่ึงถ ใครทใืีค่ง ช้คทสสำเปป็นปุปถ่มสลบัล ภสำษสำไปแลวค้ จะพิมพ พไล มู่ยไดค้ วธิพ แคี กค้
- สสส ำหรับล Windows กด <Alt><96> (ไมูไ่ย ดค้ทดสอบใน Windows ถสค้ ำไมู่ยไดค้ขออภัยล ด้ควย)
- สสส ำหรลับ Linux <Ctrl><Shift><U> + <60> + <Enter> (ใชคแ้ ปป้นพพิมพลภสำษสำอัลงกฤษ)
ดเูบ พิมร่ เตมร - https://www.fileformat.info/info/unicode/char/0060/index.htm
https://en.wikipedia.org/wiki/List_of_Unicode_characters
2.3.ก.) ใช้คตตวั แปรใน Backticks
สสำมสำรถจลับตวัล แปรใสใู่ย น Backticks ไดค้ โดยใสใยู่ น ${ }
ตวร อย่มสำง
let a = 3 ;
let b = 4.123 ;
let c = -5.123 ;
console.log(`The max value is ${Math.max(a, b, c)} ` ) ;
// The max value is 4.123
2.3.ข.) พพิมพลอกัต ขระพิพเศษใน Backticks
ใน Backticks ถส้ค ำเรสำจะใชคอ้ ัลกระพเิพ ศษ ไมต่ยู ค้องใช้ค \ พิมพ พลไวก้ค ู่อย นหนส้ค ำอคกี แลว้ค ควสำมซัลบซคอ้ นในกสำรสรค้สำง
ตวลั แปรขอ้ค ควสำม กนก็ ้อค ยลงด้วค ย
ตวร อยมส่ ำง
let person = {
name : 'Wasan' ,
age : 43
};
// ใช้ช " "
let str = "<p>My name is " + person.name + ",</p>\n" +
"<p>I am " + person.age + " \! years old</p>\n"
// ใช้ช ` `
let newStr = `<p>My name is ${person.name},</p>
<p>I am ${person.age} ! years old</p> ` ;
console.log(str) ; // ดบูผลทขริ่ี Logs ------------------ > [ 01 ]
console.log(newStr) ; // ดูผบ ลท่ิรีข Logs ------------------ > [ 02 ]
32 หลลกั การเขยขี นโปรแกรม Google Apps Script โดย วสนัล ตต์ คณคุ ดลร กเศวต ([email protected])
ผล – ใหคผ้ ลเหมงอนกนัล แตคยู่ วสำมซัลบซอค้ นในกสำรสรค้สำงสตรพงิ ตสยู่ ำงกนัล
Logs
[ 01 ] <p>My name is Wasan,</p>
<p>I am 43 ! years old</p>
[ 02 ] <p>My name is Wasan,</p>
<p>I am 43 ! years old</p>
2.4. Use Strict – Chrome V8
JavaScript Use Strict
https://www.w3schools.com/js/js_strict.asp
คยคี ลเวริพ ดล use strict ใช้คบอกโคดค้ วสยู่ ำควรจะทสส ำงสำนในโหมด stick หรงอไมยู่ ถ้สค ำเปดิป โหมด stick เรสำจะไมูย่
สสำมสำรถใชตค้ ัวล แปรทง่คีไื มปยู่ ระกสำศไดค้ หรอง ประกสำศผดพิ รปย แบบกใ็ก ชง้ค สำนไมู่ไย ด้ค
use strict ชวยู่ ยใหค้เรสำเขคียนโคค้ดท่ืงปคี ลอดภัยล รอบคอบยงื่งพิ ขึถนซ
Browser รนยถู่ ใหมยู่ๆ รองรบลั คียค ลเวิรพ ดล นคซี แตรู่ย ถยูน่ เกสู่ย ำๆ จะมองข้คสำมไป
ตวร อยสม่ ำง
"use strict" ;
x = 3.14 ; // Error เพราะ x ไมไ่ค ดป้ช ระกาศ
"use strict";
ตรวอยสม่ ำง
myFunction() ;
function myFunction() {
y = 3.14 ; // Error เพราะ y ไม่ไค ดปช้ ระกาศ
}
use strict สสำมสำถใช้แค บบ Local ภสำยในฟัฝงกชล ลังื่นไดดค้ คว้ ย ก็คก อง มอีค สำณสำเขตกสำรทสสำงสำนเฉพสำะภสำยในฟฝงั
กชล ัลืงน่ เทสู่ย ำนลซนั
x = 3.14 ; // OK - x ใชงช้ านไดช้
myFunction() ;
function myFunction() {
"use strict" ;
y = 3.14 ; // Error เพราะ y ไมคไ่ ดชป้ ระกาศ
}
บททขี่ริ 2 : ตัลวแปร และ โอเปอร์เต รเตอรต์ 33
ตวร อยสม่ ำง : แมจค้ ะปรสำกสำศตัวล แปร แตยถู่ คส้ ำประกสำศนอกเหนงอโหมด Stick จะเกดพิ Error เช่นูย กันล
"use strict" ; // Error เพราะ ไมอค่ นุคญาตเลขฐาน 8
var x = 010 ; // Error เพราะ ไมอค่ นญุค าตเลขฐาน 8 ทร่ขีมิ ขี \
var y = "\010" ; // Error เพราะ eval เป็ปนคาก สงวน
var eval = 3.14 ;
2.5. Bitwise Operators
JavaScript Bitwise Operators
https://www.w3schools.com/jsref/jsref_operators.asp
( ผเผ้ต ขทยนไมเก่ คยใชต้ แตกเ่ ขทยนเกกบ็ ไวต้ เผอ่ผที มทโอกาสไดตใ้ ช้ต )
Bitwise Operators(ตวัล ดสสำเนนพิ กสำรบพิต) ทสส ำงสำนกลบั ตวลั เลข 32 บพิต ตวัล เลขใดๆ ในกสำรดสสำเนพนิ กสำรจะถยก
แปลงเปปน็ ตวลั เลข 32 บติพ ผลลลพั ธจล ะถยกแปลงกลบัล เป็นป เลข JavaScript
ตวัล อยสู่ย ำง
Operator Description Example Same as Result Decimal
& AND x=5&1 0101 & 0001 0001 1
| OR x=5|1 0101 | 0001 0101 5
~ NOT x=~5 ~0101 1010 10
^ XOR x=5^1 0101 ^ 0001 0100 4
<< x = 5 << 1 0101 << 1 1010 10
>> Left shift x = 5 >> 1 0101 >> 1 0010 2
Right shift
ตวัล อยสยู่ ำงขคส้ ำงตค้น ใชคเ้ ลข 4 บพติ ที่งืไค มู่ยมคีลสำยเซกน็ แตยู่ JavaScript ใชคต้ วัล เลขทมงคื่ี ีลค สำยเซน็ก 32 บตพิ
ดว้ค ยเหตนถ ซีใค น JavaScript ~5 จะไม่คูย นง คส่ยู ำ 10 มลันจะสยงู่ คงน -6
~00000000000000000000000000000101 จะคงนมสำเป็นป 11111111111111111111111111111010
34 หลลักการเขยีข นโปรแกรม Google Apps Script โดย วสัลนตต์ คณุค ดรลกเศวต ([email protected])
บททขีท่ 3
var, let และ const
(Chrome V8)
3.1. let และ var
JavaScript Let
https://www.w3schools.com/js/js_let.asp
ES2015 (และ Apps Script Chrome V8) เปดปิ ใช้ค let และ const โดยกอ่ยู นหนส้ค ำ ES2015 Javascript มคี
เพคียง var และ 2 Scopes กคก็ งอ Global Scope และ Function Scope กก็คอง ประกสำศตวลั แปรไว้นค อกฟฝังกชล ่ลืงัน
หรอง ในฟฝังกลชืนงลั่
3.1.ก.) Global Scope
ตวัล แปรประกสำศไวน้ค อกฟฝงั กชล ง่ืนัล สสำมสำรถเรยคี กใชจค้ สำกทงีคื่ไหนกไ็ก ดใค้ นโปรแกรม Javascript
var carName = "Volvo" ;
// โคชด้ ตรงนีนข้สามารถใช้ช carName
function myFunction() {
// โคด้ช ตรงนส้ีนข ามารถใช้ช carName
}
ตวลั อยสูย่ ำง
var x = 2
Logger.log("X1 : " + x )
function test() {
var x = 20 ;
Logger.log("X2 : " + x )
}
Logger.log("X3 : " + x)
ผล – ใน Apps Script ตวลั แปรทคงื่ปี ระกสำศแบบ Global scope จะถกย ดสสำเนนิพ กสำรกยู่อน ไมวู่ย สูย่ ำจะอยตูย่ รงไห
Logs
[] X1 : 2
[] X3 : 2
[] X2 : 20
3.1.ข.) Function Scope
ตวัล แปรประกสำศไวใค้ นฟงฝั กชล ลัื่นง เรยีค กใชไค้ ด้เค ฉพสำะในฟฝังกลชั่นลืง นนลัซ ๆ (สสำมสำรถใชช้ค ่ืงอซสสซ ำไดค้ในฟฝังกชล ัืนง่ล อ่ืงนๆ)
// โคด้ช ตรงนขีน้ไมส่ค ามารถใช้ช carName
function myFunction() {
var carName = "Volvo" ;
// โคด้ช ตรงนสีนข้ ามารถใช้ช carName
}
// โคด้ช ตรงนข้นีไมส่ค ามารถใชช้ carName
36 หลลักการเขขียนโปรแกรม Google Apps Script โดย วสันล ตต์ คณุค ดรลกเศวต ([email protected])
3.1.ค.) Block Scope
ตวัล แปรประกสำศดวค้ ย var ไมส่ยู สำมสำรถมีค Block Scope ตวลั แปรประกสำศดว้ค ย var ในบลกอ็ ค { } สสำมสำรถ
เรยีค กใชไ้ค ด้จค สำกภสำยนอก
เชยนู่
{
var x = 2 ;
}
// x สามารถใช้ทช ิีรข่นขรไิ่ี ดช้
กอยู่ นหน้คสำ ES2015 Javascript ไมูมย่ ีค Block scope
ตวัล แปรประกสำศดวค้ ย let สสำมสำรถใชค้ภสำยใน Block ไดค้ แตู่ยไมสู่ย สำมสำรถเรคยี กใชไค้ ดจ้ค สำกภสำยนอก เชนูย่ ใชค้ได้ค
เฉพสำะใน for(){} เป็นป ตนค้
เชนู่ย
{
let x = 2 ;
}
// x ไมสค่ ามารถใช้ชทิรีข่น่ีไริข ด้ช
3.1.ง.) Redeclaring Variables (ประกาศตตวั แปรซนี้าส )
กสำรประกสำศตัลวแปรซซสส ำ ดว้ค ย var อสำจสรส้ค ำงปัญฝ หสำ กสำรประกสำศตวลั แปรซสซสำภสำยในบล็กอค จะประกสำศซซสส ำ
นอกบล็อก คดว้ค ย
เชยู่น
function ftest() {
var x = 10 ;
// ตรงนนีข้ x กค็ก อืม 10
{
var x = 2 ;
// ตรงน้ีขน x กค็ก อมื 2
}
// ตรงนนี้ข x ก็คก อืม 2
}
บททิรี่ข 3 : var, let และ const (Chrome V8) 37
กสำรประกสำศตวัล แปรซซสสำ ดว้ค ย let แก้คไขปญัฝ หสำขส้ค ำงตน้ค ไดค้ กสำรประกสำศตวลั แปรซสสซ ำภสำยในบลก็อค จะไมยูเ่ กืยงีค่ ว
กบัล นอกบลก็อค
function ftest() {
var x = 10 ;
// ตรงนขีน้ x กคก็ ืมอ 10
{
let x = 2 ;
// ตรงนีขน้ x กคก็ มอื 2 – let ใชช้ได้ชแต่คใน Block
}
// ตรงนีน้ข x กคก็ อมื 10
}
3.1.จ.) Loop Scope
กสำรใชค้ var ในลปย
var i = 5 ;
for (var i = 0 ; i < 10 ; i++) { // ประกาศซกนีา้ – assign คา่ค ใหม่ค
// โคชด้
}
// ตรงนี้นข i กคก็ อมื 10
กสำรใช้ค let ในลยป
var i = 5 ;
for (let i = 0 ; i < 10 ; i++) { // ประกาศซนกี้า - คนละตัวล
// โคดช้
}
// ตรงนีนข้ i กค็ก ือม 5 – เพราะ i ทน่ขีริ าก ไปวนลบปู เปปน็ คนละตลัวกบัล ทีรป่ิข ระกาศด้ชวย var
3.2. Global Variables in HTML
ดวค้ ย Javascript ตวลั แปรแบบ Global scope อย่ใูย นสภสำวะแวดลค้อมของ Javascript ใน HTML ตวลั แปร
แบบ Global scope กกค็ งอ Window object
3.2.ก.) ตตวั แปร Global scope ทป่ที ระกาศดค้วย var เป็นป ของ Window object
ตวลั อยสู่ย ำง
var carName = "Volvo";
// โค้ดช ตรงนีขน้สามารถใชช้ window.carName
38 หลลักการเขยีข นโปรแกรม Google Apps Script โดย วสลนั ตต์ คณุค ดรลกเศวต ([email protected])
ตวลั อยส่ยู ำง
<body>
<h2>JavaScript Global Variables</h2>
<p>In HTML, global variables defined with <b>var</b>, will become window variables. </p>
<p id="demo"></p>
<script>
var carName = "Volvo";
// โคด้ช ตรงนีขส้น ามารถใช้ช window.carName
document.getElementById("demo").innerHTML = "I can display " + window.carName ;
</script>
</body>
ผล
3.2.ข.) ตัตวแปร Global scope ทปท่ี ระกาศด้วค ย let ไมู่ไย ดเ้ค ป็ปนของ Window object
let carName = "Volvo" ;
// โคด้ช ตรงนีน้ขไม่คสามารถใช้ช window.carName
ตวัล อยสยู่ ำง
<body>
<h2>JavaScript Global Variables</h2>
<p>In HTML, global variables defined with <b>let</b>, will not become window variables.
</p>
<p id="demo"></p>
<script>
let carName = "Volvo";
// code here can use window.carName
document.getElementById("demo").innerHTML = "I can not display " + window.carName ;
</script>
</body>
บททขริ่ี 3 : var, let และ const (Chrome V8) 39
ผล
3.3. กสำรประกสำศตวัล แปรซซสสำ
กสำรประกสำศตวลั แปรซสซสำด้วค ย var ทสสำได้คทกถ ทืใคงี่ นโปรแกรม
var x = 2 ;
// x กคก็ ือม 2
var x = 3 ;
// ตอนนีน้ข x กค็ก อืม 3 – ตอนนป้ีนข ระกาศแบบนีน้ไข มไ่ค ด้ชแล้ชว Error กคก็ อืม x ประกาศไปแลชว้ ประกาศซ้นกาี ไมไค่ ด้ช
กสำรประกสำศตวัล แปรซสซส ำกบลั var ดวค้ ย let ใน Scope หรอง Block เดียค วกนัล ไมสม่ สำมสำรถทสสำไดค้
var x = 2 ; // Allowed
let x = 3 ; // Not allowed (ซ้ีนกาขช้างบน – ใน Scope เดียข วกันล )
{ // Allowed
var x = 4 ; // Not allowed (ซกนี้าขา้ช งบน – ใน Scope เดยขี วกนลั )
let x = 5 ;
}
กสำรประกสำศตวลั แปรซสซสำกบัล let ดวค้ ย let ใน Scope หรอง Block เดียค วกนลั ไม่สม สำมสำรถทสสำได้ค
let x = 2 ; // Allowed
let x = 3 ; // Not allowed (ซ้าีนก ขช้างบน – ใน Scope เดีขยวกนัล )
{ // Allowed
let x = 4 ; // Not allowed (ซี้านก ขา้ช งบน – ใน Scope เดยีข วกันล )
let x = 5 ;
}
กสำรประกสำศตวัล แปรซสสซ ำกลับ let ดว้ค ย var ใน Scope หรอง Block เดยีค วกลัน ไมมส่ สำมสำรถทสส ำได้ค
let x = 2 ; // Allowed
var x = 3 ; // Not allowed (ซ้ากีน ข้ชางบน – ใน Scope เดขียวกนัล )
{ // Allowed
let x = 4 ; // Not allowed (ซีานก้ ขา้ช งบน – ใน Scope เดียข วกนัล )
var x = 5 ;
}
40 หลัลกการเขียข นโปรแกรม Google Apps Script โดย วสลันต์ต คณุค ดลร กเศวต ([email protected])
กสำรประกสำศตัลวแปรซสซสำกับล let ดว้ค ย let นอก Scope หรอง Block เดยคี วกนัล สสำมสำรถทสส ำได้ค
let x = 2 ; // Allowed
// Allowed
{
let x = 3 ; // Allowed
}
{
let x = 4 ;
}
3.4. Hoisting
ตวัล แปรท่ปืีคง ระกสำศดว้ค ย var ถยกยกไปทดคีงื่ ส้ค ำนบน เรสำจนงสสำมสำรถใชค้ตวร แปรไดกค้ อม่ นททีม่ รนจะถกมู ประกสำศ
เชยู่น
<body>
<h2>JavaScript Hoisting</h2>
<p>With <b>var</b>, you can use a variable before it is declared:</p>
<p id="demo"></p>
<script>
carName = "Volvo" ; // ยงัล ไมค่ var
document.getElementById("demo").innerHTML = carName ;
var carName ;
</script>
</body>
ผล
ตลัวแปรท่ืงีคประกสำศดค้วย let ไม่คมีข Hoisting กสำรใช้คตัลวแปร let กยู่อนทคีงื่มลันจะถยกประกสำศจะได้คผลลัลพธลเป็ปน
ReferenceError ตวัล แปรอยูใ่ย นพซงนที่ืคง Dead Zone ชัวลงื่ ครสำวตลงซั แต่เยู ร่ิงพมื บล็อก คจนกระทื่งงัล ถยกประกสำศ
จสำกตวัล อยู่ยสำงขส้ค ำต้คน ถ้สค ำเปลคืง่ียนเป็ปน let carName ; จะไม่ปยู รสำกฎผลลลัพธล
JavaScript Hoisting
https://www.w3schools.com/js/js_hoisting.asp
Hoisting ใน Javascript เป็นป พฤตพกิ รรมปกตพใิ นกสำรยส้ค ำยตวัล แปรไปดสค้ ำนบน – แนะนสส ำให้คประกสำศตวัล แปรไวค้
ดสค้ ำนบนของ Scope เสมอ
บทที่ิรข 3 : var, let และ const (Chrome V8) 41
3.5. const
JavaScript Const
https://www.w3schools.com/js/js_const.asp
ตัลวทีืคง่ประกสำศดค้วย const มีคพฤติพกรรมเหมงอน let เพีคยงแตู่ยไม่ยูสสำมสำรถใสูย่คูย่สำใหมยู่ลงไปไดค้ ประกสำศแลค้ว
กสสำหนดคสูย่ ำลงไปแลคว้ จะไมสยู่ สำมสำรถกสสำหนดคสยู่ ำใหม่ลยู งไปไดค้
เชย่นู
const PI = 3.141592653589793 ;
PI = 3.14 ; // Error
PI = PI + 10 ; // Error เชคน่ เดีขยวกันล
3.5.ก.) Block Scope
เหมอง นกบัล let เมง่อื ประกสำศใน Block scope
var x = 10 ;
// ตรงนขีน้ x ก็คก อมื 10
{
const x = 2 ;
// ตรงนีขน้ x กกค็ อมื 2
}
// ตรงนีนข้ x กก็คอืม 10
3.5.ข.) Assigned when Declared
const ตค้องกสส ำหนด value เมง่อื ประกสำศเสมอ
// ผดร
const PI ;
PI = 3.14159265359 ;
// ถกูบ
const PI = 3.14159265359 ;
3.6. เปลี่คทยนได้ค หรอรื ไมไ่ม ดค้
3.6.ก.) Not Real Constants
const ชอง่ื ของมันล อสำจทสสำให้เค ขส้ค ำใจผิพดไดค้ เพรสำะมนลั ไม่ใยู ชูยก่ สำรกสสำหนดคสู่ย ำคงทีืง่ค แตม่ยู นลั เปป็นกสำรกสสำหนด กสำร
อสค้ ำงอิงพ คงททไ่ี ปทท่ีคมส่ ำ
เพรสำะอยสยู่ ำงนีซค เรสำจงึถ ไม่สูย สำมสำรถเปลง่ีคยื นคูย่สำคงทคีง่ืดังลซ เดิมพ ไดค้ (Constant primitive values) แตยูเ่ รสำสสำมสำรถ
เปลืคี่ยง นคณถ สมบัตล ิขพ อง วตัล ถคถ งท่งีืไค ด้ค (Constant objects)
42 หลกลั การเขียข นโปรแกรม Google Apps Script โดย วสันล ต์ต คณุค ดลร กเศวต ([email protected])
3.6.ข.) Primitive Values
ถคส้ ำเรสำกสสำหนดคยสู่ ำคงทดคีืง่ ซลงั เดิมพ ให้กค บัล ตวลั แปรสกัล ตวลั เรสำจะไมูยส่ สำมสำรถเปลีืย่คง นคสยู่ ำคงทคีด่ืง ซงัล เดพิมไดค้
ตวัล อยู่ยสำง
const PI = 3.141592653589793 ;
PI = 3.14 ;
PI = PI + 10 ;
Logger.log(PI) // 3.141592653589793 – ยังล คงเป็ปนคค่าแรก
// ถช้าเป็นป Javascript Error ไปแลช้ว
3.6.ค.) Constant Objects can Change
เรสำสสำมสำรถเปลคีย่ืง นคถณสมบลตั ิขพ องวตัล ถถคงทคไ่ีืง ด้ค
ตวร อยสม่ ำง
// เราสามารถประกาศ Object แบบ const ได้ช
const car = {type:"Fiat", model:"500", color:"white"} ;
// เปลยีรขิ่ นคาค่ ของคุคณสมบตลั ไร ดช้
car.color = "red" ;
// เพม่ริ คณุค สมบลตั ไร ดช้
car.owner = "Johnson" ;
// ลบคณุค สมบัลตรได้ช
delete car.owner ;
อยสู่ย ำงไรกก็ดคี ไม่มสสำมสำรถกสสำหนดคม่สำใหมม่ ใหกค้ บร ตวร แปรทเีท่ ปน็ป วตร ถคถุ งท่ไที ดค้
const car = {type:"Fiat", model:"500", color:"white"} ;
car = {type:"Volvo", model:"EX60", color:"red"} ;
Logger.log(car) // {type:Fiat, model:500, color:white} - car ยงัล เปน็ป บรรทดัล บน
// ถช้าเปป็น Javascript Error ไปแล้ชว
3.6.ง.) Constant Arrays can Change
เรสำสสำมสำรถเปลคีย่งื นสมสำชกพิ ในอสำเรยคล งทไง่ืีค ดค้
// เราสามารถประกาศ Array แบบ const ไดช้
const cars = ["Saab", "Volvo", "BMW"] ;
// เปลยีริ่ข นค่าค ของอรเล็มก เมน้ช ตไต์ ด้ช
cars[0] = "Toyota" ;
// เพม่ริ สมาชกร ไดช้
cars[3] = "Nissan" ;
// เพร่มิ อเร ลก็มเมชน้ ตไ์ต ดช้
cars.push("Audi") ;
บททขีริ่ 3 : var, let และ const (Chrome V8) 43
อยส่ยู ำงไรกด็ก คี ไมสม่ สำมสำรถกสส ำหนดค่มสำใหมม่ในอสำเรยคพ์ งททีไ่ ดค้
const cars = ["Saab", "Volvo", "BMW"] ;
cars = ["Toyota", "Volvo", "Audi"] ;
Logger.log(cars) // ["Saab", "Volvo", "BMW"] - ยลังเปนป็ บรรทัดล บน
// ถชา้ เปป็น Javascript Error ไปแลวช้
3.7. Redeclaring (const)
กสำรประกสำศตวัล แปรซสซส ำกัลบตวัล แปรทปคีง่ื ระกสำศด้ควย var หรงอ let ดว้ค ย const ภสำยใน Scope เดยคี วกลัน ไม่ม
สสำมสำรถทสสำไดค้
var x = 2 ; // Allowed
const x = 2 ; // Not allowed
{
// Allowed
let x = 2 ; // Not allowed
const x = 2 ;
}
กสำรประกสำศตวัล แปรซสซส ำกลับตวัล แปรทคีงื่ประกสำศดค้วย const ดวค้ ย const ภสำยใน Scope เดียค วกนลั ไม่สม สำมสำรถ
ทสส ำได้ค
const x = 2 ; // Allowed
const x = 3 ; // Not allowed
x=3; // Not allowed
var x = 3 ; // Not allowed
let x = 3 ; // Not allowed
{ // Allowed
const x = 2 ; // Not allowed
const x = 3 ; // Not allowed
x=3; // Not allowed
var x = 3 ; // Not allowed
let x = 3 ;
}
กสำรประกสำศตวัล แปรซสซส ำกบัล ตลัวแปรทงีคื่ประกสำศด้วค ย const ดว้ค ย const ภสำยนอก Scope สสำมสำรถทสสำไดค้
const x = 2 ; // Allowed
// Allowed
{
const x = 3 ; // Allowed
}
{
const x = 4 ;
}
44 หลลักการเขยขี นโปรแกรม Google Apps Script โดย วสนัล ต์ต คณุค ดรลกเศวต ([email protected])
บททท่ีข 4
ฟฟังกชร์ ัที่นล
4.1. ฟฟังก์ยช่ัลทีน (Functions)
ฟฝงั กชล ี่ทันต (Functions) เป็นป บลก็อคของโค้ดค ทงืชี่ค วู่ย ยให้คเรสำซอยโค้ดค เปป็นบลก็อคต่สยู ำงๆ ทสสำใหคโ้ ค้คดอสู่ย ำนงูยส่ ำย และ
สสำมสำรถรียค สย โคดค้ ไดค้ดว้ค ย เพรสำะฟังฝ กลชล่ันงื ท่คเงีื ขยีค นไว้คแล้วค เรสำสสำมสำรถเกบ็ก ไว้ใค ชค้ไดต้ค ลอด เพยีค งแตตู่ย ค้องทรสำบวส่ยู ำ ตอค้ งส่งูย
อะไรไปให้คฟฝังกชล ลงัื่น และฟัฝงกชล นืง่ลั คงนอะไรกลลบั มสำให้เค รสำ
4.1.ก.) โครงสราค้ งของฟฝังกลชนทัตี่
Argrument (ตวตั แลกเปลย่ีท น) เปป็นวลัตถถดพิบทค่เีงื รสำตค้องสูยง่ ไปใหค้ฟัฝงกลชง่นลืั ประมวลผล
function functionName(argrument1, argrument2, argrument3) {
// โคด้ช ทีิจ่ขร ะทาก งานเมอมืริ่ ฟฟังกต์ชนิ่ัรล ถกูบ เรขยี กใช้ชงาน
// argument1, argument2, argument3 คอืม วลตั ถดคุ บร ทขี่ิรจะนาก มาประมวลผลในฟงฟั กช์ต รลินั่
}
ตวร อย่มสำง – กสำรสรค้สำงฟงัฝ กชล นัล่ืง อยส่ยู ำงงส่ยู ำย ทงืคี่ไม่มูย กคี สำรส่งยู ผู่สย ำน Argrument (ตวัต แลกเปลท่ยี น)
function firstFunction() {
Logger.log("Hello world!");
}
4.1.ข.) Globally declared และ Locally declared
กสำรประกสำศตรวแปร ในฟัฝงกลชนัต่ที (Locally declared) และ นอกฟงัฝ กชล นัท่ีต (Globally declared) ตสยู่ ำงกลนั
เชู่ยน
ตวลั แปร price ประกสำศอยใูย่ นฟังฝ กชล ล่ังืน myPrice เป็ปนตัวล แปรแบบ Locally declared สสำมสำรถใชค้งสำนไดค้
เฉพสำะในฟงัฝ กชล ่ลัืนง myPrice() ไมสู่ย สำมสำรถเรยีค กใชคจ้ สำกนอกฟัฝงกชล ลื่นงั ไดค้
ตวลั แปร Const ประกสำศอยยูน่ อกฟงฝั กชล ลัืง่น เปป็นตลวั แปรแบบ Globally declared ตวัล แปร Const สสำมสำรถถกย
เรีคยกใช้จค สำกฟงัฝ กลชลงนัื่ ใดก็ไก ดค้
var Const = 100 ;
Logger.log(price); // Error เพราะตวลั แปร price อยู่บใค นฟังฟ กช์ต ่ินลัร แต่เค รยีข กใชง้ช านขา้ช งนอก
function myPrice() { // รนลั ฟังฟ ก์ตชลน่ัริ นีขน้
var price = 9.99;
Logger.log(price); // พมร พต์ : 9.99
Logger.log(Const); // พมร พ์ต : 100
}
Logger.log(price); // Error เพราะตวัล แปร price อย่คใูบ นฟงัฟ ก์ตชลริ่นั แตเ่ค รยีข กใชชง้ านขชา้ งนอก
46 หลัลกการเขยีข นโปรแกรม Google Apps Script โดย วสลันต์ต คณุค ดลร กเศวต ([email protected])
4.1.ค.) ตัตวอยย่าู ง – ฟงฝั กชล ่ันตที ททม่ี กท ารส่ยูงผาู่ย น Agruments 2 ตวัต
ตวัล อยูยส่ ำงโคด้ค นคซสี ู่งย ผยู่สำน Agrument 2 ตวัล เมองื่ ฟงฝั กลชืลังน่ ประมวลผลแลวค้ จะคงนคยสู่ ำกลัลบมสำ ตสำมบรรทดัล
return
บรรทดลั Logger.log(addFunction(3,4)); ทื่อีคง ยนยู่ อกฟฝงั กชล ง่นืัล เปน็ป กสำรเรยีค กใช้ฟค งฝั กชล ื่งัลน
function addFunction(firstNum, secondNum) {
return firstNum + secondNum ;
}
function call() {
Logger.log(addFunction(3,4)); // พรมพต์ : 7
}
4.1.ง.) ตตวั อยู่ยาง - เรทยกใช้คฟงัฝ กลชน่ตัีท อน่ีทร จากอกท ฟังฝ กชล ี่นตัท
เรสำเรยคี กใช้ฟค ฝังกชล ืลงั่นองื่น จสำกอีกค ฟัฝงกชล งน่ลัื ได้ค ซ่ืงึงถ จะเหนก็ แบบนซบีค ูอย่ ยมสำกในกสำรเขคยี นโคดค้
function addFunction(firstNum, secondNum) {
return firstNum + secondNum ;
}
function runOtherFunction() { // รลนั ฟังฟ กช์ต ่ัิลรนนนีข้
var answer = addFunction(100,93) ;
// เรยีข กใช้ชฟัฟงกช์ต ัริ่นล และ เกบก็ การคมืนคาค่ จากฟงัฟ กต์ชัริ่ลนไว้ใช นตวลั แปร
Logger.log(answer) ; // 193
}
4.1.จ.) ตวัต อยูา่ย ง – เกบล็ ฟฝงั กชล น่ีทตั ไวคใ้ นตตวั แปร
เรสำมสำรถเกก็บฟฝงั กลชลน่งัื ไว้คในตลัวแปรไดค้ เวลสำเรยคี กใชคง้ สำน จะเรคียกจสำกช่อืง ตวลั แปร
var mult = function(a,b) {
return a * b ;
}
Logger.log(mult); // พมร พต์ : (โคดช้ ของฟัฟงกช์ต น่ิรัล ) – ไมว่ค ่คาจะรัลนฟงฟั กช์ต ันล ไหนกก็ตาม
var power = function(a,b) {
return Math.pow(a,b) ;
}
function call() {
// เรขียกใชฟช้ ฟังก์ตชรลัน่ิ mult
Logger.log(mult); // พมร พต์ : (โคดช้ ของฟงัฟ กต์ชนลัริ่ )
Logger.log(mult(5,10)) ; // พมร พ์ต : 50
Logger.log(power(3,4)) ; // พมร พต์ : 81
}
บททร่ขิี 4 : ฟงัฟ ก์ตชลัร่นิ 47
4.1.ฉ.) ตัวต อยู่ยาง – Agruments ททเี่ ปน็ป ฟงฝั กชล ทัีต่น
Agrument ท่ีคงืใช้คสยู่งผยู่สำนกัลนระหวู่สย ำงฟฝังกลชลังื่น สสำมสำรถสู่ยงผู่ยสำนเปป็นฟัฝงกลชลันได้ค (ศึถกษสำเพืงิ่พมเตพิมเร่ืงอง Callback
ของ Javascript)
function superFunc(functionArgument, a, b) {
return functionArgument(a,b) ;
}
function callFunc() {
Logger.log(superFunc(power,2,3)) ; // พมร พต์ : 8.0
Logger.log(superFunc(mult,2,3)) ; // พมร พ์ต : 6.0
Logger.log(superFunc(addFunction,2,3)) ; // พมร พ์ต : 5.0
}
4.1.ช.) สรค้างฟงัฝ กชล นัต่ีท ไวใ้ค ชงค้ านใน Google Sheet
เขคียนโค้คด Google Apps Script ตูย่อไปนคีซเก็กบไวค้ ในโปรเจก็คแบบฝัฝงในไฟลล Google Sheets จสำกนลซันบัลนทถึก
โคค้ด
function mulByX(x,y) {
return x*y ;
}
กสำรใชคง้ สำนไมูยต่ คอ้ งรลันโคด้ค แตยใู่ หเ้ค รคยี กใช้จค สำก Google Sheets สสำมสำรถเรยคี กใชคไ้ ดเ้ค หมงอนกสำรใชค้งสำน
ฟฝงั กชล ่งืลันทวืงั่ล ไปของ Google Sheet อยยู่สำง SUM
ตวัล อยสูย่ ำงกสำรใช้คงสำน
=mulByX(5,8)
หลังล กด <Enter> เพง่ือประมวลผล จะปรสำกฎขคอ้ ควสำม Loading เพรสำะต้คองสู่งย โคดค้ ไปประมวลผลท่ีคืง
เซิพรฟล เวอรลของ Google
48 หลัลกการเขยขี นโปรแกรม Google Apps Script โดย วสัลนตต์ คณคุ ดลร กเศวต ([email protected])
4.1.ซ.) ทาส ใหเค้ รทยกใช้คงานได้เค หมรอนกบตั ฟฝงั กชล ่ีตันท Built-in
(ลองแล้ควยงร ไม่ม Work - แตม่เขทยนเก็ซบไว้คกมอ่ น)
รสำยละเอยีค ดเพงพืม่ิ เติมพ
https://developers.google.com/apps-script/guides/sheets/functions
https://yagisanatode.com/2018/08/24/google-apps-script-how-to-make-a-custom-function-to-use-in-google-sheets/
ใสูย่ Comment ในโคคด้ โดยระบคถ ย่สู ำตลวั แปรตสูย่ ำงๆ ดงลั ตย่อู ไปนซีค
/*สามารถเขยขี นคาก อธรบายได้ทช นิ่ีขร ิีข่ร
* @param {number} oldVal Original Value
* @param {number} newVal New Value
* @return The percent change between new and old value.
* @customfunction*/
function percentChange(oldVal,newVal) {
return (newVal-oldVal)/oldVal;
}
4.1.ฌ.) โคดค้ แบบ Global declared
ถค้สำเรสำประกสำศตวลั แปรแบบ Globally declared และหรอง มกคี สำรเขียค นโค้ดค ไวค้แบบ Global declared จสำก
นัซนล เรสำเรคียกรัลนฟังฝ กชล งื่ลนั ใดๆ คสส ำถสำมกก็คอง โคดค้ แบบ Global declared ทสส ำงสำนเลยหรงอไมูย่ ?
ตวร อยส่ม ำง
var a = 15 ;
var b = 20 ;
var c = a + b ;
var d ;
Logger.log(a) ; // ดผูบ ลทขีริ่ Logs ------------ > [ 01 ] - 15.0
Logger.log(b) ; // ดผูบ ลทิรีข่ Logs ------------ > [ 02 ] - 20.0
Logger.log(c) ; // ดผบู ลท่ิรีข Logs ------------ > [ 03 ] - 35.0
Logger.log(d) ; // ดผูบ ลทรีข่ิ Logs ------------ > [ 04 ] - null
function testGlobDeclared(){
d = 10 ;
Logger.log(d) ; // ดผูบ ลทรีขิ่ Logs ------------ > [ 05 ] - 10.0
}
บททขีิร่ 4 : ฟังฟ กชต์ ลริ่นั 49
เมงื่อรนัล ฟงฝั กลชงลน่ืั testGlobDeclared() จะไดผค้ ลดงัล นีคซ
ผล - โคด้ค แบบ Global declared ทสส ำงสำนเลย แม้จค ะไมไ่ม ด้คอยใมู่ นฟัฟงกชพ์ รทีน่ ท่ทถี ูกม เรทยกใชค้งสำน และถงึถ แมค้จะ
ยส้ค ำยโคด้ค แบบ Global declared ไปไวค้ในไฟลล .gs ไฟลอล น่ืง ไมไยู่ ดอ้ค ยใ่ยู นไฟลลเดคยี วกนลั กลับฟงฝั กชล นงัลื่ ทืคถงี่ กย เรยคี กรนัล กก็จะให้ค
ผลแบบเดคียวกัลน
Logs
[ 01 ] 15.0
[ 02 ] 20.0
[ 03 ] 35.0
[ 04 ] null
[ 05 ] 10.0
4.1.ญ.) Global variable เกบ็ล คู่าย จากการรนตั ไวห้ค รรอไมู่ย ?
ตอยู่ จสำกข้อค กยอู่ นหนค้สำ เมืง่อรนลั ฟังฝ กชล ลนงื่ั testGlobDeclared() ไปแลคว้ d เก็บก คสู่ย ำ 10 ไว้ค มสำดตย ูอ่ย วย่สู ำ ถ้สค ำรนัล
ฟงฝั กชล งืลั่นอคกี ตวลั กกค็ อง afterTestGlobDeclared() ท่งอีคื ส้ค ำงอิงพ ตวลั แปร d จะไดคผ้ ลเป็ปนอยูส่ย ำงไร d จะเกบก็ ค่สยู ำ 10 ไว้คอยยู่
หรงอเปลสยู่ ำ
var a = 15 ;
var b = 20 ;
var c = a + b ;
var d ;
Logger.log(a) ; // ดผบู ลท่ิรขี Logs ------------ > [ 01 ] - 15.0
Logger.log(b) ; // ดผูบ ลทขริ่ี Logs ------------ > [ 02 ] - 20.0
Logger.log(c) ; // ดบผู ลทขีิ่ร Logs ------------ > [ 03 ] - 35.0
Logger.log(d) ; // ดบูผลทขีริ่ Logs ------------ > [ 04 ] - null
function testGlobDeclared(){
d = 10 ;
Logger.log(d) ;
}
function afterTestGlobDeclared(){
Logger.log(d) ; // ดบผู ลท่ิรีข Logs ------------ > [ 05 ] - null
}
ผล – เมอง่ื รันล afterTestGlobDeclared() จะไดค้ผลดงัล นีซค
[ 01 ] 15.0 // d ไม่คไดช้เกบ็ก ค่าค ทร่ริขี ันล จากฟงฟั ก์ชต ัลนอมิ่ืรนๆไวช้
[ 02 ] 20.0
[ 03 ] 35.0
[ 04 ] null
[ 05 ] null
หมสำยเหตถุ : ถคส้ ำตอค้ งกสำรเก็กบคยู่สำใดๆ ไวค้ยสำวๆ ให้เค กก็บไวใค้ นโปรเจก็ค โดยใชค้ Script Properties ซึถงงื่ สสำมสำรถ
กรอกเองกไก็ ด้ค (เมนูบ File → Project Properties → (แทกบ็ ) Script properties ) หรอง เขียค นโปรแกรมเพ่ือง เกก็บ
กไ็ก ด้ค โดยใชค้เซอรวล พิส PropertiesService ( IDE ใหมค่ของ Apps Script ตอ้ช งเขยขี นใชชเ้ ซอรตว์ รส PropertiesService
เทา่ค นัลนนี้ )
50 หลลักการเขียข นโปรแกรม Google Apps Script โดย วสนัล ตต์ คณุค ดรลกเศวต ([email protected])