أبل سكريبت

**أبل سكربت**  هي لغة برمجة نصية أنشأتها شركة آبل، تُسهل التحكم الآلي (الأتمتة) في تطبيقات نظام الماك. تم تقديمها لأول مرة في نظام التشغيل 7، وهي مضمنه حاليًا في جميع إصدارات ماك أو إس كجزء من حزمة أدوات أتمتة النظام. قد يشير المصطلح أبل سكربت "AppleScript" إلى اللغة نفسها ،أو إلى نص مكتوب بلغة أبل سكربت ، أو بشكل غير رسمي ،قد يشير إلى macOS Open Scripting Architecture الذي يشكل أساس لغة أبل سكربت.

## نظرة عامة

أبل سكربت هي لغة برمجة نصية تم تطويرها بواسطة أبل لإجراء اتصالات بين التطبيقات (IAC) باستخدام أحداث أبل. ترتبط أبل سكربت بأحداث أبل ولكنها تختلف عنها. تم تصميم أحداث أبل لتبادل البيانات والتحكم في التطبيقات الأخرى من أجل أتمتة المهام المتكررة.

تمتلك أبل سكربت بعض قدرات المعالجة الخاصة بها ، بالإضافة إلى إرسال واستقبال أحداث أبل إلى التطبيقات. يمكن لـ أبل سكربت إجراء العمليات الحسابية الأساسية ومعالجة النصوص ، وهي قابلة للتوسيع ، مما يسمح باستخدام إضافات البرمجة النصية التي تضيف وظائف جديدة إلى اللغة. ومع ذلك ، تعتمد أبل سكربت بشكل أساسي على وظائف التطبيقات والعمليات للتعامل مع المهام المعقدة. كلغة أوامر منظمة ، يمكن مقارنة أبل سكربت بشل يونكس أو Microsoft Windows Script Host أو IBM REXX ولكنها تختلف عن الثلاثة. حقيقة أن تطبيقات ماكنتوش تنشر "قواميس" للكائنات والعمليات القابلة للتوجيه;ضروري جداً حتى يتمكن أبل سكربت من تأدية وظائفه.

تحتوي أبل سكربت على بعض عناصر البرمجة الإجرائية ، والبرمجة الموجهة للكائنات (خاصة في إنشاء كائنات النص البرمجي) ، واتجاهات برمجة اللغة الطبيعية في تركيبها ، ولكنها لا تتوافق تمامًا مع أي من نماذج البرمجة هذه.
## تاريخ
في أواخر الثمانينيات من القرن الماضي ، اعتبرت شركة أبل استخدام لغة البرمجة HyperTalk الخاصة بـ HyperCard كلغة تطوير قياسية للمستخدم النهائي، عبر الشركة وضمن نظام تشغيل ماك أو إس الكلاسيكي ، وكذلك لتمكين التواصل بين العمليات الخاصة بمنتجات أبل مع عمليات المنتجات الأخرى. يمكن للمبتدئين استخدام HyperTalk لبرمجة مكدس HyperCard. أدرك مهندسو أبل أنه يمكن تصميم لغة برمجة نصية مماثلة ، ولكن أكثر توجهاً للكائنات ، لاستخدامها مع أي تطبيق ، وقد وُلد مشروع أبل سكربت كبرنامج منبثق عن جهد بحثي لتحديث نظام ماكنتوش ككل وأصبح أخيرًا جزءًا من النظام 7 (Mac OS 7).

تم إصدار أبل سكربت في أكتوبر 1993 كجزء من نظام 7.1.1 (نظام ماك 7 Pro ، أول ترقية رئيسية للنظام 7). كان QuarkXPress (الإصدار 3.2) من أوائل التطبيقات البرمجية الرئيسية التي دعمت أبل سكربت. أدى هذا بدوره إلى اعتماد أبل سكربت على نطاق واسع في عالم النشر وما قبل الطباعة ، وغالبًا ما يربط معًا مهام سير العمل المعقدة. كان هذا عاملاً رئيسيًا في الحفاظ على موقع Macintosh المهيمن في النشر وما قبل الطباعة ، حتى بعد نقل QuarkXpress وتطبيقات النشر الأخرى إلى Microsoft Windows.

بعد بعض الشكوك بشأن مستقبل أبل سكربت في الجيل التالي من نظام التشغيل من أبل ، أدى الانتقال إلى Mac OS X (حوالي 2002) وأطر عمل Cocoa إلى زيادة فائدة ومرونة أبل سكربت بشكل كبير. تتيح تطبيقات Cocoa لمطوري التطبيقات تحقيق قابلية البرمجة الأساسية لتطبيقاتهم بأقل جهد ممكن ، مما يؤدي إلى زيادة عدد التطبيقات القابلة للبرمجة مباشرة. وفي الوقت نفسه ،وبسبب التحول إلى أسس يونكس وقدرة أبل سكربت على تشغيل أوامر Unix مباشرة ، باستخدام الأمر `do shell script` أتاح ذلك لأبل سكريبت تحكم أكبر بكثير في نظام التشغيل نفسه.

تم إصدار *AppleScript Studio* مع نظام التشغيل Mac OS X 10.2 كجزء من Xcode (بيئة برمجية) ،ولاحقاً تم إصدار إطار العمل AppleScriptObjC ضمن نظام التشغيل Mac OS X 10.6 ، وكل ذلك سمح للمستخدمين بإنشاء تطبيقات Cocoa باستخدام أبل سكربت.

في أكتوبر 2016 ، غادر سال سوجويان ، مدير منتج أبل سكربت ومبشر الأتمتة ، شركة أبل عندما تم إلغاء منصبه "لأسباب تتعلق بالعمل". استجاب الخبراء في مجتمع ماك مثل جون غروبر و Andy Ihnatko بشكل عام بقلق ، وشككوا في التزام أبل تجاه مجتمع المطورين والمستخدمين المحترفين. رد نائب الرئيس الأول لهندسة البرمجيات في أبل ، كريج فيديريغي ، في رسالة بريد إلكتروني قائلاً: "*لدينا كل النية لمواصلة دعمنا لتقنيات الأتمتة العظيمة في ماك أو إس!*" ، على الرغم من أن جيف جاميت في Mac Observer رأى أن ذلك لم يفعل شيئًا يذكر لتهدئة شكوكه حول مستقبل أتمتة أبل بشكل عام وابل سكربت بشكل خاص. في الوقت الحالي ، تظل أبل سكربت أحد مكونات تقنيات أتمتة ماك أو إس ، جنبًا إلى جنب مع Automator و Shortcuts و Services و shell scripting.

## التعليقات برمجياً
يمكن عمل التعليقات بطرق متعددة. يمكن أن يبدأ التعليق المكون من سطر واحد بشرطتين (--). في أبل سكربت 2.0 ، التي تم إصدارها لأول مرة في نظام التشغيل Mac OS X Leopard ، قد يبدأ أيضًا بعلامة (#). يسمح هذا بتخزين برنامج نصي أبل سكربت قائم بذاته كملف نصي قابل للتنفيذ يبدأ بسطر `#!/usr/bin/osascript` مثال:


```applescript
- هذا تعليق من سطر واحد
# وايضاً هذا! (في Mac OS X Leopard أو أحدث)
```


بالنسبة إلى التعليقات التي تشغل سطورًا متعددة ، تستخدم أبل سكربت أقواسًا بداخلها علامات نجمية، مثال:

```applescript
(* هذا 
تعليق
متعدد
السطور *)
```


## برنامج أهلا بالعالم
في أبل سكربت ، يمكن كتابة البرنامج التقليدي *أهلا بالعالم*(!Hello World) في عدة أشكال مختلفة ، بما في ذلك:


```applescript
display dialog "Hello, world!" -- نافذة منبثقة بها زران "موافق" و "إلغاء"
-- أو
display alert "Hello, world!" --نافذة منبثقة بها زر واحد "موافق" وأيقونة تمثل التطبيق الذي يعرض التنبيه
-- أو
say "Hello, world!" -- رسالة صوتية باستخدام صوت الكمبيوتر المركب
-- أو
return "Hello, world!"
```


تحتوي أبل سكربت على العديد من خيارات واجهة المستخدم ، بما في ذلك الحوارات والتنبيهات وقائمة الاختيارات. (يشير الرمز ¬ ، الناتج عن الضغط على  في المحرر ، إلى استمرار جملة واحدة عبر عدة أسطر.)

```applescript
-- نافذة حوار
set dialogReply to display dialog ¬
	"حوار نصي" default answer ¬
	"أجابة نصية" hidden answer false ¬
	buttons {"تخطي", "نعم", "إلغاء"} ¬
	default button ¬
	"نعم" cancel button ¬
	"تخطي" with title ¬
	"عنوان النافذة" with icon note ¬
	giving up after 15
```



```applescript
-- أختيار من قائمة
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
-- أظهار تنبية
set resultAlertReply to display alert "Alert Text" ¬
	as warning ¬
	buttons {"تخطي", "موافق", "إلغاء"} ¬
	default button 2 ¬
	cancel button 1 ¬
	giving up after 2
```


يمكن لكل طريقة تفاعل للمستخدم إرجاع قيم الأزرار التي تم النقر عليها أو العناصر المختارة أو النص الذي تم إدخاله لمزيد من المعالجة. فمثلا:

```applescript
display alert "Hello, world!" buttons {"رفض", "قبول"}
set theAnswer to button returned of the result
if theAnswer is "قبول" then
	beep 5
else
	say "عفواً!"
end if
```


## استعارات اللغة الطبيعية
في حين أن أحداث أبل هي وسيلة لإرسال الرسائل إلى التطبيقات ، فإن أبل سكربت هي لغة معينة مصممة لإرسال أحداث أبل. تماشياً مع هدف سهولة الاستخدام للمبتدئين ، تم تصميم لغة أبل سكربت على استعارة اللغة الطبيعية ، تمامًا كما تم تصميم واجهة المستخدم الرسومية على استعارة سطح المكتب. يجب أن يكون كود أبل سكربت المكتوب جيدًا واضحًا بما يكفي ليقرأه ويفهمه أي شخص ، كما يجب تحريره بسهولة. تعتمد اللغة إلى حد كبير على لغة HyperTalk التابعة لـ HyperCard ، والتي امتدت لتشير ليس فقط إلى عالم HyperCard للبطاقات والمكدسات ، ولكن أيضًا من الناحية النظرية إلى أي مستند. تحقيقًا لهذه الغاية ، قدم فريق أبل سكربت نموذج كائن حدث أبل (AEOM) ، والذي يحدد الكائنات التي "يعرفها" أي تطبيق معين.

جوهر لغة أبل سكربت هو استخدام المصطلحات التي تعمل كأسماء وأفعال يمكن دمجها. على سبيل المثال ، بدلاً من فعل مختلف لطباعة صفحة أو مستند أو نطاق من الصفحات (مثل printPage و printDocument و printRange) ، تستخدم أبل سكربت فعل "print" واحد يمكن دمجه مع كائن ، مثل صفحة أو وثيقة أو مجموعة من الصفحات.


```applescript
print page 1

print document 2

print pages 1 thru 5 of document 2
```


بشكل عام ، تحدد AEOM عددًا من الكائنات - مثل مستند "document" أو فقرة "paragraph" - والإجراءات المقابلة - مثل "cut" و "close". يحدد النظام أيضًا طرقًا للإشارة إلى خصائص الكائنات ، بحيث يمكن للمرء الرجوع إلى "الفقرة الثالثة من المستند 'يوم جيد'"--"*<nowiki/>'third paragraph of the document 'Good Day*"، أو" لون الكلمة الأخيرة من النافذة الأمامية "--"*color of the last word of the front window*". يستخدم AEOM تطبيق القاموس*dictionary*" لربط أحداث أبل بمصطلحات يمكن للبشر قراءتها ، مما يسمح بالترجمة ذهابًا وإيابًا بين أحداث أبل سكربت القابلة للقراءة البشرية وأحداث أبل ذات الرمز الثانوي. لاكتشاف عناصر البرنامج القابلة للبرمجة ، يمكن عرض قواميس التطبيقات المدعومة. (في تطبيقي Xcode و Script Editor ، يوجد هذا ضمن File → Open Dictionary.)

لتحديد التطبيق المقصود أن يكون هدفًا لمثل هذه الرسالة ، تستخدم أبل سكربت بنية "tell":

```applescript
tell application "Microsoft Word"
  quit
end tell
```

بدلاً من ذلك ، يمكن التعبير عن tell في سطر واحد باستخدام المصدر:


```applescript
tell application "Microsoft Word" to quit
```


بالنسبة للأحداث في (activate و open و reopen و close و print و 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
```


يمكن أيضًا التعبير عن مفهوم التسلسل الهرمي للكائن باستخدام عبارات الجر المتداخلة:


```applescript
pixel 7 of row 3 of TIFF image "my bitmap"
```


والتي يمكن التعبير عنها بلغة برمجة أخرى على أنها استدعاءات طريقة متسلسلة ، كما هو الحال في هذا الكود المزيف (للفهم فقط):


```javascript
getTIFF("my bitmap").getRow(3).getPixel(7);
```


يتضمن أبل سكربت بناء الجملة للعد الترتيبي ، مثلاً: 'الفقرة الأولى' "*the first paragraph*" ، وكذلك الأساسي ،مثلاً:'الفقرة واحد' "*paragraph one*". وبالمثل ، يمكن الإشارة إلى الأرقام نفسها على أنها نص أو رقميًا ، "five"و "fifth" و "5" كلها مدعومة ؛ هم مرادفات في أبل سكربت. أيضًا ، يمكن استخدام كلمة "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
```


تسلسل بسيط لمربع حوار اسم المستخدم و كلمة المرور. هنا ، اسم المستخدم هو *احمد* وكلمة المرور *app123*:

```applescript
tell application "Finder"
	set passAns to "app123"
	set userAns to "احمد"
	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 with hidden answer) 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
```


## أسلوب البرمجة النصية المفتوح
أحد الجوانب المهمة لتطبيق أبل سكربت هو (**Open Scripting Architecture (OSA**. توفر **Apple OSA** للغات البرمجة النصية الأخرى و*منتجات البرمجة النصية/الأتمتة* التابعة لجهات خارجية مثل QuicKeys و UserLand Frontier ، للعمل في حالة متساوية مع أبل سكربت. تم تنفيذ أبل سكربت كمكون برمجة نصية ، وكانت المواصفات الأساسية لربط هذه المكونات بـ OSA عامة ، مما يسمح للمطورين الآخرين بإضافة مكونات البرمجة النصية الخاصة بهم إلى النظام. ستعمل واجهات برمجة التطبيقات العامة الخاصة بالعميل (Public client APIs) لتحميل النصوص البرمجية وحفظها وتجميعها بنفس الطريقة لجميع هذه المكونات ، مما يعني أيضًا أن التطبيقات الصغيرة والقطيرات يمكنها الاحتفاظ بنصوص برمجية في أي من لغات البرمجة النصية هذه.
إحدى ميزات OSA هي إضافات البرمجة النصية ، أو OSAX لـ Open Scripting Architecture eXtension ، المستوحاة من أوامر HyperCard الخارجية.*إضافات البرمجة النصية* هي مكتبات تسمح للمبرمجين بتوسيع وظيفة أبل سكربت. الأوامر المضمنة كإضافات نصية متاحة على مستوى النظام ، ولا تعتمد على أحد التطبيقات . محرر أبل سكربت قادر أيضًا على تحرير وتشغيل بعض لغات OSA مباشرة.

### جافا سكريبت للأتمتة
ضمن OS X Yosemite والإصدارات الأحدث من ماك او اس ، يظل مكون (**JavaScript for Automation (JXA** هو لغة OSA الوحيدة الجادة والبديلة لـ أبل سكربت ، على الرغم من أن إصدارات ماكنتوش من بيرل وبايثون وروبي وTcl تدعم جميعها وسائل العمل الأصلية مع أحداث أبل دون أن تكون مكونات OSA.

توفر JXA أيضًا واجهة لغة أجنبية Objective-C (ولغة C). نظرًا لكونها بيئة تعتمد على محرك JavaScriptCore الخاص بـ WebKit ، فإن مجموعة ميزات جافا سكربت متزامنة مع محرك متصفح سفاري الخاص بالنظام. توفر JXA نظام وحدة جافا سكربت ويمكن أيضًا استخدام وحدات CommonJS عبر browserify.
## انظر أيضاً
:* حدث أبل
:* معالجة اللغة الطبيعية
## مراجع

تصنيف:برمجيات 1993
تصنيف:برمجيات احتكارية
تصنيف:لغات برمجة
تصنيف:لغات برمجة أنشئت في 1993
تصنيف:لغات برمجة ديناميكية
تصنيف:لغات برمجة ديناميكية النمط
تصنيف:لغات برمجة عالية المستوى
تصنيف:لغات برمجة نصية