TKCB 发表于 2018-2-22 17:30:56

【AS3新手教程】——第6章 一切数据皆有类型

本帖最后由 TKCB 于 2018-11-26 11:54 编辑

第6章 一切数据皆有类型
前面的变量、常量、trace()这几个的组合使用,不知道熟悉了吗?如果不熟悉,建议还是多熟悉一下再来阅读此章节。对于新手,大家不知道有没有这种感觉,很多东西不是很明白,但是暂时知道如何使用。比如var是一个关键字,关键字是什么,还有什么其他什么关键字吗?trace()是一个函数,函数是什么?其实大家不要太在意这种感觉,举个例子。大家都知道学车,但又有几个人对于车的结构,发动机的原理、底盘的设计等等知道呢?所以这些概念不知道就不知道吧,后面会讲解到的,暂时不需要过多了解,因为一口吃个大胖子会跌倒的。继续学习吧!一点点来,别着急。下面我们说说ActionScript中几个常用的数据类型,以及基本的使用。

下载:本章的Flash练习文件
一、变量和数据类型(钥匙的故事)再次说说小量的故事吧,其实在前面的故事中还漏说了一个重要的钥匙改革制度,钥匙的多种类型。前面章节我们说过游戏中有黄钥匙、蓝钥匙、红钥匙等等。小量那么聪明,怎么可能不知道给钥匙分类型呢(当然名字也重要)? 他很聪明,将钥匙分为了六种颜色(普通色、红色、黄色、紫色、蓝色、绿色),红黄紫蓝绿代表的是最基础的五种库房类型,虽然颜色有千万种但是太多了反而不好区分,所以五种就够了。普通色作为五种基础类型之外的所有库房钥匙的颜色,但是他又很聪明,将普通色钥匙分为很多形状,不同的形状代表不同的类型。是不是感觉我们小量很聪明呢,一个庞大的库房钥匙都可以整出这么多花样,真的妙不可言。那么聪明的我们肯定就联想到了,在程序中变量的数据类型就对应了不同的钥匙种类。在我们ActionScript语言中,有5种基础数据类型,和无数的复杂数据类型(大家不要被无数吓到,其实常用的也就几十个而已,我们会慢慢学习的)。

二、5种常见的基础数据类型在ActionScript中有5种常见的基础数据类型,他们分别是:Number(浮点数)、int(整数)、uint(正整数)、String(文字,也叫字符串)、Boolean(布尔值)。新手要注意的是,这几种类型的英文名字的大小写都是固定的,也就是我上面写的那样,因为这是强制规定的。还有,或许你们会对Boolean(布尔值),有点看不懂,不要紧,下面慢慢解释给你们听。
1. 数字:Number、int、uint这三个都是数字,所以放一起来说吧!在ActionScript中有三种数据类型表示数字,分别是Number、int、uint。Number用来表示浮点数,也就是任意的整数、小数、负数。int用来表示整数,uint用来表示正整数。这三个数据数据类型,相信上过小学的人都可以理解,那我们说下为什么要有三个数据类型,而不是一个数字类型。举个例子,有两个篮子,一个是鸡蛋篮子,一个是米篮子,那肯定装鸡蛋用鸡蛋篮子,装米用米篮子更合适,因为鸡蛋篮子有缝隙会把个头小的米掉落出去。在程序中非常注重的是效率,好的程序员会在不同的需要场合使用不同的数据类型,所以我们才有了三种数据类型的区分。(题外话,其实在Java、C等语言中还有更多的数字的类型,更加复杂)
*专业知识1:既然这三个是数字类型,那有没有大小的限制呢?有的!Number(非常大,几百位,具体不说了,说了也没必要记住它)、int(约为负21亿到正21亿)、uint(42亿)。
*专业知识2:在ActionScript中,小数的计算会出现轻微误差(实际上Java、C等语言也会有这个问题),所以如果在Flash进行数值的精确计算的时候要稍微注意下。解决办法一般是将要计算的数字乘以一定位数的10,然后等正常计算完成之后,再除以相同位数的10。其实过于大的整数计算也会出现误差的,哪有好办法吗?有的请看:http://www.11ria.com/forum.php?mod=viewthread&tid=35
2. 字符串:String首先我们说下为什么叫做字符串,而不是文字呢。字符串是程序中的专业术语,程序中文字是以一个字符为单位进行组成的(比如: T也是一个字符,中国是两个字符),两个字符以上就形成了文字被串起来的形式,于是叫做字符串。字符串包括文字(英语、汉语、德意、日语等等)、数字(阿拉伯数字)、标点符号、特殊符号,还有就是程序中会用到的一些特殊字符,比如:回车符 \r、换行符 \n。我们来看一看在AS中字符串是如何声明(定义)的。 var 变量名 : String = "文字";      // 方式1,我一般优先使用双引号这种方式
var 变量名 : String = '文字';         // 方式2
结合之前的知识,是不是很熟悉呢,感觉就是比数字多了单引号(')和双引号("),对的就是一样的。
*专业知识:单引号(')和双引号(")在使用中有一些细微差异,如果文字中包含回车符 \r则单引号(')会把\r当做普通的斜杠+r字母处理,而双引号(")会支持\r表示回车。(试试用trace输出两个不同引号的字符串:TK\rCB)。
*3. 字符编码(专业知识)本来不想说这个的,但是又怕后面会经常提及字符编码,大家又一点不知道。记得一开始我学程序的时候,总是对编码(ASCII、Unicode、UTF-8)很迷糊,后来渐渐接触了,也阅读了一些编码的介绍文章,才对字符编码算是完全了解了。
3.1. 小故事先说一个大家都知道的场景,在战争的时候,指挥部和下面进行了一封秘密的通信。不料的是被敌人截获了信息内容,结果敌人看到的全是一堆乱七八糟的英文字母,根本拼凑不到一起,不是正确的单词。其实很简单因为大家都会将文字打乱,比如A代表的实际是C,B代表的实际是U,自己内部人掌握了正确的对应表,所以不怕敌人截获信息。
3.2. 计算机中数字与文字、数字、字符的关系(字符编码)在计算机内部每一个文字(字符)都是以数字编码进行存储,给所有的文字编号0=X,1=X……456=X,这样形式存储数据的。简单来说就是个每个字母、数字、汉字、符号等等都设定好对应的数字,请记住一点,电脑最终记住的只能是数字,是数字,是数字。而之所以你看起来电脑可以记住那么多信息,就是因为给数字编号对应了文字、符号、数字这些,通过这些电脑就记住了一切了。可能新手有疑惑,那些图片,视频,音乐都不是文字、数字、符号这些呀!!!其实图片是由无数个点组成,每个点有颜色值,颜色值又由红绿蓝组成,红绿蓝每个颜色都对应0-255个数字,这三个三原色根据配比多少组成了千万种颜色。(不懂三原色的可以百度,光的三原色和色彩的三原色不同的)而这种给每一个文字(字符)编号的形式,叫做字符编码。
3.3. 进化吧,字符编码其实编码有很多种,那为什么有那么多编码呢?因为刚开始编码只有128个(ASCII),美国人发明的,26个英文字母+10个阿拉伯数字+标点符号+键盘的一些按键+特殊作用的字符(比如:回车、换行、制表……),美国人觉得这128个字符编码可以表示一切了。美国发明计算机之后,计算机进入其他国家,其他国家发现字符编码128个,明显不够用,我们国家的文字也要在电脑中显示,我们要自己重新给所有字符编码,于是日本、中国、欧洲等等都有了自己的字符编码。刚开始计算机都是独立的,那每一个国家有自己的标准无所谓,一但有了U盘、互联网,我们的计算机的数据要相互交换的时候,就会发现,我们的字符编码不一样,那我国家计算机的东西到你国家计算机里面就乱套了。于是又搞了一个全球所有国家通用的字符编码标准(Unicode、UTF-8等)。不知道说了这么多你对编码有没有一点概念呢?
更多字符编码相关的知识,请看:· 彻底理解【字符编码】· 字符编码的概念(UTF-8、UTF-16、UTF-32都是什么鬼)
4. 布尔值:BooleanBoolean(布尔值)是程序中专用的,但是它很简单,认真学习,很快就会理解它。现实生活中,经常我们会碰到两种情况。如果今天下雨,我就呆在家,如果今天不下雨,我就出门踢球。那在程序中如果表示这种情况呢,你可能会想到用数字,如果是1表示下雨,如果是2表示不下雨(或者用文字也可以)。但是无论是用文字,还是用数字其实都不太合适(因为每个人都可能有自己的两个状态,1和2,真和假,Yes和No),于是就有了Boolean,它只记录两个信息,一个是true(真),一个是false(假),其他都不记录,这样大家统一使用Boolean来处理这种常见的两个状态。我们可以把布尔值想做是一个开关,要么开(true),要么关(false)。我们来看一看在AS中Boolean是如何声明(定义)的。// 方式1,先创建布尔值的变量,但是不赋值(不赋值的Boolean的值默认为false)
var 变量名 : Boolean;
// 方式2,创建并赋值,为true,和String不同的是,true或者false都不需要引号
var 变量名 : Boolean = true;
我们在程序中经常用Boolean记录一些状态(比如:视频是否正在播放、是否在主页),以及作为条件判断的依据(比如:如果是true则执行代码A,否则执行代码B)。其实这五个数据类型都非常简单,都是一些常用的数据类型。

三、2种常见的复杂数据类型上面我们讲到了5种基础的常见的数据类型,下面我们再来说说2种常用到的复杂的数据类型。在ActionScript中有2种常见的复杂数据类型,他们分别是:Array(数组)、Object(对象)。通常对于复杂类型的定义就是,由多个基础数据类型的组成数据类型。
1. 数组:Array前面我们讲的那五个数据类型都表示单个数据,而数组(Array)就是一组数据。举个例子,世界有多少国家,你用程序变量写出来。这时候如果你用之前的文字数据类型(String)变量,那至少写一百多个变量。但是用数组,则只需要写一个,很方便。程序中的一切都是为了某个需要而存在的,所以我们当我们有需要一组数据的时候,数组这个数据类型就产生了。我们先来看看在AS中Array是如何声明(定义)的。// 方式1,先创建数组的变量,但是不赋值(不赋值的Array的值默认为null),可以trace试试
var 变量名 : Array;
// 方式2,创建空数组
var 变量名 : Array = [];
// 方式3,创建空数组
var 变量名 : Array = new Array();
// 方式4,创建数组,并设置数组长度为6
var 变量名 : Array = new Array( 6 );
// 方式5,使用中括号的方法创建数组并赋值
var 变量名 : Array = [ 1, 2, 3 ];
// 方式6,使用new的方法创建数组并赋值
var 变量名 : Array = new Array( "中国", "美国", "俄罗斯" );
在AS中数组是灵活的,你可以将任何想弄成一组的数据,用数组来存储。当然数组也可以存储数组。或许你一开始想不出来数组存储数组是什么情况,那么你应该用过Excel吧!表格可以简单理解为一组数组,通常用一个数组存储一组数组的情况,我们叫做一维数组。如果是更多次的数组嵌套,那称之为多维数组。那么如何获取和设置数组中的单个元素呢?我们需要知道数组的中变量数据的位置,就可以访问和设置了。// 创建一个数组
var countryArr : Array = ["中国", "美国", "俄罗斯" ];
trace( countryArr );
// 设置数组中第一个元素的值,我们将中国修改为“历史悠久的中国”,注意数组中,索引是从0开始
countryArr[ 0 ] = "历史悠久的中国";
trace( countryArr );
trace( countryArr );
trace( countryArr );
// 新加一个元素
countryArr[ 3 ] = "严谨的德国";    // 数组是从0开始的,而不是从1
trace( countryArr );
// 获取数组的长度
trace( countryArr.length );
试试用上面的方法修改其他两个国家,给他们分别加上修饰词,后续再对数组做更更加详细的介绍。
2. 对象:Object前面的数组是使用[]中括号的方法访问和设置元素的,那有没有一种办法就像绳子一样把变量串起来,使用变量名称访问数据呢?有的,那就是Object。我们先来看看在AS中Object是如何声明(定义)的。// 方式1,先创建Object的变量,但是不赋值(不赋值的Object的值默认为null),可以trace试试
var 变量名 : Object;
// 方式2,创建空Object
var 变量名 : Object = {};
// 方式3,创建空Object
var 变量名 : Object = new Object();
// 方式4,使用中括号的方法创建Object并赋值
var 变量名 : Object = { name:TKCB, age:26 };
从上面我们可以看出,Object是使用的变量名+数据的方式进行存储数据的,使用大括号(也叫做花括号)新建Object对象。那如何访问和设置这些数据呢?就像我们上面说的一样,使用设置的变量名即可。// 创建一个Object对象
var myInfo : Object = { name:TKCB, age:26 };
trace( myInfo.name );
trace( myInfo.age);
// 修改我的昵称为TK
myInfo.name = "TK";
trace( myInfo.name );
// 新加一个我的生日
myInfo.birthday = "1992-2-20";
trace( myInfo.birthday );再说一下Object的一个特点吧,其实Object也可以使用[]访问和设置数据。// 接着上面的代码
trace( myInfo[ "name" ] );
trace( myInfo[ "age"] );
trace( myInfo[ "birthday"] );
// 当然也可以使用[]进行设置数据
myInfo[ "birthday" ] = "1992年2月20";
trace( myInfo.birthday );
// 那么此刻你一定会问,既然两种方法都可以,统一一种不更好么?
// 其实[]这种方法是有特殊用途的,比如下面这种用法
var a : String = "name";
trace( myInfo[ a ] );
a = "age";
trace( myInfo[ a ] );
// 上面的用法是不是很神奇呢,现在不需要理解太深,只要记住有这种形式即可,因为用不到的东西最后只会忘记
试试自己写一些Object吧,我一直强调,多加练习代码!才能最快进步。

四、本章练习学习不仅是“看”,更多是要“练”!大家可以把自己的练习结果以代码、文件、截图等等任意形式回帖发布上来,相互学习。 1. 数字记录一切用前面所学到的变量、常量、数字类型(Number、int、uint)来记录你们家所有人的年龄,之后在计算平均数。 2. 周围人的名字用前面所学到的变量、常量、数字类型(String、Array)来记录你周围朋友家人的姓名,最后再使用length获取到一共记录了多少个名字。 3. 十个名人自我介绍用前面所学到的变量、常量、数字类型(String、Object)来记录十个名人的自我介绍。

五、总结数据类型其实非常重要,但是我们一定会记住它的,因为它太常用了。但请大家多多练习,记住这7种常见的数据类型,特别是5种基础数据类型更是一切程序的基础中的基础。本章练习希望大家认真完成,并发回帖,这样有助于自己记忆深刻。

TKCB问答编辑:能不能用一句话总结下数据类型是什么?TKCB:人天性决定了分类是必须的,所以数据便有了数据类型。(记得三傻大闹宝莱坞中有一个这样的桥段:教授:你怎么又回来了?兰彻:忘了点东西。教授:什么?兰彻:记录,分析,总结,整理的工具。讨论并解释知识。有图片的和没图片的,硬皮的,软装订的,护封的,没护封的,有前言,简介,目录,索引,用于人类大脑的启示,理解,改进,加强和教育,通过视觉实现,有时也用触觉。教授:你想说什么?兰彻:书,老师。我忘了我的书,能拿吗?教授:你干吗不说简单点?
不给“书”这样的东西一个分类,“书籍”,你觉得人类还可以正常交流吗?所以计算机这种比人还要笨、死板的东西,没有数据类型怎么成呢。)

TKCB 发表于 2018-2-22 17:31:09

1. 大家可以如果觉得哪里写的不够好(或者一些建议),可以随时提出,帖子的方便之处,就是可以随时更新!!!!
2. 如果有大家有什么讨论的,或者不懂得,可以留言进行交流。


返回总贴:【AS3新手教程】——Animate & Flash Action Script 3.0 编程教程

237460097@qq.co 发表于 2018-7-24 17:57:31

加油啊,希望大大能继续写下去#:)#:)

diazynez 发表于 2018-8-21 10:48:25

uint应该是非负整数吧~

TKCB 发表于 2018-8-22 09:13:53

diazynez 发表于 2018-8-21 10:48
uint应该是非负整数吧~

正整数就是非负整数。

diazynez 发表于 2018-8-22 12:31:53

TKCB 发表于 2018-8-22 09:13
正整数就是非负整数。

可以无视掉0的么……和数学在这种地方也有区别啊
页: [1]
查看完整版本: 【AS3新手教程】——第6章 一切数据皆有类型

感谢所有支持论坛的朋友:下面展示最新的5位赞助和充值的朋友……更多赞助和充值朋友的信息,请查看:永远的感谢名单

SGlW(66139)、 anghuo(841)、 whdsyes(255)、 longxia(60904)、 囫囵吞澡(58054)

下面展示总排行榜的前3名(T1-T3)和今年排行榜的前3名的朋友(C1-C3)……更多信息,请查看:总排行榜今年排行榜

T1. fhqu1462(969)、 T2. lwlpluto(14232)、 T3. 1367926921(962)  |  C1. anghuo(147)、 C2. fdisker(27945)、 C3. 囫囵吞澡(58054)