# اپل اسکریپت
اپل اسکریپت (به انگلیسی: 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ها می‌گذارند تا یک متن بتواند با چند برنامه هم‌زمان کار کند و داده‌ها بین آن‌ها رفت‌وآمد کنند تا عملیات پیچیده بدون دخالت انسان انجام شوند. برای مثال، یک اپل اسکریپت برای ساختن یک گالریِ وبِ ساده باید کارهای زیر را انجام دهد:
1. بازکردن یک عکس در یک برنامهٔ ویرایش عکس (با فرستادن یک Open File Apple Event به آن برنامه)
2. دستور دادن به برنامهٔ ویرایش عکس برای ویرایش عکس (مثلاً کم کردن وضوح یا اضافه کردن لبه یا اضافه کردن یک امتیاز به عکس)
3. دستور دادن به برنامهٔ ویرایش عکس برای ذخیره عکس تغییر داده شده در یک فایل داخل یک پوشه (با فرستادن Save و/یا Close Apple Event به آن برنامه)
4. فرستادن آدرس یک فایل جدید (با یکApple Event دیگر) به یک برنامه ویرایشگر متن یا ویرایشگر وب
5. دستور به آن برنامهٔ ویرایشگر برای نوشتن یک لینک برای عکس داخل یک فایل HTML.
6. تکرار دستورهای فوق برای تمامی عکس‌های داخل یک پوشه (صدها یا هزاران عکس).
7. بارگذاری فایل 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 دارد که کارکرد اپل اسکریپت را با تعدادی دستور جدید چون دیالوگ‌های تعاملی با کاربر، خواندن و نوشتن فایل‌ها، دستورهای فایل سیستم‌ها، توابع تاریخ، متن و اعمال ریاضی، گسترده می‌سازند.