|
|||||||||||
AppleScript มีการทำงานอย่างไร ![]() ด้วยกลุ่มของคำต่างๆ เราจะเรียกกลุ่มคำนี้ไม่ว่าจะสั้นหรือยาวก็ตาม ว่า สเตทเม้นท์ (Statement) เวลาที่เราทำการรันสคริป โปรแกรม Script Editor จะส่งสเตทเม้นท์เหล่านี้ไปยัง AppleScript Extension ซึ่งจะ InterPret สเตทเม้นท์ดังกล่าว จากนั้นก็จะส่งข้อความในรูป Apple Events ไปยังแอพพลิเคชั่นที่ระบุไว้ แอพพลิเคชั่นที่ได้รับข้อความ Apple Events ก็จะตอบสนองโดยการปฏิบัติตามคำสั่งต่างๆ ในสคริป เช่น การเปิดเอกสาร การใส่ข้อความในเอกสาร หรือการเรียกหาค่าต่างๆ เป็นต้น การสื่อสารระหว่าง AppleScript Extension กับ แอพพลิเคชั่น ปลายทางสามารถสื่อสารได้ทั้งในแบบทางเดียวและไปกลับสองทางได้ กล่าวคือ แอพพลิเคชั่นปลายทางที่ได้รับคำสั่งสามารถตอบกลับโดยการส่งข้อความ Apple Events กลับมายัง AppleScript Extension เพื่อการรายงานผลถึงผู้ใช้ได้ ซึ่งจะแสดงผลดังกล่าวในวินโดว์แสดงผลของโปรแกรม Script Editor คุณสามารถเรียกวินโดว์แสดงผลได้ด้วยคำสั่ง Show Result ครับ สำหรับรายละเอียดเกี่ยวกับ Apple Events นี้คุณยังไม่ ต้องไปสนใจครับ ว่ามันคืออะไร สิ่งที่เราจะกล่าวถึงในที่นี้ คือการเขียนสคริปสั่งงานเท่านั้นครับ โครงสร้างการเขียนโปรแกรมใน AppleScript ![]() ![]() ![]() ตัว AppleScript จะอ่านสเตทเม้นท์ไปตามลำดับเพื่อทำงานตามคำสั่งที่อยู่ในสเตทเมนท์นั้นๆ ใน AppleScript จะมีสเตทเม้นท์อยู่สองชนิด นั่นก็คือ สเตทเม้นท์แบบ Simple และ Compound ครับ สำหรับสเตทเม้นท์แบบ Simple จะอยู่ในรูปการเขียนเพียงหนึ่งบรรทัด เช่น
![]() จะมีรูปแบบโดยทั่วไปที่เหมือนกันสองอย่าง คือ มันสามารถมีสเตทเม้นท์อยู่เท่าไหร่ก็ได้โดยไม่จำกัด และจะมีคำว่า end ห้อยอยู่ในบรรทัดสุดท้ายครับ ซึ่งสเตทเม้นท์แบบ Simple ในบรรทัดข้างบน สามารถเขียนออกมาในรูปแบบ Compound ได้ดังนี้
![]() ชั้นหนึ่ง ซึ่งภายในสเตทเม้นท์ดังกล่าวนี้ จะมีกี่สเตทเมนท์ก็ได้ ดังเช่นตัวอย่างด้านล่างที่มีสองสเตทเม้นท์ครับ
![]()
![]()
![]() ![]() เจ้า Objects เหล่านี้จะตอบสนองต่อคำสั่งต่างๆ ที่คุณสั่งการครับ วัตถุที่เป็นของแอพพลิเคชั่นต่างๆ ไม่ว่าจะเป็น วินโดว์ ไฟล์ หรือวัตถุต่างๆ ในเอกสารอย่างเช่น คำที่อยู่ในย่อหน้าหรือวรรคใดๆ ของข้อความในเอกสารนั้น เป็นต้น วัตถุนี้เรียกว่า Application Objects ครับ นอกจากนั้น แล้วยังมีวัตถุอีกชนิดหนึ่ง ซึ่งเราเรียกว่า System Objects หมายถึงวัตถุต่างๆ ที่เป็นของ Mac OS ได้แก่ Desktop Printer, ยูสเซอร์หรือ กลุ่มยูสเซอร์จาก Users&Groups Control Panel หรือ ธีมต่างๆ จาก Appearance Control Panel เป็นต้น Objects ต่างๆ ที่กล่าว มาทั้งหมดนี้ จะมีข้อมูลกำกับอยู่ในตัวเองโดยเฉพาะ ซึ่งจะตอบสนองต่อคำสั่งที่มันเข้าใจเท่านั้น ตัวอย่างเช่น การที่วินโดว์เป็นวัตถุชนิดหนึ่งของ Finder จึงทำให้มันสามารถเข้าใจคำสั่ง close ได้ครับ ดังในตัวอย่าง ที่เราจะสั่งให้ Finder ไปปิดวัตถุ Front Window ครับ
![]() close เป้าหมายดังกล่าวเราเรียกว่า Default Target ครับ ถ้าคุณไม่ได้ระบุวัตถุหรือระบุแต่ไม่ครบถ้วนสมบูรณ์ ในกรณีนี้ จะทำให้สเตทเม้นท์ close ไม่มีข้อมูลเพียงพอที่จะรู้หรือแยกแยะได้ว่าเป็นวินโดว์ตัวใด ถ้าเป็นเช่นนี้ AppleScript ก็จะใช้ Default Target ซึ่งจะเป็นชื่อของ แอพพลิเคชั่นที่ถูกระบุในสเตทเม้นท์ tell (ในตัวอย่างคือ Finder) มาเป็นตัวกำหนดว่าวัตถุตัวใดจะรับคำสั่ง close ครับ ![]() หรือ Address ซึ่งสามารถทำให้เราสามารถระบุวัตถุเป้าหมายได้อย่างชัดเจน ดังเช่นในวลีต่อไปนี้ ซึ่งเป็น Reference รูปแบบหนึ่งครับ
![]() เช่นกัน) นั่นเองครับ และนี้ก็เป็นตัวอย่างอีกวิธีหนึ่งที่ซับซ้อนขึ้นมาอีกหน่อยของการเขียน Reference
![]() พึงระลึกไว้เสมอว่าวัตถุทุกชนิดจะมีคลาส (Class) ของตัวมันเอง โดยคลาสของวัตถุนี้ พูดง่ายๆ ก็คือ ชื่อของวัตถุต่างๆ ที่เป็นจำพวกเดียวกันหรือมี คุณลักษณะใกล้เคียงกันนั่นเองครับ ในคลาสของวัตถุก็จะมีกลุ่มคำสั่งไว้สำหรับใช้สั่งงานกับตัวคลาสของวัตถุเองและเอลลิเม้นท์ (Element) ต่างๆ ที่เป็นของคลาสนั้นๆ คำว่า Element ก็คือวัตถุเช่นเดียวกับคลาสครับ เพียงแต่ Element จะเป็นของคลาสอีกทีหนึ่ง ยกอย่างเช่น คลาส Folder ของแอพพลิเคชั่น Finder จะมี Element ต่างๆ ขึ้นอยู่กับมันมากมาย เช่น folder, file, item หรือ container เป็นต้น ![]() ![]() ประจำแอพพลิเคชั่นนั้นด้วยโปรแกรม Script Editor ครับ Dictionary ที่เราเปิดนี้ จะเป็นที่รวบรวมนิยามของชุดคำต่างๆ ที่แอพพลิเคชั่น นั้นสามารถเข้าใจได้ ทั้งนี้ AppleScript จะไม่เหมือนกับภาษา Scripting อื่นๆ ก็ตรงที่ มันจะไม่มีชุดคำแน่นอนในการเขียนครับ กล่าวคือ เมื่อคุณเขียน AppleScript จะมีชุดคำให้คุณใช้อยู่สองชุดครับ โดยจะมีทั้งชุดคำมาตรฐานที่แอพพลิเคชั่นทุกตัวเข้าใจ และ ชุดคำเฉพาะของแต่ ละแอพพลิเคชั่นที่ตัวมันเองสามารถเข้าใจได้เท่านั้น ที่เป็นเช่นนี้เพราะแอพพลิเคชั่นแต่ละตัวมีฟังค์ชั่นและความสามารถไม่เหมือนกัน ดังนั้นการมี ้ชุดคำประจำแอพพลิเคชั่นนั้นๆ ก็เพื่อความเหมาะสมและความเข้ากันได้กับคุณสมบัติของมันครับ
![]() งานวัตถุเหล่านั้น สำหรับวิธีการที่คุณจะดู Dictionary ของแอพพลิเคชั่นแต่ละตัวก็คือ ให้คุณลากไอคอนของแอพพลิเคชั่นที่คุณอยากทราบ ลงบน ไอคอนของ Script Editor หรือ อีกวิธีหนึ่งคือ การใช้คำสั่ง Open Dictionary ที่อยู่ในเมนู File ของโปรแกรม Script Editor ครับ ถ้าคุณจะใช้คำสั่งหรือวัตถุจาก Dictionary ของแอพพลิเคชั่นตัวใด คุณก็ต้องระบุชื่อของแอพพลิเคชั่นตัวนั้นในสเตทเม้นท์ tell ครับ ดังเช่นสคริป ตัวอย่าง ที่คุณต้องสั่งงานแอพพลิเคชั่น Finder ด้วยคำสั่ง clean up ซึ่งเป็นคำสั่งที่อยู่ใน Dictionary ของ Finder ครับ
![]() Interpret คำสั่ง clean up ในสคริปตัวอย่างด้านบนครับ แอพพลิเคชั่นที่เป็น Scriptable จะมี Dictionary Resource อยู่ในตัวเสมอ โดยใช้โค้ด 'aete' ใน Resource Fork ครับ และมันจะเป็นตัวนิยามถึง คำสั่ง วัตถุ หรือคำใดๆ ก็ตาม ที่ผู้เขียนสคริปสามารถใช้เพื่อควบคุมสั่งงาน แอพพลิเคชั่นตามที่ต้องการได้ ![]() ของตัว AppleScript เอง ชุดคำเหล่านี้จะไม่เหมือนกับชุดคำที่คุณพบใน Dictionary ครับ มันจะเป็นชุดคำที่คุณสามารถใช้ได้เสมอ และใช้ตรง ส่วนไหนของสคริปก็ได้ เช่นคำว่า If, Tell หรือ First เป็นต้น ทั้งชุดคำใน Dictionary และ ชุดคำมาตรฐาน จะเป็นคำสงวน (Reserved Words) ที่คุณไม่สามารถนำใช้ได้เมื่อคุณต้องบัญญัติคำขึ้นมาใหม่ในสคริปของคุณ เช่น การตั้งชื่อตัวแปร (Variable) เป็นต้น ![]() ในตอนต่อไปเราจะมาว่ากันถึงโครงสร้างการเขียนโปรแกรมใน Apple Script กันต่อ ในตอนหน้าเราจะกล่าวถึงเรื่อง : Values และ Constants - ค่าและค่าคงที่ Expressions - นิพจน์ Operations - การใช้ตัวโอเปอเรเตอร์ต่างๆ Variables - ตัวแปร และอื่นๆ อีกมากมายครับ |