| |
1. 简介 | |
Curl是一种新型的计算机语言,它的技术渊源于麻省理工学院(MIT)的某工程项目(1995)。用Curl开发的程序要通过网络浏览器来执行 ,即所谓的客户端语言。用浏览器执行Curl程序的前提条件是在客户端事先安装Curl的执行环境,即Surge RTE插件。此插件可从www.curl.com、www.curlap.com 下载。 Curl语言为开发匹敌于传统的单机界面以及客户端/服务器界面等的应用程序提供了一个良好的开发平台。 | |
2. Curl语言的基础 | |
2.1 关于开发 | |
Curl语言有开发应用程序的统一开发环境(IDE)。IDE具有可视化编程功能, 可进行画面布局设计、控件配置和事件任务编辑的开发。此外,Curl语言还提供用Curl语言自身编制的在线辅助文档。文档采用超文本标记方式,不仅有API的说明,还有立即可以取用的例题。更有甚的是,那些例题都可以当场进行修改和执行调试 ,这大大方便了对Curl功能的调查工作。当然,不用Curl的IDE,而用自己惯用的文本编辑器(加以适当的配置)也可以开发Curl应用程序。 | |
2.2 Cur语言之基础中的基础 | |
Curl语言具有丰富的表现能力,在这里就其基础中的基础加以说明。 | |
2.2.1代码块 | |
Curl程序是由大括号“{”和“}”括起的代码块组成。代码块可以嵌套。 比方说,Curl小应用程序的文本宣言要用 {curl 6.0 applet} 代码块表示。 | |
2.2.2 小应用程序(Applet) | |
用Curl开发的程序是以Applet为单位处理的。应用程序既可以由一个Applet组成,又可以 由多个Applet组成。当然,用子Applet组成的情况也有。父applet和子applet之间可以互相通信。一般来说,Applet由文本宣言、附加信息以及代码主体组成。 比方说,如想编制一个显示「Hello World!」的小应用程序,那么应像List 1那样编辑。 | |
List 1 Curl版Hello World! | |
| |
这里,第1行是文本宣言,第2行是附加信息,第3行是代码主体。 | |
2.2.3 注释 | |
Curl用|| 和 |# to be commented #|对程序进行注释。将||置于某一行的某处,那么那一行的||之后就变成注释 ,而|# #|则用来进行复数行加注。 | |
2.2.4 富文本 | |
Curl具有超文本标记语言的功能 ,同时还具有丰富的文本格式化函数。比方说, 如想对字符串加粗,那么调用bold函数即可。 即{bold 字符串}。此外还有诸如big、small、italic等函数。有趣的是函数可以嵌套调用。例如,{big {big 字符串}}将对指定字符串进行两次big 处理。在表达文章时,经常使用的文本函数有pre, paragraph以及text等。以text 为例,如在调用时指定color、font-size、 font-style、font-family、font-weight等关键字参数,那么可以实现多种不同的文字样式。 | |
2.2.5 流程控制 | |
Curl的流程控制有 {if …}、{if …else …}、{if … elseif …else …}、{while …}、{until …}、{switch …case…else…}以及{type-switch…case…else…}。Type-switch是在判断变量类型的时候使用的。Switch的case语句的常量表达式可以用多个数值。例如可以表现为 case “1”, “2”, “4” do。 | |
2.2.6 字符串 | |
字符串有可变的类 StringBuf 和不可变的类String。StringBuf使用concat方法可以和其他字符串进行连接。这个类可以使用检索 find、比较compare、空白删除 trim、部分字符串substr等方法。使用&连接多个变量或者定量生成新的String。例如{let str:String=”123” & 1 & str-x}。关于字符串和数字之间的转换 :将字符串转换成数字时使用字符串的to-int、to-double;数字转换成字符串时使用(1){format “%d”, int-var};(2){String int-var};(3) “” & int-var。 | |
2.2.7 容器 | |
Curl的容器有{Array-of type}、{Set-of type}、{HashTable-of type1, type2}及{Array-2-of type},这里的type可以是原始变量也可以是类。 | |
2.2.8 类定义 | |
Curl的类是由{define-class [访问类型] [修饰子] 类名 [{inherits 父类}] [类变量] [类过程] 域 构造函数 Setter Getter 选项 方法 } 的形式来定义的,下面是一个简单的类构造的例子。 {define-class public MyName field public last-name:String=”” field public first-name:String=”” } |
2.2.9 函数定义 | |
函数由以下语法定义: {define-proc public {my-proc-name x1:String, x2:String, y:String=”x”, …}:(String, String) {if y==”x” then let x3:String = x1 & “, “ & x2} {return x2, x1} } Curl程序有3种参数。即:位置参数 (x1和x2)、关键词参数(y)以及剩余参数(…)。位置参数在引用时必须指定;关键词参数在引用时可以省略;剩余参数在引用时可以指定为任意数。Curl可以返回多个值。类的构造函数(constructor)、设计(factory)以及方法(method)等都使用同样的参数形式。 因此,Curl的类和函数的表达能力极具柔软性和扩张性。 | |
2.2.10 布局 | |
Curl的布局控件有 Canvas、OverlayBox以及 Hbox、VBox。前者可以通过2个坐标来定位,后者只是嵌套。但是,即使是只用Box系列和Frame (Frame、ScrollBox)的嵌套组合也能作出很不错的应用程序。 | |
2.2.11 文档样式 | |
Curl有3种文档样式。 (1)DefaultDocumentToc为默认的样式,根据内容的多少会自动对滚动轴进行调节。 (2) TocDocument将在页面左侧自动生成目录。 (3)PlainDocument是在图表表示范围内根据窗口的大小自动收缩或扩张图表。如果要充分发挥Curl的弹性功能,最好是选用样式(3)。文档样式定义写在应用程序之起始程序的文本宣言之下,第一个程序块之上。其语句形式为{document-style PlainDocument}。 | |
2.2.12 持久化数据 | |
Curl可以处理Http Cookies。特别是可以共享IE浏览器的 Cookies。所以,Curl可以对IE的Cookies进行读写。除了Cookies以外,Curl有独自的持久化数据功能。使用持久化数据可以在本地系统存取数据。持久化数据被存在本地系统的<user-name>/curl-client-data/persistent-storage目录下。文件名是自动生成的。可以持久化的数据类型包括基本类型、数量、字符串、哈希表、日期等等,List 2例示了日期的读入读出。其处理顺序为:首先应用程序(applet)之起始程序的文本宣言之下定义Repository;然后在任意地方使用{get-persistent-data <key>}读取持久化数据,使用{set-persistent-data <key>, <value>}和{commit-persistent-data}保存持久化数据。 使用持久化数据可以在本地保存上一次启动程序时所产生的数据或结束时的状态,这样,下次启动以后可以再次读入数据,进行处理,从而再现上次的状态。持久化数据也可以解决多个应用程序(applet)之间的数据共享问题。 | |
List 2 | |
| |
2.2.13 数量和单位 | |
Curl可以表示将数值和测量单位连成一体的数量型数据。比如说3cm、0.7gram以及2(m/s^2)这样的数据。编译器可以分辨这样的数量数据并进行处理。比如说可以进行这样的运算 3cm + 10m。通过使用数量型数据,不仅使得代码变得容易读懂,而且,使得打印表格时的位置调整及尺寸指定也变得更加容易。 | |
2.2.14 打印 | |
Curl提供打印用的函数{print-graphic <g>}。这个函数可以指定页面的单复,标题,页数,打印日期,伸缩等功能,对报表的设计和打印有很大作用。 | |
2.2.15 文件的输入输出 | |
Curl有远程和本地两种文件路径机能。可以使用File和Directory类的方法对文件夹和文件的属性进行操作以及输入和输出。另外,通过read-open和write-open函数和TextInputStream/TextOutputStream等类的相配合也可以进行文件输入和输出。文件的读取除了通常的同期读取以外还有非同期读取。值得注意的是,访问本地文件要受安全性制约的限制。 | |
2.2.16 其它 | |
Curl提供了丰富的表现手段和细致的API,这里介绍的只是基础中的基础,冰山上的一角。详细的内容请参考在线文档和参考文献中的资料。 这里补充一下,Curl的变量声明要使用{let var1:int=1, var2:double=1.2},变量代入要使用{set var1=2, var2=2.4}。let和set可以对复数个变量进行操作。还有,Curl没有像Java/C/C++/C#的int-var++表现形式,取而代之的有{inc int-var}{dec int-var}。当然,下面这样的表现形式也可以:{set int-var=int-var + 1}。 |