اپل اسکریپت
اپل اسکریپت (به انگلیسی: AppleScript) یک زبان اسکریپت نویسی است که توسط شرکت اپل ساخته شدهاست و در مک اواس از زمان system 7 استفاده میشود. کلمهٔ " اپل اسکریپت " ممکن است به خود سیستم ویرایشگری یا یک متن منحصر به فرد نوشته شده با زبان اپل اسکریپت اشاره کند.
اپل اسکریپت عمدتاً یک زبان اسکریپتی توسعه داده شده توسط کمپانی اپل است برای انجام کارهای ارتباط بین پردازشی با استفاده از AppleEvents. اپل اسکریپت با AppleEvents مرتبط است اما متفاوت هستند. AppleEvents برای رد و بدل کردن اطلاعات و کنترل کردن بقیهٔ برنامهها به منظور خودکارسازی عملیات تکراری طراحی شدهاست. اپل اسکریپت یک سری محدودیتهای پردازشی خاص خود را علاوه بر فرستادن و دریافت AppleEventsها به برنامههای دیگر دارد. اپل اسکریپت محاسبات ابتدایی و پردازشهای متنی پیچیدهای را میتواند انجام دهد و اینها قابل گسترش هستند بهطوریکه میتوان کارکردهای ویرایشی متن را به خود زبان اضافه کرد. هرچند اساساً اپل اسکریپت به کارکرد برنامهها و پردازشها برای کنترل عملیات پیچیده متکی است. به عنوان یک زبانساختیافته، اپل اسکریپت قابل مقایسه با پوسته یونیکس - Windows Script Host و Rexx در کارکردشان است اما از همهٔ این سه مورد منحصر به فرد است. اساسیترین کارکرد آن این است که برنامههای مکینتاش، دیکشنریهایی را با اشیاء و عملیاتی آدرس دار عرضه دهند.
اپل اسکریپت یکسری المانهای برنامهنویسی شیءگرا، به خصوص در ساختمان اشیای متنی و گرایشهایی از برنامهنویسی زبان طبیعی در نحو را دارد اما بهطور مستقیم از هیچکدام از این دو دسته پیروی نمیکند.
تاریخچه
پروژهٔ اپل اسکریپت حاصلی از پروژهٔ تمام شدهٔ هایپرکارد است. هایپرکارد شامل یک زبان اسکریپتیِ مبتنی بر زبان انگلیسی به نام هایپرتاک بود که برای برنامهنویسی یک پشته هایپرکارد استفاده میشد. مهندسان کمپانی اپل متوجه شدند که یک زبان ویرایشگر مشابه به منظور استفاده در هر نوع برنامهای میتواند طراحی شود و بنابراین پروژهٔ اپل اسکریپت به عنوان بخشی از سیستم هفت متولد شد.
اپل اسکریپت در ماه اکتبر سال ۱۹۹۳ به عنوان بخشی از سیستم ۷٫۱٫۱ (اولین به روزرسانی اصلی سیستم ۷) به بازار عرضه شد. کوارک اکسپرس (ورژن ۳٫۲) یکی از اولین و اصلیترین نرمافزارهایی بود که اپل اسکریپت را پشتیبانی میکرد. این باعث شد که اپل اسکریپت بهطور گستردهای منتشر شود. این مهمترین عاملی بود در حفظ جایگاه مکینتش در پابلیشینگ، حتی بعداً کوارک اکسپرس و سایر برنامهها به ویندوزِ مایکروسافت رو کردند.
بعد از مقداری شک در مورد آیندهٔ اپل اسکریپت روی نسل بعدی سیستم عاملهای اپل، انتقال آن به اواس ده مک (حدود سال ۲۰۰۲) و رابط برنامهنویسی کوکوِ یِ آن، قابلیت استفاده و انعطاف اپل اسکریپت را به مقدار زیادی افزایش داد. برنامههای کوکو این اجازه را به برنامه نویسان میدهد که با تلاش کم، قابلیتهای اسکریپتی ابتدایی را برای برنامهشان، با زیاد کردن تعداد برنامههایی که مستقیماً متنی شدنی هستند، پیادهسازی کنند. بهطور همزمان، جابجایی به زیربنای یونیکس و توانایی اپل اسکریپت برای اجرای مستقیم دستورهای یونیکس، کنترل اپل اسکریپت را روی خود سیستم عامل افزود. AppleScript Studio روی Mac OS X 10.2 به عنوان قسمتی از Xcode عرضه شد و بعدها با عرضهٔ AppleScriptObjC framework روی Mac OS X 10.6 کاربران توانستند با استفاده از اپل اسکریپت برنامههای محلی «کوکو» را بنویسند.
اپل اسکریپت بخشی از تکنولوژی خودکارسازی Mac OS X به همراه Shell script و Automator (software) است.
مفاهیم اولیه
اپل اسکریپت به عنوان یک زبان اسکریپتی accessible end-user طراحی شد که به کاربر مکانیزمی هوشمند را برای کنترل برنامهها، دسترسی و تغییر دادهها ارائه میدهد. اپل اسکریپت از Apple Eventها استفاده میکند که یک سری مدل دادههای استاندارد شده هستند که سیستم عامل مکینتاش برای فرستادن اطلاعات به برنامهها استفاده میکند. Apple Eventها میگذارند تا یک متن بتواند با چند برنامه همزمان کار کند و دادهها بین آنها رفتوآمد کنند تا عملیات پیچیده بدون دخالت انسان انجام شوند. برای مثال، یک اپل اسکریپت برای ساختن یک گالریِ وبِ ساده باید کارهای زیر را انجام دهد:
- بازکردن یک عکس در یک برنامهٔ ویرایش عکس (با فرستادن یک Open File Apple Event به آن برنامه)
- دستور دادن به برنامهٔ ویرایش عکس برای ویرایش عکس (مثلاً کم کردن وضوح یا اضافه کردن لبه یا اضافه کردن یک امتیاز به عکس)
- دستور دادن به برنامهٔ ویرایش عکس برای ذخیره عکس تغییر داده شده در یک فایل داخل یک پوشه (با فرستادن Save و/یا Close Apple Event به آن برنامه)
- فرستادن آدرس یک فایل جدید (با یکApple Event دیگر) به یک برنامه ویرایشگر متن یا ویرایشگر وب
- دستور به آن برنامهٔ ویرایشگر برای نوشتن یک لینک برای عکس داخل یک فایل HTML.
- تکرار دستورهای فوق برای تمامی عکسهای داخل یک پوشه (صدها یا هزاران عکس).
- بارگذاری فایل HTML و پوشهٔ عکسهای اصلاح شده روی یک وبسایت با فرستادن Apple Eventها به یک FTP client , با استفاده از دستورهای خود اپل اسکریپت یا با فرستادن Apple Eventها به یک Unix ftp utility.
برای کاربر، صدها یا هزاران قدم در چندین برنامه به تنها عمل اجرا کردن یک متن کاهش یافتهاست و عملیات در زمان بسیار کمتری بدون هیچگونه خطای انسانی صورت میگیرد. یک متن بزرگ و پیچیده فقط یکبار اجرا میشود درحالیکه متنهای دیگر بارها استفاده میشوند.
بخشهای اپل اسکریپتِ یک برنامه داخل لغتنامهٔ اسکریپتی آن برنامه قابل رویتهستند که داخل هرگونه ویرایشگر متنی قابل دیدناند. این بخشها بهطور کلی در گروههایی بنا به نزدیکی کارکردشان قرار دارند. دو نوع پایهای بخشها وجود دارند: «کلاسها» و «دستورها». کلاسها، اشیایی قابل متن شدن هیتند. برای مثال، یک برنامهٔ ویرایش متن یکسری کلاسهایی برای پنجرهها، سندها و متنها دارد و این کلاسها یک سری ویژگیها دارند(property) که قابل تغییرند (سایز پنجره، پس زمینهٔ سند، سایز خطوط متن و ...) یا ممکن است کلاسهایی دیگر را هم شامل شوند (یک پنجره یک یا چند سند دارد، یک سند متن دارد، یک شی متن پاراگرافها و کلمات و کاراکترهایی دارد). بهطور متضاد، «دستورها»، دستورهایی هستند که میتواند به اشیای متن شدنی داده شوند. فرم کلی یک بلوک اپل اسکریپت اینگونه است که به یک شی متن شدنی گفته میشود که یک دستور را اجرا کند.
همهٔ برنامههای متن شدنی در یک سری دستورهای ابتدایی و اشیاء مشترکند(standard suite). دستورهایی برای بازکردن، بستن یا ذخیره یک فایل، برای چاپ کردن چیزی، برای خروج، برای اختصاص دادهها به متغیرها. مانند یک شی برنامهٔ ابتدایی که خصوصیات متن شدنی یک برنامه را میدهد. بسیاری از برنامهها تعدادی زیادی از توابعی با کارکردهای تقریباً مشابه را دارند که با اجرای هر عملی که خود برنامه میتواند انجام دهد همخوانی دارند. در موارد استثنایی، برنامهها ممکن است یک سری plugin که داخل لغتنامهٔ اسکریپتی خودشان است را پشتیبانی کنند.
اپل اسکریپت با توانایی در ساخت یک متن به وسیله درک مستقیم و ضبط حرکات کاربر، طراحی شد. هنگمی که ویرایشگر اپل اسکریپت باز است و دکمهٔ رکورد زده شدهاست، هر عملِ کاربر روی کامپیوتر در هر برنامهای که AppleEvents و ضبط اپل اسکریپت را پشتیبانی میکند، به دستورهای مربوطه آنها داخل اپل اسکریپت تبدیل شده و روی پنجرهٔ ویرایش متن قرار میگیرد. متن نهایی میتواند ذخیره یا دوباره اجرا شود تا اعمال اصلی تکرار شوند یا تغییر داده شوند تا بهطور کلی قابل استفاده باشند.
توضیحات (comments)
کامنتها میوانند از چندین راه درج شوند. اگر میخواهید یک کامنت کوچک یک خطه درج کنید، دو عدد (-) یا یک (#) بگذارید. مثل:
--This is a one line comment
# So is this!
اگر میخواهید کامنتی بگذارید که بیش از یک خط را میگیرد، به اینگونه با پرانتز و * عمل کنید:
(* This is a
multiple
line
comment *)
Hello, world!
در اپل اسکریپت، برنامهٔ "hello,world!" سنتی ما به صورتهای زیادی قابل نوشتن است:
display dialog "Hello, world!" -- a modal window with “OK” and “Cancel” buttons
-- or
display alert "Hello, world!" -- a modal window with a single “OK” button and an icon representing the app displaying the alert
-- or
say "Hello, world!" -- an audio message using a synthesized computer voice
اپل اسکریپت چندین گزینه برای واسط کاربر(user interface) شامل دیالوگها، زنگهای هشدار و لیستی از انتخابات دارد. (کاراکتر ¬ , با نگه داشتن کلید option و کلید return در ویرایشگر متن، نشانگر ادامه دار بودن یک عبارت داخل چند خط است)
-- Dialog
set dialogReply to display dialog "Dialog Text" ¬
default answer "Text Answer" ¬
hidden answer false ¬
buttons {"Skip", "Okay", "Cancel"} ¬
default button "Okay" ¬
cancel button "Skip" ¬
with title "Dialog Window Title" ¬
with icon note ¬
giving up after 15
-- Choose from list
set chosenListItem to choose from list {"A", "B", "3"} ¬
with title "List Title" ¬
with prompt "Prompt Text" ¬
default items "B" ¬
OK button name "Looks Good!" ¬
cancel button name "Nope, try again" ¬
multiple selections allowed false ¬
with empty selection allowed
-- Alert
set resultAlertReply to display alert "Alert Text" ¬
as warning ¬
buttons {"Skip", "Okay", "Cancel"} ¬
default button 2 ¬
cancel button 1 ¬
giving up after 2
هر متد تعاملی با کاربر میتواند مقادیری را چون فشردن دکمه، انتخاب یک مورد یا وارد کرون متن برای فرایندهای آینده را برگرداند. مثلاً:
display alert "Hello, world!" buttons {"Rudely decline", "Happily accept"}
set theAnswer to button returned of the result
if theAnswer is "Happily accept" then
beep 5
else
say "Piffle!"
end if
تشابه به زبان طبیعی
از آنجاییکه AppleEventها راهی برای فرستادن پیام به برنامهها هستند، اپل اسکریپت یک زبان به خصوص برای فرستادن AppleEventها است. برای پیروی از سنت سیستم عامل مک در راحتی استفاده، زبان اپل اسکریپت بر اساس زبان طبیعی طراحی شدهاست. همانطور که واسط کاربر گرافیکی آن هم با desktop تشابه دارد. یک برنامهٔ خوب نوشته شدهٔ اپل اسکریپت باید به اندازهٔ کافی تمیز و خوانا و قابل درک برای عموم باشد و به راحتی قابل ویرایش باشد. عمدتاً این زبان بر پایهٔ زبان هایپرتاکِ هایپرکارد است که گسترش یافتهٔ آن نه تنها به دنیای کارتها و پشتههای هایپرکارد، بلکه به صورت نظری به هر سندی اشاره دارد. برای همین، تیم اپل اسکریپت AppleEvent Object Model که اشیایی را که هر برنامهای «میشناسدشان» را معرفی کردند.
قلب زبان اپل اسکریپت استفادهٔ کلماتیست که چون اسامی و تفعال عمل میکنند و قابل ترکیب هستند. مثلاً به جای اینکه از فعلی دیگر برای عمل چاپ کردن یک صفعه یا یک سند یا چندین صفحه (printPage, printDocument, printRange) اپل اسکریپت تنها "print" را استفاده میکند که میتواند با object مانند یا صفحه، یک سند یا چندین صفحه ترکیب شود.
print page 1
print document 2
print pages 1 thru 5 of document 2
بهطور کلی AEOM تعریف یک سری شی است مانند "Document " یا " پاراگراف" یا عملیاتی چون "cut" و "close". این سیستم همچنین روشهایی برای اشاره به خصوصیات (Peoperty)های یک شی را دارد پس کاربر میتواند به "سومین پاراگراف سندی به نام روز خوب" یا " رنگ آخرین کلمهٔ جلوی پنجره" دسترسی داشته باشد.AEOM لغتنامهٔ یک برنامه برای پیوستن Apple Events به کلماتی خوانا برای انسان که اجازهٔ ترجمه از هر دو سو بین اپل ایوِنتهای bytecode و یک اپل اسکریپت خوانا برای انسان میدهد را، استفاده میکند. برای شناخت بخشهایی از برنامه که متن شدنی اند باید لغتنامههایی که آن برنامهها پشتیبانی میکنند، ملاحظه شوند. (در Xcode و برنامههای Script Editor داخل File → Open Dictionary بروید) برای تعیین کردن اینکه چه برنامهای برای مقصد چنین پیامی مناسب است، اپل اسکریپت از ساختمان "tell" استفاده میکند:
tell application "Microsoft Word"
quit
end tell
به نوبت tell میتواند در یک خط با infinitive نشان داده شود:
tell application "Microsoft Word" to quit
برای اتفاقهای داخل"Core Suite" , مثل (activate, open, reopen, close, print, and quit) , برنامه ممکن است چون اشیای مستقیم با دستورهای انتقالی مواجه شود:
quit application "Microsoft Word"
مفهوم شئ سلسله مراتبی میهواند داخل بلوکهای تو در تو مطرح شود:
tell application "QuarkXPress"
tell document 1
tell page 2
tell text box 1
set word 5 to "Apple"
end tell
end tell
end tell
end tell
اشیائ سلسله مراتبی را اینطور هم میتوان نشان داد به وسیلهٔ عبارات prepositional:
pixel 7 of row 3 of TIFF image "my bitmap"
که در یک زبان برنامهنویسی دیگر ممکن است به صورت صدا زدن پشت هم متدها مانند سودوکد زیر باشد:
getTIFF("my bitmap").getRow(3).getPixel(7);
اپل اسکریپت شامل نحوی برای شمارش ترتیبی مثل "اولین پاراگراف" و همینطور نحوی برای شمارش کاردینال چون " پاراگراف یک" است. همینطور اعداد هم میتوانند متن یا رقم به حساب بیایند ."five " , "fifth" و "۵" همگی پشتیبانی میشوند و معادل دارند. همینطور کلمهٔ "the " میتواند هرجای متن برای بهبود خوانایی استفاده شود و هیچ اثری بر عملکرد ندارد.
نمونههایی از متنها
یک نمونه ماشین حساب ایمن در برابر خطا:
tell application "Finder"
-- Set variables
set the1 to text returned of (display dialog "1st" default answer "Number here" buttons {"Continue"} default button 1)
set the2 to text returned of (display dialog "2nd" default answer "Number here" buttons {"Continue"} default button 1)
try
set the1 to the1 as integer
set the2 to the2 as integer
on error
display dialog "You may only input numbers into a calculator." with title "ERROR" buttons {"OK"} default button 1
return
end try
-- Add?
if the button returned of (display dialog "Add?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 + the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
-- Subtract?
else if the button returned of (display dialog "Subtract?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 - the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
-- Multiply?
else if the button returned of (display dialog "Multiply?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 * the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
-- Divide?
else if the button returned of (display dialog "Divide?" buttons {"No", "Yes"} default button 2) is "Yes" then
set ans to (the1 / the2)
display dialog ans with title "Answer" buttons {"OK"} default button 1
say ans
else
delay 1
say "You haven't selected a function. The operation has cancelled."
end if
end tell
یک دیالوگ باکس سادهٔ نام کاربری و رمز عبور. اینجا نام کاربری john و رمز عبور app123 است:
tell application "Finder"
set passAns to "app123"
set userAns to "John"
if the text returned of (display dialog "Username" default answer "") is userAns then
display dialog "Correct" buttons {"Continue"} default button 1
if the text returned of (display dialog "Username : John" & return & "Password" default answer "" buttons {"Continue"} default button 1) is passAns then
display dialog "Access granted" buttons {"OK"} default button 1
else
display dialog "Incorrect password" buttons {"OK"} default button 1
end if
else
display dialog "Incorrect username" buttons {"OK"} default button 1
end if
end tell
ابزار توسعه
Script editors
Script editorsها یک محیط برنامهنویسی یکپارچه را برای اپی اسکریپتها فراهم میکنند و شامل ابزاری برای نوشتن، چک کردن صحّت، کامپایل، اجرا و debug اسکریپتها دارند. آنها همینطور مکانیسمی برای بازکردن و دیدن لغتنامههای اپل اسکریپت از برنامههای اسکریپت شدنی و ذخیرهٔ اسکریپتها در تعدادی فرمت (compiled script files, application packages, script bundles, and plain text files) دارندو معمولاً قابلیتهایی چون syntax highlighting و تکه کدهای از قبل ننوشته شده را دارند.
AppleScript Editor(ویرایشگر اسکریپت در سیستم عامل x مک قبل از ۱۰٫۶ و yosemite)
Xcode, از شرکت اپل
Smile و smileLab , موجود از طریق (Satimage)
[Script Debugger Script Debugger] از کمپانی [ Late Night Software Late Night Software]
FacePan , از شرکت Late Night Software
Script launchers
اپل اسکریپتها میتوانند از درون یک ویرایشگر اسکریپت اجرا شوند ولی معمولاً اجرا کردن آنها بهطور مستقیم، بدون بازکردن یک ویرایشگر اسکریپت مناسبتر است. تعدادی از انتخابها برای این گونه عمل کردن:
Script Menu
بسیاری از برنامههای اپل، برخی برنامههای third-party و برخی add-oneها منوی اسکریپت خاص خود را فراهم میکنند. اینها از چندین راه قابل فعال شدن اند اما تمتمی توابع اولیهٔ آنها از یک جنس است.
Hotkey Launchers
Folder Actions (عملیات پوشه)
Unix command line and launchd
مسائل مرتبط با اسکریپتها
[Automator Automator]
هستهٔ سیستم برنامههای اسکریپت شدنی
AppleScriptObjC
AppleScript Studio
اضافه بر اسکریپت کردن (OSAX)
نکات اساسی زبان
کلاسها (نوع دادهها)
اپل اسکریپت تعدادی کلاس تعریف شده (یا همان data type)در خودش دارد؛ و قطعاً یک برنامه هم میتواند که انواع دادهٔ نیازش را اضافه کند. data classهای ابتدایی بهطور همگانی اینطور هستند:
- فایل سیستمها
- alias (نام مستعار) - یک مراجعه به شئ سیستم فایل (فایل یا پوشه). نام مستعار ارتباطش را با شئ حتی اگر آن شئ حذف یا تغییر اسم داده شود، حفظ خواهد کرد.
- file - مراجعهای به شئ فایل سیستم (پوشه یا فایل). این یک مراجعهٔ ایستا است و میتواند به یک شئ که در حال، وجود ندارد هم اشاره کند.
- POSIX file- یک مراجعه به شئ فایل سیستم (فایل یا پوشه) داخل یک متن خالی با استفاده از نماد گذاریهای unix.
- اشیائ ابتدایی
- application - یک شئ برنامه که بیشتر برای عبارات دستوری استفادا میشود. (tell application "Finder" ...)
- script - یک شئ اسکریپت. اشیائ اسکریپت نگهدارندهٔ اسکریپتها هستند. هر اپل اسکریپت یک شئ اسکریپت را هنگام اجرا میسازد. اشیائ اسکریپت میتوانند به کمک اپل اسکریپتها ساخته شوند.
- class - یک شبه شئ که نوع بقیهٔ اشیاء را معین میکند.
- reference- یک اشاره گر پایا و غیرمستقیم به یک شئ. اشاره گر به متغیر x همواره مقداری حال حاضر آن را برمیگرداند.
- Standard data objects
- boolean - مقدار درست/غلط
- constant - خود زبان یک سری عدد ثابت مثل عدد پی را دارد اما میتوان ثابتهای دلخواه تعریف کرد.
- number- یک کلاس که برای Int و real به صورت خیلی کم استفاده میشود و غیر علنی وقتی که عدد صحیح یا حقیقی را به متغیری نسبت میدهید صدا میشود.
- اعداد صحیح
- اعداد حقیقی
- date - یک تاریخ در فرمت اپل اسکریپت.
- text- از ورژن ۱۰٫۵ به بعد همان معنای کلاسهای string و Unicode text را میدهد.
- اشیائ container
- list - لیستی مرتب شده از اشیاء. هر کلاسی که در برنامهها یا لیستهای دیگر تعریف شده اسن را شامل میشود.
- record
- متفرقه
- RGB color - برای کار با کلاسها و اشیایی که با رنگها سر و کار دارند.
- unit types
ساختارهای زبان
بسیاری از فرایندهای اپل اسکریپت داخل بلوکهای کد مدیریت میشوند. یک بلوک با دستور command آغاز و با end command تمام میشود. مهمترین ساختارها در پایین تعریف شدهاند: شرطیها
اپل اسکریپتها دو نوع عبارات شرطی دارند.
-- Simple conditional
if x <1000 then set x to x + 1
-- Compound conditional
if x is greater than 3 then
-- commands
else
-- other commands
end if
حلقهها حلقهٔ تکرار در اپل اسکریپت چندین روش دارد. همگی شان بلوک بینrepeat و end repeat را چند بار تکرار میکنند. حلقهها میتوانند به صورت نابهنگام با دستور exit repeat متوقف شوند.
تکرار تا ابد.
repeat
-- commands to be repeated
end repeat
تکرار به اندازهٔ تعداد دفعات داده شده.
repeat 10 times
-- commands to be repeated
end repeat
حلقههای شرطی. بلوک داخل حلقه ی repeat whileتا وقتی که شرط برقرار است اجرا میشود. بعد از هر اجرای بلوک، شرط چک میشود. حلقهٔ repeat until , برعکس، یگانه است. اما بلوک تا وقتی که شرط غلط است انجام میشود.
set x to 5
repeat while x> 0
set x to x - 1
end repeat
set x to 5
repeat until x ≤ 0
set x to x - 1
end repeat
حلقه با یک متغیر. هنگام شروع حلقه، متغیر به مقدار شروع نسبت داده میشود. بعد از هربار اجرای بلوک، یک متغیر اختیاری به متغیر، اضافه میشود که بهطور پیشفرض ۱ است.
-- repeat the block 2000 times, i gets all values from 1 to 2000
repeat with i from 1 to 2000
-- commands to be repeated
end repeat
-- repeat the block 4 times, i gets values 100, 75, 50 and 25
repeat with i from 100 to 25 by -25
-- commands to be repeated
end repeat
شمردن یک لیست. در هربار اجرای متغیرِ حلقه به یک نمونهٔ جدید داخل لیست داده میشود
set total to 0
repeat with x in {1, 2, 3, 4, 5}
set total to total + x
end repeat
یک تغییر مهم در این ساختار بلوکی، در فرم بلوکهای on - end ... است که برای تعریف handlerها (توابعی چون subrutineها) استفاده میشود. handlerهایی که با on functionName() شروع و با end functionName تمام میشوند، قسمتی از جریان معموا اسکریپت ما نیستند مگر اینکه از جایی داخل اسکریپت صدا زده شوند.
Function handler | Folder actions block | Run handler |
---|---|---|
on myFunction(parameters...)
-- subroutine commands
end myFunction
| on adding folder items to thisFolder after receiving theseItems
-- commands to apply to the folder or items
end adding folder items to
| on run
-- commands
end run
|
handlerها همچنین میتوانند با "to" به جای on تعریف شوند و میتوانند برای قبول پارامترهای برچسبگذاری شده، نه داخل پرانتزها، استفاده شوند.
Handler with Labeled Parameters | Handler Using "to" and Labeled Parameters |
---|---|
on rock around the clock
display dialog (clock as string)
end rock
-- called with:
rock around the current date
| to check for yourNumber from bottom thru top
if bottom ≤ yourNumber and yourNumber ≤ top then
display dialog "Congratulations! You scored."
end if
end check
--called with:
check for 8 from 7 thru 10
|
چهار نوع handler از پیش تعریف شده داخل اپل اسکریپت داریم: run, open, idle, quit. که هرکدام از آنها مانند روش ساخت run handler در بالا ساخته میشوند.
Run handler
on open theItems
repeat with thisItem in theItems
tell application "Finder" to update thisItem
end repeat
end open
وقتی که یک اسکریپت شامل open handler به منظور یک applet ذخیره میشود، applet به یک droplet تبدیل میشود.droplet میتواند داخل finder با شکل آیکون اش که فلشی است که نشان دهندهٔ این است که چندین مورو میتوانند داخل یک آیکون بیفتند، شناخته شود. open handler برای droplet وقتب اجرا میشود که فایلها و پوشهها داخل آیکون droplet بیفتند. اشاره گرها به موارد افتاده شده در آیکونِ droplet به عنوان پارامتر open handler به اسکریپت droplet پاس داده میشوند. یک droplet میتواند مثل روش یک applet معمولی که run handler اش اجرا میشود، آغاز شود. Idle handler
on idle
--code to execute when the script's execution has completed
return 60 -- number of seconds to pause before executing idle handler again
end idle
یک idle handler میتواند در dropletها یا appletها به صورت appletهای stay-open (باز -مان) ذخیره شود و برای اسکریپتهایی که منتظر یک داده یا اتفاق هستند، مفید است. طول زمان درجا بودن برنامه، به صورت پیشفرض ۳۰ ثانیه است اما میتواند با برگرداندن مقداری دیگر در انتهای زیرروال، تغییر کند. Quit handler
on quit
--commands to execute before the script quits
continue quit -- required for the script to actually quit
end quit
اشیائ اسکریپت
اشیای اسکریپت میتوانند با نحو زیر به صورت علنی تعریف شوند:
script scriptName
-- commands and handlers specific to the script
end script
اشیای اسکریپت میتوانند همان دستورهای tell را مانند اشیای برنامه استفاده کنند و میتوانند از داخل فایلها بارگذاری با به درون آنها ذخیره شوند. طول زمان اجرا در بعضی موارد با استفاده از اشیای اکریپت کاهش پیدا میکند.
اطلاعات متفرقه
- متغیرها مستقیماً نوع داده نمیشوند و نیازی به declare شدن ندارند. متغیرها هر نوع دادهای را میتوانند بگیرند (حتی توابع و اسکریپتها). دستورهای زیر نمونههایی از ساختن متغیرها هستند:
set variable1 to 1 -- create an integer variable called variable1 set variable2 to "Hello" -- create a text variable called variable2 copy {17, "doubleday"} to variable3 -- create a list variable called variable3 set {variable4, variable5} to variable3 -- copy the list items of variable3 into separate variables variable4 and variable5 set variable6 to script myScript -- set a variable to an instance of a script
- اشیای اسکریپت تماماً شئ هستند. آنها میتوانند متدهای کلاسهایشان را پیاده کنند و داده و توابع را از یک پدر به ارث ببرند.
- زیرروالها مستقیماً از بلوکهای tell برنامه نمیتوانند صدا زده شوند. برای اینکار باید 'my' و 'of me' را به کار ببرید.با استفاده از همین تکنیک برای دستورهای اضافی اسکریپت کردن میتواند خطاها را کم و کارایی را بهتر کند.
tell application "Finder" set x to my myHandler() -- or set x to myHandler() of me end tell on myHandler() --commands end myHandler
tell application "Finder" set anyNumber to my (random number from 5 to 50) end tell
معماریOpen Scripting
یک جنبهٔ مهم پیادهسازی اپل اسکریپت Open Scripting Architecture (OSA) است. اپل OSA را برای محصولات third-party یِ اسکریپتی/اتوماسیونی مانند QuicKeys و UserLand , برای کارکرد در شرایط یکسان با اپل اسکریپت، فراهم کردهاست. اپل اسکریپت به عنوان یک بخش اسکریپتی پیادهسازی شد و خصوصیات پایهٔ آن برای وساطت با چنین بخشی، برای OSA عمومی بود و به بقیهٔ توسعه دهندگان اجازه میداد تا بخشهای اسکریپتی خود را به سیستم اضافه کنند. APIهای عمومی برای لود کردن، ذخیره و کامپایل متون برای همهٔ چنین بخشهایی یکسان کار میکرد که یعنی appletها و dropletها میتوانستند برای هر زبان اسکریپتی برقرار باشند.
با سیستم عامل ما اوای ایکس، بخش JavaScript OSA , تنها زبان جدی OSA برای کار با اپل اسکریپت است در حالی که ورژن پرلِ مکینتاش، پایتون (زبان برنامهنویسی) , روبی (زبان برنامهنویسی) و تیسیال
یکی از جالبترین ویژگیهای OSA قابلیت "scripting additions" یا OSAX for Open Scripting Architecture eXtension که بر پایهٔ دستورهای خارجی هایپرکارد است، است. Scripting Additionها کتابخانههایی هستند که به برنامهنویس اجازهٔ گسترده کردن توایع اپل اسکریپت را میدهند. دستورهایی اینچنین مستقل از برنامهاند و گسترده روی سیستم هستند. او ای ایکس مک یک سری از این additionها را به نام Standard Additions دارد که کارکرد اپل اسکریپت را با تعدادی دستور جدید چون دیالوگهای تعاملی با کاربر، خواندن و نوشتن فایلها، دستورهای فایل سیستمها، توابع تاریخ، متن و اعمال ریاضی، گسترده میسازند.
منابع
جستارهای وابسته
- Mark Conway Munro, "AppleScript (Developer Reference)", Wiley (2010); ISBN 978-0-470-56229-1
- Hanaan Rosenthal & Hamish Sanderson, Learn AppleScript: The Comprehensive Guide to Scripting and Automation on Mac OS X, Third Edition, Apress (2010); ISBN 978-1-4302-2361-0
- Sal Soghoian & Bill Cheeseman, Apple Training Series: AppleScript 1-2-3, Peachpit Press (2009); ISBN 0-321-14931-9
- Jerry Lee Ford Jr. , AppleScript Programming for the Absolute Beginner, Course Technology (2007); ISBN 978-1-59863-384-9
- Matt Neuburg, AppleScript: The Definitive Guide, O'Reilly Media (2006); ISBN 0-596-10211-9
- Adam Goldstein, AppleScript: The Missing Manual, O'Reilly Media (2005); ISBN 0-596-00850-3
- Tom Trinko, AppleScript for Dummies, For Dummies (2004); ISBN 978-0-7645-7494-8
- William Cook, AppleScript. Proceedings of the third ACM SIGPLAN conference on History of programming languages (HOPL III) Pages 1–21 ACM, 2007.
پیوند به بیرون
- AppleScript Language Guide html pdf
- Official page for Application Developers at Apple.com
- AppleScript at DMOZ
- MacScripter: AppleScripting community
- Mac OS X Automation
- Doug's AppleScripts for iTunes: AppleScripts for iTunes with source provided