اپل اسکریپت

**اپل اسکریپت**  یک** [[زبان اسکریپت نویسی]] **است که توسط شرکت اپل ساخته شده‌است و در مک اواس از زمان 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)
کامنت‌ها میوانند از چندین راه درج شوند. اگر می‌خواهید یک کامنت کوچک یک خطه درج کنید، دو عدد (-) یا یک (#) بگذارید. مثل:
```applescript
--This is a one line comment
# So is this!
```
اگر می‌خواهید کامنتی بگذارید که بیش از یک خط را می‌گیرد، به این‌گونه با پرانتز و * عمل کنید:
```applescript
(* This is a
multiple
line
comment *)
```


## Hello, world!
در اپل اسکریپت، برنامهٔ "hello,world!" سنتی ما به صورت‌های زیادی قابل نوشتن است:
```applescript
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 در ویرایشگر متن، نشانگر ادامه دار بودن یک عبارت داخل چند خط است)
```applescript
-- 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
```

```applescript
-- 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
```

```applescript
-- Alert
set resultAlertReply to display alert "Alert Text" ¬
 as warning ¬
 buttons {"Skip", "Okay", "Cancel"} ¬
 default button 2 ¬
 cancel button 1 ¬
 giving up after 2
```
هر متد تعاملی با کاربر می‌تواند مقادیری را چون فشردن دکمه، انتخاب یک مورد یا وارد کرون متن برای فرایندهای آینده را برگرداند. مثلاً:
```applescript
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 مانند یا صفحه، یک سند یا چندین صفحه ترکیب شود.
```applescript
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" استفاده می‌کند:
```applescript
tell application "Microsoft Word"
  quit
end tell
```
به نوبت tell می‌تواند در یک خط با infinitive نشان داده شود:
```applescript
tell application "Microsoft Word" to quit
```
برای اتفاقهای داخل"Core Suite" , مثل (activate, open, reopen, close, print, and quit) , برنامه ممکن است چون اشیای مستقیم با دستورهای انتقالی مواجه شود:
```applescript
quit application "Microsoft Word"
```
مفهوم شئ سلسله مراتبی میهواند داخل بلوک‌های تو در تو مطرح شود:

```applescript
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:
```applescript
pixel 7 of row 3 of TIFF image "my bitmap"
```
که در یک زبان برنامه‌نویسی دیگر ممکن است به صورت صدا زدن پشت هم متدها مانند سودوکد زیر باشد:
```javascript
getTIFF("my bitmap").getRow(3).getPixel(7);
```
اپل اسکریپت شامل نحوی برای شمارش ترتیبی مثل "اولین پاراگراف" و همین‌طور نحوی برای شمارش کاردینال چون " پاراگراف یک" است. همین‌طور اعداد هم می‌توانند متن یا رقم به حساب بیایند ."five " , "fifth" و "۵" همگی پشتیبانی می‌شوند و معادل دارند. همین‌طور کلمهٔ "the " می‌تواند هرجای متن برای بهبود خوانایی استفاده شود و هیچ اثری بر عملکرد ندارد.

## نمونه‌هایی از متن‌ها
یک نمونه ماشین حساب ایمن در برابر خطا:
```applescript
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 است:
```applescript
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<nowiki/>(ویرایشگر اسکریپت در سیستم عامل x مک قبل از ۱۰٫۶ و yosemite)****
**ویرایشگری برای اپل اسکریپت در mac os x. اسکریپت‌ها داخل پنجره‌های سند ویرایش نوشته می‌شوند و در آنجا کامپایل و اجرا می‌شوند و این پنجره‌ها محیط‌های مختلفی برای وارد کردن اطلاعات دارند همین‌طور برای به اجرا درآوردن نتیجه‌ها و بقیهٔ اطلاعات نیز برای اهداف debug کردن فراهم است. دسترسی به لغتنامه‌های اسکریپتی و کدهای از پیش نوشته شده داخل منوهای برنامه موجود است. ویرایشگر اپل اسکریپت در yosemit شامل قابلیت نوشتن هم در اپل اسکریپت و هم javaScript است.


**Xcode, از شرکت اپل**یک دسته از ابزارهایی با ویژگی‌های نزدیک به هم برای توسعه دادن برنامه‌هایی با قابلیت‌هایی برای ویرایش اپل اسکریپت‌ها یا درست کردن برنامه‌های تکامل یافتهٔ نوشته شده در زبان اپل اسکریپت.


**Smile و smileLab , موجود از طریق (Satimage<nowiki/>)**یک نرم‌افزار رایگانِ third-party , یک محیط برنامه‌نویسی تبلیغاتی برای اپل اسکریپت که خودش در اپل اسکریپت نوشته شده‌است. اسمایل مجانی است و عمدتاً برای توسعه دهی زبان اپل اسکریپت طراحی شده‌است. smileLab هم یک نرم‌افزار تبلیغاتی با امکانات اضافی برای آنالیز عددی، کارهای گرافی، اتوماسیون ماشین و کارهای وب است. smile و SmileLab هردو یک روش طبقه‌بندیِ پنجره‌های گوناگون را دارند. پنجره‌های اپل اسکریپت برای اجرا کردن و ذخیره فول اسکریپت‌ها و پایانه‌های اپل اسکریپت برای آزمایش خط به خط کد و پنجره‌های یونی-کد برای کار با متون و XML. کاربران می‌توانند واسط‌های پیچیده، به نام دیالوگ‌ها را برای موقعیت‌هایی که دیالوگ‌های خود اپل اسکریپت به کارشان نمیاد، درست کنند. 

[Script Debugger **Script Debugger**] **از کمپانی** [ Late Night Software **Late Night Software**]یک محیط برنامه نویسیِ third-party برای اپل اسکریپت.Script Debugger یک محیط پیشرفته برای اپل اسکریپت است که به نویسندهٔ اسکریپت اجازه می‌دهد که اپل اسکریپت‌ها را با stepping , breakpointگذاری و قدم‌گذاری داخل و بیرون توابع، subroutineها، دنبال کردن اثرات روی متغیر هاو ... , debug کند. Script Debugger همچنین یک مرورگر پیشرفتهٔ لغتنامه دارد که این اجازه را به کاربر می‌دهد که لغتنامه را در عمل و موقعیت‌های دنیای واقعی ببیند. این فرا تر از فقط لیست کردن چیزهایی است که لغتنامه می‌پوشاند بلکه یک نفر می‌تواند یک سند را داخل Pages باز کند و ببیند که چگونه لغات داخل لغتنامه برای آن سند صدق می‌کنند و این کار را برای فهم اینکه چه بخش‌های لغتنامه را استفاده کند، مفید است.Script Debugger برای ساختن اسکریپت‌هایی با واسط گرافیکی کاربر ساخته نشده‌است، علاوه بر توانایی ساخت alertها و دیالوگ ای ابتدایی، بیشتر روی کد زدن و debug کردن آن‌ها متمرکز است.

**FacePan , از شرکت Late Night Software**یک محیط برنامه‌نویسی تجارتیِ third-party برای ساختن برنامه‌های اپل اسکریپت به همراه واسط گرافیکی کاربر. توسعهٔ FacePan در حال حاضر به تعویق انداخته شده‌است.

### Script launchers
اپل اسکریپت‌ها می‌توانند از درون یک ویرایشگر اسکریپت اجرا شوند ولی معمولاً اجرا کردن آن‌ها به‌طور مستقیم، بدون بازکردن یک ویرایشگر اسکریپت مناسبتر است. تعدادی از انتخاب‌ها برای این گونه عمل کردن:
**Script Menu**منو ی این سیستم گسترده دسترسی به اپل اسکریپت‌ها را از دروت منوبارِ کامپیوتر mac os X فراهم می‌کند بدون اینکه مهم باشد که چه برنامه‌هایی در حال اجرا هستند. انتخاب یک اسکریپت از منوبار، آن را آغاز می‌کند. در سیستم عامل 10.6.x , منوی اسکریپت از قسمت prefrences ویرایشگرِ اپل اسکریپت فعال می‌شود. در ورژن‌های قبلی مک اواس x این از داخل AppleScript Utility application فعال می‌شد. وقتی اولین بار فعال می‌شود، منوی اسکریپت یک کتابخانهٔ پیش‌فرض نسبتاً عام و اپل اسکریپت‌های کارکردی که از ویرایشگر اسکریپت هم قابل بازشدن اند و مثال‌هایی برای درک بهتر اپل اسکریپت اند را، نمایش می‌دهد. اسکریپت‌ها می‌توانند سازمان دهی شوند به‌طوری‌که فقط وقتی در منو ظاهر شوند که یک برنامهٔ مشخص در پس زمینه فعال است.
بسیاری از برنامه‌های اپل، برخی برنامه‌های third-party و برخی add-oneها منوی اسکریپت خاص خود را فراهم می‌کنند. این‌ها از چندین راه قابل فعال شدن اند اما تمتمی توابع اولیهٔ آن‌ها از یک جنس است.
**Hotkey Launchers**میانبر(shortcut)های صفحه کلید با استفاده از System Preferences "Keyboard & Mouse Settings" (تنظیمات ماوس و صفحه کلید) قابل نسبت داده شدن به اپل اسکریپت‌ها هستند. برنامه‌های سودمند third-party گوناگونی هم در دسترس اند مانند QuicKeys, Spark, Quicksilver, Alfred, TextExpander که می‌توانند اپل اسکریپت‌ها را با ترکیب یک سری کلیدِ صفحه کلید، اجرا کنند.

**Folder Actions (عملیات پوشه)**با استفاده از Folder Actions برای اپل اسکریپت، اسکریپت‌ها می‌توانند زمانی آغاز شوند که تغییر خاصی در پوشه‌ها رخ دهد (مثل اضافه یا حذف فایل‌ها).Folder Actionها با کلیک بر روی پوشه و انتخاب Folder Actions Setup... از منوی محتوا (contextual menu) می‌توانند معین شوند. مکان این دستورها از ورژن 10.6.x به بعد از ورژن‌های قبلی اش تفاوت کرده‌است. این کار با برنامه‌های سودمندِ third-party مانند Hazel هم صورت می‌گیرد.

**Unix command line and launchd**اپل اسکریپت‌ها می‌توانند از Unix command line یا از launchd برای کارهای زمان‌بندی شده با استفاده از ابزار osascriptاجرا شوند. ابزار osascript می‌تواند اسکریپت‌های کامپایل شده (.scpt files) و فایل‌های متنی ساده (.applescript files- این‌ها با یک ابزار در زمان کامپایل اجرا می‌شوند) را اجرا کند. برنامه‌های اسکریپتی می‌توانند با استفاده از Unix open command، اجرا شوند.

### مسائل مرتبط با اسکریپت‌ها
[Automator **Automator**]Automator یک محیط ویرایش گرافیکی و ماژولی است که در آن *workflow *ها از *action*ها ساخته می‌شوند. قصد این است که بدون نیاز به دانش برنامه نویسی، بسیاری از توابع اپل اسکریپت را تکرار کنیم. Automator عملی مخصوص به شامل شدن و اجرا ی اپل اسکریپت‌ها را برای عمل‌های بسیار پیچیده داخا چارچوب ساده شدهٔ Automator, دارد .


**هستهٔ سیستم برنامه‌های اسکریپت شدنی**این برنامه‌ها که فقط در پس زمینه اجرا می‌شوند و داخل mac os x اند، برای دسترسی دادن اپل اسکریپت به ویژگی‌هایی که به صورت معمول اسکریپت شدنی نیستند. مثلاً در ۱۰٫۶٫۳ برنامه‌هایی اسکریپت شدنی مثل VoiceOver(یک اسکریپت شدنیِ حسابداری و بستهٔ خط برِیل برای نابینایان) , System Events (کنترل برنامه‌های اسکریپت نشدنی و دسترسی به کارکردهای معینی از سیستم و عملیات اولیهٔ فایل‌ها) , Printer Setup Utility (یک ویژگی سودمند اسکریپت شدنی برای کنترل کارهای چاپی) , Image Events(تغییر هستهٔ عکس‌ها) , HelpViewer (ویژگی اسکریپت شدن برای نشان دادن قسمت کمک‌ها) ,Database Events (واسط کاربری پایگاه دادهٔ minimal SQLite3) و AppleScript Utility ,.

**AppleScriptObjC**قسمتی از بستهٔ Xcode , محیط برنامه‌نویسی «کوکو»، که روی mac Os x قابل نصب است، است. AppleScriptObjC می‌گذارد تا اپل اسکریپت به دستورهای «کوکو» دسترسی مستقیم داشته باشد.

**AppleScript Studio**قسمتی از بستهٔ Xcode در ۱۰٫۴ و ۱۰٫۵ که الآن دیگر محبوب نیست. یک چارچوب برنامه‌نویسی برای چسباندن واسط‌های «کوکو» به برنامه‌های اپل اسکریپت.


ا**ضافه بر اسکریپت کردن (OSAX)**Scripting addition یک سری plug-in برای اپل اسکریپت هستند توسط third - partyها یا شرکت اپل توسعه داده شده‌اند. آن‌ها برای گسترش دستورهای خود اپل اسکریپت و گسترش ویژگی‌های آن برای کم کردن وابستگی آن به کارکرد برنامه‌های دیگر، طراحی شده‌اند. برای مثال Standard Addition.osax توسط شرکت اپل قابلیت‌هایی را به اپل اسکریپت افزوده است که داخل هستهٔ اصلی زبان نیست. بدون 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* تمام می‌شود. مهم‌ترین ساختارها در پایین تعریف شده‌اند:
**شرطی‌ها**
اپل اسکریپت‌ها دو نوع عبارات شرطی دارند.
```applescript
-- 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** متوقف شوند.

تکرار تا ابد.
```applescript
repeat
     -- commands to be repeated
end repeat
```
تکرار به اندازهٔ تعداد دفعات داده شده.
```applescript
repeat 10 times
     -- commands to be repeated
end repeat
```
حلقه‌های شرطی. بلوک داخل حلقه ی** repeat while**تا وقتی که شرط برقرار است اجرا می‌شود. بعد از هر اجرای بلوک، شرط چک می‌شود. حلقهٔ **repeat until** , برعکس، یگانه است. اما بلوک تا وقتی که شرط غلط است انجام می‌شود.
```applescript
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
```
حلقه با یک متغیر. هنگام شروع حلقه، متغیر به مقدار شروع نسبت داده می‌شود. بعد از هربار اجرای بلوک، یک متغیر اختیاری به متغیر، اضافه می‌شود که به‌طور پیشفرض ۱ است.
```applescript
-- 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
```
شمردن یک لیست. در هربار اجرای متغیرِ حلقه به یک نمونهٔ جدید داخل لیست داده می‌شود
```applescript
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 تمام می‌شوند، قسمتی از جریان معموا اسکریپت ما نیستند مگر اینکه از جایی داخل اسکریپت صدا زده شوند.

handlerها همچنین می‌توانند با "to" به جای on تعریف شوند و می‌توانند برای قبول پارامترهای برچسب‌گذاری شده، نه داخل پرانتزها، استفاده شوند.

چهار نوع handler از پیش تعریف شده داخل اپل اسکریپت داریم: run, open, idle, quit. که هرکدام از آن‌ها مانند روش ساخت run handler در بالا ساخته می‌شوند.
**Run handler**اصلی‌ترین کد اسکریپت که مقع اجرا صدا می‌شود را تعریف می‌کند. بلوک‌های Run handler اختیاری اند مگر اینکه آرگومانهایی به اسکریپت پاس داده شوند. اگر یک Run handler به صورت علنی حذف شود، آنگاه همهٔ کدی که داخل بلوک handler نیست مثل موقعی اجرا می‌شود که انگار یک run handler ِ غیر علنی وجود داشته‌است.**Open handler**
تعریف با استفاده از "on open theItems".
```applescript
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**یک زیر روال است که وقتیکه برنامه در حالت درجا است، در بازه‌های زمانی توسط سیستم اجرا می‌شود.
```applescript
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**یک دستگیره است که هنگامیکه applet درخواست خروج را دریافت می‌کند، اجرا می‌شود. این می‌تواند برای ذخیره داده‌ها یا اتمام یک عمل قبل از خروج از برنامه، استفاده شود.
```applescript
on quit
     --commands to execute before the script quits
  continue quit -- required for the script to actually quit
end quit
```

**اشیائ اسکریپت**
اشیای اسکریپت می‌توانند با نحو زیر به صورت علنی تعریف شوند:
```applescript
script scriptName
     -- commands and handlers specific to the script
end script
```
اشیای اسکریپت می‌توانند همان دستورهای tell را مانند اشیای برنامه استفاده کنند و می‌توانند از داخل فایل‌ها بارگذاری با به درون آن‌ها ذخیره شوند. طول زمان اجرا در بعضی موارد با استفاده از اشیای اکریپت کاهش پیدا می‌کند.

### اطلاعات متفرقه
* متغیرها مستقیماً نوع داده نمی‌شوند و نیازی به declare شدن ندارند. متغیرها هر نوع داده‌ای را می‌توانند بگیرند (حتی توابع و اسکریپت‌ها). دستورهای زیر نمونه‌هایی از ساختن متغیرها هستند:
```applescript
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' را به کار ببرید.
```applescript
tell application "Finder"
    set x to my myHandler()
    -- or
    set x to myHandler() of me
end tell

on myHandler()
    --commands
end myHandler
```
با استفاده از همین تکنیک برای دستورهای اضافی اسکریپت کردن می‌تواند خطاها را کم و کارایی را بهتر کند.
```applescript
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 برای کار با اپل اسکریپت است در حالی که ورژن پرلِ مکینتاش، پایتون (زبان برنامه‌نویسی) , روبی (زبان برنامه‌نویسی) و تی‌سی‌ال , همگی ابزار کار با appleEventها بدون بخش‌های 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

رده:توسعه مک‌اواس
رده:زبان‌های اسکریپت‌نویسی
رده:زبان‌های برنامه‌نویسی پویا
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۱۹۹۳ (میلادی)
رده:زبان‌های برنامه‌نویسی سطح بالا
رده:زبان‌های برنامه‌نویسی ماشینی پویا
رده:نرم‌افزارهای ۱۹۹۳ (میلادی)
رده:نرم‌افزارهای مالکیتی