第一节 序言
Lpc的Object是由零个或更多一些的被一个或一个以上函数操纵
控制的变量组成的。在代码中函数排列的顺序是不影响Object的特
性,但是影响代码的可读性。当你写的那个Object被第一次调用时,
Driver将你写的代码装入内存。当每一个Object被调入内存时,所
有的变量是没有值的。create()这个函数被调用来初始化Object的
值。create()这个函数在Object装入内存后立即被调用。在你读本
文时可能对编程一无所知,你可能不知道什么是函数以及它是怎么
调用的;或许你有了一些编程的经验,你可能对一个新创建的Object
的函数相互调用过程是怎样开始感到迷惑。在这些困惑得到解决之
前,你更有必要了解的是这些函数操纵控制的到底是什么东西。所
以你最好先来读读这一章:Lpc的数据类型。可以这么说,几乎90%
的错误(包括丢失{}和())是由于错误的使用Lpc的数据类型。我认
为真正理解这一章能帮助你更容易的编程。
第二节 让计算机理解你
2.1 计算机语言
众所周知的计算机懂得的语言实际上由“0”和“1”组成的机器
码。计算机根本不懂得人类的自然语言,实际上它也不懂得我们使
用的高级语言,比如BASIC,C,C++,Pascal等等。这些高级语言
能让我们更容易的实现我们的想法。但是这些高级语言最终都要被
翻译成“0”和“1”组成的计算机语言。
有两种方法能把高级语言翻译成计算机语言:编译和解释。编译
类的在程序写完之后用一个编译器将其翻译成计算机语言。编译在
程序执行之前就完成了。解释类的翻译的过程在程序执行时进行。
由于解释类的语言程序是边执行边解释,所以一般都要比编译编译
执行的慢。
不管是哪种语言,他们最终都要被翻译成0和1。但是变量,那些
你存在内存里面的变量,却不可能只是0和1。
所以你必须有一种你
使用的那种编程语言里面的方法来告诉计算机这些0和1应该被当做
整数还是字符,或者是字符串,或者别的什么东西。这样就必须使
用到数据类型。
2.2 数据类型
一个简单的例子:你现在有了一个变量,你把它叫做‘x’并且
赋予它一个十进制整数值65。在Lpc你可以这样的语句来做这件事:
------
x = 65;
------
接着你可以做象下面这样的事:
-----
write(x + "\n");
y = x + 5;
-----
第一行把65和字母"a"输出到屏幕上
第二行把70这个值赋于变量y
对计算机来说有个问题:它不知道你所说的 x = 65;中的65什么意思.
你认为是65,但是计算机可能认为是:
00000000000000000000000001000001
但是,对计算机来说,字母'A'也是被当做:
00000000000000000000000001000001
所以,当你想让计算机明白 write( x + "\n" );, 它必须有一种方法
知道你想看到的是65而不是'A'.
计算机就是通过数据类型来区分65和'A'. 一种数据类型简单的说就
是在内存的某处, 那里代表了或者说指向某个给定的变量, 这些内存
储存的数据是什么类型的. 每个LPC的变量都必须有它对应的变量类型.
在上面给的例子, 本应在那些代码之前有下面一行:
-----
int x;
----
这一行告诉Driver x应该指向什么类型的值, 它应该被当做数据类型'int'
来使用. 'int' 是一个32位的整数. 到这里, 你应该有数据类型的基本
印象, 以及为什么必须有数据类型. 他们可以让Driver知道计算机存在
内存里面的'0'和'1'到底是什么东西.
2.3 Lpc的数据类型
所有的LpMud的Driver都会有以下的数据类型:
void, int, string, object, mixed, int *, string *,
object *, mixed *
大多数的Driver都会有下面这些重要的数据类型:
float, mapping, float *, mapping *
有一些Driver同时还支持下面这些数据类型:
function, struct, class, char
特别的有MudOS支持的数据类型:(以v22pre8为例)
void, int, string, object, float, mapping, function,
class, mixed, int *, string *, object *, float *,
mapping *, function *, class *, mixed * 3.4 一些简单的数据类型
在Lpc入门里面将介绍以下的数据类型:
void, int, float, string, object, 以及mixed. 对于复杂的数据
类型比如: mapping, array, 以及一些不常用的类型比如: class,
function, 我将在Lpc进阶介绍. 这一节我们主要介绍三种数据类型:
int(整型), float(浮点数)和string(字符串).
一个int(整型)是一个整数, 比如1, 42, -18, 0, -10002938这些
都是整型. 在MudOS中一个整型是一个32位的整数, 有符号的整数.
在实际中int得到广泛的使用, 比如开始介绍变量中的wiz_level,
再比如生物的天赋, 年龄等都通常都是int(整型).
一个float(浮点数)是一个实数, 比如2.034, -102.3453, 0.0,
1132741034.33这些都是一个浮点数. 在MudOS中一个浮点数也是一个
32位的实数, 有符号的实数. float通常不常用.
在Object的数值性质中, 我们通常也就使用int和float, 甚至只用
int, 在变量的初始化中int和float自动被赋为0. 但是一般的Driver
比如MudOS不检查数值越界的情况, 还要注意的是这里的int和float
都是有符号的数, 这两点要注意.
string(字符串)是由一或更多的字符组成, 比如"a", "我是飞鸟!",
"42", "飞鸟15岁.", "I am Trill.", 这些都是字符串. 注意的是,
字符串都是被""括起来, 这样第一能区别象int(整型)42和string(字
符串)"42", 第二可以区别变量名(比如 room)和同名的字符串(比如
"room"). string类型的变量在初始化时, 如果没有显式的赋于一个
字符串比如: 空字符串"", 那将是0, 就是一空的指针.
作为最基本的数据类型int, float和string, 是一些复杂的数据
类型的基础. 对这些数据进行运算和操作的操作符, 将在后面介绍,
不过Lpc的操作符和一般的C/C++的操作符一致. 只是有一点, 就+
Lpc支持string和int或者float直接相加, 比如我们上面提到的:
write(x + "\n");
"\n"是一个字符, x是一个整型的变量, 在Lpc解释执行中, 自动将
x代表的数值转化成一个字符串, 然后把两个字符串接在一起.
当你在编程中使用一个变量, 你必须首先让Driver知道这个变量
代表什么样的数据类型. 这个过程叫做变量声明. 这必须在一个函
数或者一个Object的开始部分进行变量声明. 怎么做呢阿? 就是把
数据类型的名字放在你所要用的变量名前面, 举个例子:
-----
void add_x_and_y()
{
int x;
int y;
x = 2;
y = x + x * x;
}
----
上面就是一个完整的函数. 函数名就是add_x_and_y(). 在这个函数中
一开始声明落两个变量x, y都是int.
下面介绍MudOS支持的数据类型:
int
一个整数(32位).
float
一个浮点数(32位).
string
无限长的字符串.
object
指向一个对象的指针.
mapping
一个关系型数组.
function
一种特殊的指针, 指向(object, 函数名)这样一个组合.
arrays
数组的声明采用使用 '*' 跟在一种基本的类型.
void
这种类型对变量没有任何用处, 只对函数有用. 它表明这个函数
不返回任何值.
mixed
这是一种特殊的数据类型, 可以指向任何的数据类型. 如果一个
变量被声明成mixed, 那么Driver不会对它做任何检查.
class
自定义的数据类型, 类似C的struct而和C++和class不一样.
一上是MudOS支持的数据类型.
小结:
对一个变量, Driver需要知道存在计算机内存中的'0'和'1'到底
指的什么东西, 这样我们引入落数据类型. 我们学习3种简单的数据
类型, 同时了解了MudOS支持的各种数据类型. 对于各种操作符, 不
同数据类型有各自不同的操作符, 比如你让 "飞鸟"/"trill", 那
Driver一定会返回一个错误的. 大多数数的操作符和C/C++的一样,
只是+ 还支持字符串和数字相加.
尊重作者 转载请注明出处52mud.com