分享
 
 
 

AppleScript语言简介

王朝other·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

AppleScript语言简介

最近我把我的“移动装备”从Sony换成了Apple,就是俗称“小白”的那种苹果本本。很多人说在Apple上搞开发不方便,其实那只是不习惯而已。现在,我的本本上各类开发环境基本齐备,语言环境有gcc, jdk, python, php, ruby, logo(logo是给小孩子玩的)... IDE有eclipse和Xcode(这个Xcode是MAC安装盘上提供的,可以做c++, objective-c, java等各种语言的应用,感觉在集成和开放之间的平衡做得比较好,只是我还没有用熟)...调试和测试用的小工具也有不少……编程序没有任何问题!

总的感觉是,功能和兼容性不比Linux差(MACOSX内核也是UNIX),界面和趣味性却又比Linux强上许多倍(这个自然了,Apple是人性化设计的专家嘛)。最最重要的是,在这个苹果的本本上,我终于可以尝试一种以前早有耳闻却一直无法上机实践的脚本语言了。这个著名的脚本语言就是:

AppleScript

这几天趁着出差的空闲时间把AppleScript的基本特性试了一下,先写一份语言的简介,权当是学习笔记吧。以后有时间,再把这个语言的细节一一笔记下来。

AppleScript的三大特点(这个是我自己归纳的,不代表官方意见)

----------------------------------------------------

(1) 好玩——人性化的语言

这个没什么好解释的,苹果上的东东都好玩得不得了,连一向古板的Microsoft做的苹果版的Office也比windows版的兄弟好玩许多倍,更不用说苹果人做的AppleScript了。给几个例子吧,苹果手册上推荐的调试AppleScript程序的一种方法是在发生错误的地方加上:

say "Oh damn! I've got an error!"

然后,一旦发生错误,苹果本本就会大叫着通知你!

还有,大家都见过从字符串里拆出单词的代码,可多半没见过下面这么拆的:

return some word of "one two three four five"

这行代码的意思是返回字符串中的“任何”一个单词,至于到底是哪一个单词,您就甭管了。

(2)好懂——英语化的语言

没错!就算没学过编程的人看了下面的AppleScript代码也多半可以猜出是怎么回事:

tell application "Microsoft Excel" to open file "test.xls"

以前老有人说BASIC语言像英语,其实,最像英语的程序设计语言应该是AppleScript!看下面这行代码:

tell application "Finder"

if the name of the front window is greater than "HELLO" then say "Hello"

end tell

还有下面这行代码:

date "2005-5-20" + 100 * days + 10 * hours

它的运行结果是

date "2005年8月28日星期日 10:00:00 AM"

也就是计算出比2005年5月20日正午晚100天零10小时的那个时刻,这种写法可要比c++、Java里直观多了。

(3) 好用——真正系统级的脚本语言

操作系统开发者总希望能有一种和操作系统各层次、各部分(包括系统功能和应用程序)都紧密集成的脚本语言,以便给用户提供真正“系统级”的自动化支持。可这个事情说起来容易做起来难。

UNIX/Linux的各种Shell语言是系统级的脚本语言。如果采用广义的说法,shell层面的脚本语言既包括早期的csh,ksh等等,也包括晚出的perl, python等等,这些脚本语言与命令行方式运行的UNIX/Linux程序可以非常好地集成在一起(主要是UNIX管道和流比较强大),但与图形界面程序的集成就缺乏统一、简便的途径了(比如,在X11下,用bash脚本向正在运行的emacs发送指令,用bash调用OpenOffice的某个功能,完成这两种任务的方法就会有不小的差别)。

Windows上做得就更糟糕了。DOS命令行的可怜就不说了。微软为了统一不同应用程序间的自动化方式,基于COM发明了ActiveX技术,又给出了VBScript和VBA这样的语言,但除了微软自己的Office对它们的支持非常好以外,其他应用软件在自动化和功能集成方面的技术选型就五花八门,难以互通了(比如,为了控制Flash MX 2004而编写的JavaScript程序(通过JSAPI)显然就和为了控制Excel而编写的VBScript程序(通过Excel VBA的ActiveX接口)大不一样。

在MACOSX里,情况就好很多了。因为MACOSX在操作系统层面定义了应用程序之间的互操作接口AppleEvents(基于事件机制实现,比ActiveX和UNIX管道都简单些),提供了通用的AppleScript语言,然后鼓励所有MACOSX的应用支持这些标准。事实上,大多数Apple上的应用程序(包括微软的Office)都可以在AppleScript的控制下完成互操作,或者相互连接成统一的“工作流”。比如说,我们可以在一段AppleScript里先通知截屏程序将屏幕保存为图像文件,然后通知Finder(苹果上的资源管理器)将图像文件保存并同时备份到……再命令Photoshop调整该图像的颜色,最后命令PowerPoint将图像嵌入到幻灯片里……这一连串操作要是在Windows里实现起来,可就不那么容易了。

AppleScript语言的主要语法特性

---------------------------

(*) 支持的数据类型:

Boolean, Class, Constant, Data, Date, File Specification, Integer, List, Number, Real, Record, Reference, RGB Color, String, Styled Clipboard Text, Styled Text, Text, Unicode Text, Unit Type Value Classes

其中,Styled Text表示含有字体和格式信息的字符串,这种在语言层面支持RichText的做法并不多见。

(*) 控制结构

分支、循环等各种形式都有,语法非常接近英语。其中,循环结构有很多种,当然也支持最时髦的for each结构:

repeat with loopVariable in list

[ statement ]...

end [ repeat ]

(*) 面向对象

AppleScript是面向对象的。首先,所有AppleScript能控制的应用都是对象的集合,为此,AppleScript还提供了统一的对象字典,在字典里,可以查到任何一个支持AppleScript的程序(比如Photoshop)提供了哪些对象,每个对象有哪些属性和方法。其次,我们自己也可以创建对象,而且可以从其他对象继承:

script X

on sayHello()

return "Hello, " & getName()

end sayHello

on getName()

return "Emily"

end getName

end script

script Y

property parent : X

on getName()

return "Andrew"

end getName

end script

tell Y to sayHello()

(*) 表处理

list结构在AppleScript里非常重要,也非常好用,像这样的代码在其他支持表的语言里很常见:

length of {"a", "b", "c", 1, 2, 3}

但下面这样的代码就不那么常见了

count integers in {"a", "b", "c", 1, 2, 3}

还有更神奇的代码:

the items in {"this", "is", "a", "list"} whose first character is "t"

这种代码差不多就是Python里面为支持函数式编程而引入的Filter功能了。或者,上面这行AppleScript代码也可以等价于Python里面的这样一个表达式:

[w for w in ["this", "is", "a", "list"] if w.startswith("t")]

相比之下,Python的代码要比AppleScript的代码费解多了。

(*) 异常处理

用Try来处理异常当然没问题,最好玩的是还有这样的超时控制:

with timeout of 5 seconds

tell application "AppleWorks"

close front document saving ask

end tell

end timeout

先写这些特性吧,只是个简介嘛,何况我自己也没有学全呢。以后有时间再详细介绍。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有