คำตอบที่ได้รับเลือกจากเจ้าของกระทู้
ความคิดเห็นที่ 1
เป็นหลักทั่ว ๆ ไปของการเขียนโปรแกรมครับ เวลาเราเรียกใช้ Method เราจะต้องรู้ด้วยว่า Method นี้ return อะไรให้เรา
ตามตัวอย่างที่คุณให้มา
แต่เนื่องจากเราสนใจแต่ Range จะพิมพ์ทำไมให้ยาวและมีตัวแปรที่ใช้สำหรับเรียกใช้ method เฉย ๆ ตั้งหลายตัว ย่อให้สั้นดีกว่า จะได้เป็น
ง่าย ๆ คือ เราเรียก method จาก object ที่ return จาก method ก่อนหน้านี้นั่นแหละครับ
ตามตัวอย่างที่คุณให้มา
// SpreadsheetApp.getActiveSpreadSheet() จะ return Object สร้างจาก class Spreadsheet ดังนั้น type ของเขาคือ Spreadsheet
// mySpreadSheet มี Type เป็น Spreadsheet
var mySpreadSheet = SpreadsheetApp.getActiveSpreadSheet();
// Spreadsheet.getActiveSheet() return Object type Sheet
// myActiveSheet มี Type เป็น Sheet
var myActiveSheet = mySpreadSheet.getActiveSheet();
// Sheet.getRange return Range
// myRange คือ type Range
var myRange = myActiveSheet.getRange("A1");
// mySpreadSheet มี Type เป็น Spreadsheet
var mySpreadSheet = SpreadsheetApp.getActiveSpreadSheet();
// Spreadsheet.getActiveSheet() return Object type Sheet
// myActiveSheet มี Type เป็น Sheet
var myActiveSheet = mySpreadSheet.getActiveSheet();
// Sheet.getRange return Range
// myRange คือ type Range
var myRange = myActiveSheet.getRange("A1");
แต่เนื่องจากเราสนใจแต่ Range จะพิมพ์ทำไมให้ยาวและมีตัวแปรที่ใช้สำหรับเรียกใช้ method เฉย ๆ ตั้งหลายตัว ย่อให้สั้นดีกว่า จะได้เป็น
var myRange = SpreadsheetApp.getActiveSpreadSheet().getActiveSheet().getRange("A1");
ง่าย ๆ คือ เราเรียก method จาก object ที่ return จาก method ก่อนหน้านี้นั่นแหละครับ
แสดงความคิดเห็น
กำลังเขียน Google Apps Script สงสัยเรื่องการเรียกใช้ method ซ้อน method
SpreadsheetApp.getActiveSpreadSheet().getActiveSheet().getRange("A1");
SpreadsheetApp เป็นคลาสครับ สามารถเรียกใช้ static method ชื่อ getActiveSpreadSheet() ได้โดยตรง แต่ประเด็นคือ ผมงงว่า ทำไมมันสามารถเรียกเมธอด getActiveSheet() ซ้อนกันเป็นชั้นๆแบบนั้นได้อีก แถมยังเรียก getRange() ด้วย คือมันขัดกับที่รู้ว่ามา มี object ของ class และ class เท่านั้นที่เรียก method ใช้ได้ในรูปแบบนี้ หรือว่ามันเขียนแบบนี้ได้???
class A >> obj ของคลาส A ชื่อ objA
objA.functionInClassA()
หรือไม่ก็เรียกผ่านคลาส A.functionInClassA()
เพราะถ้า class A มีสองเมธอด คือmethod1 and method2
ผมก็เรียกแบบนี้ได้อ่ะดิ?? >>> A.method2.method1 ???? ซึ่งมันไม่ใช่แล้ววว!!!
ขอบคุณสำหรับคำอธิบายครับ
class reference ของ GAS ครับ >> Reference Class manual