《越空Dart教程》:第三节 第一个程序及数据类型
自我介绍
大家好,我是越空,一位货真价实的16岁开发者。由于最近我在学习Dart这门语言,所以我就想总结我所学到的知识,分享给大家,让大家和我一起学习这门语言,争取做到可以让大家真的也学习到东西,并且少走一些弯路,感谢大家的支持。
这是我发表的第一套教程,多多少少会有不足的地方,还请大家多多见谅,有什么问题或者建议,也可以发表评论和私信我,希望可以得到大家的支持,我会再接再厉的!
那么接下来,我们正式开始今天的学习吧!
这是一套系列课程,新来的读者请从第一节开始学习
在上一节我们已经安装并配置完成了开发环境,在这节课我们将着手开发第一个Dart程序。
本节课我们将讲第一个Dart程序、注释、变量和常量、数据类型、异常处理这五大部分。
第一部分:第一个Dart程序
首先我们进入在上节中安装的VS code。
点击左上角的文件按钮。
点击新建文件。
然后再点击文件》保存,或者直接点击保存的快捷键Ctrl+S。将文件的后缀名从txt换成dart(dart程序的后缀名),然后保存到一个文件夹中。
接下来,我们就可以讲解代码的知识了,动手开发第一个Dart程序。
大家应该都看过运动会,在长跑或者短跑等比赛项目中,参赛的运动员们都会整齐划一的站在起跑线上备跑,如果在赛道的中途任何地方加入都属于违规,取消比赛资格。
在我们编程的世界中也同样如此,在程序中有一个“起跑线”叫做main方法,它是整个程序的入口,所有程序都将从这里开始运行,如果在程序中没有加入main方法 程序的入口,那么就和在赛道中途加入的运动员一样都会违规 从而产生报错的各种问题。
接下来我们开始写一个最简单的带有main方法的Dart程序
这就是mian方法固定的格式,当然 我们也可以去掉代码中的void关键字,void是空的返回值,以后的章节会细讲。方法默认的返回值就是void,所以为了使代码变得更加简洁 去掉void关键字也可以正常运行 不会报错的。但是为了程序规范,还是建议加上。
接下来我们开始运行这段程序看看吧,右键点击Run Code运行代码。
下方是控制台 输出窗口,由于我们现在的dart程序是最简化的 还不具备任何的信息输出功能,接下来我们尝试添加一句输出语句 输出一点东西。
print方法就是dart中的输出语句,拥有非常强大的输出功能。
就这样,我们成功的打印输出了信息,当然 在print方法的引号中 想打印任何话 任何句子都是可以的。也可以打印多句。
例如。。
这里提醒一下,代码中的任何符号只能是英文的,如果有中文的标点符号程序就会报错 导致无法运行,比如在每一条语句后面的分号,比如括号,又或者是print语句中的引号等等。当然 在print引号里面 可以输出任何的符号 无论中文还是英文都是可以的。还有print方法中的引号可以是双引号也可以是单引号,都是可以的。
在print中还有另外一种多行打印的方法,就是三个引号括起来的信息,比如 还是打印上例中的信息,使用三引号的方式就是这样的,输出的结果相同。
第二部分:注释
在技术界一直流传着这样一句话:当我写这段代码的时候,只有上帝和我知道,现在,只有上帝知道。
意思就是说李白今天突发灵感 抒情写了一首诗,如果没有做标注,他几天后再看的时候就会这样说:这啥玩意啊,这玩意是我写的?啥意思来着,我当时想啥了呀。。
所以在程序中做注释是一个很好的习惯。
在dart中注释是这样的 使用双斜杠,双斜杠的后面就是要注释的内容,当然 三个斜杠也是可以的,四个,五个都可以。。。
下图中将介绍dart中注释和多行注释的使用方法。
第三部分:变量和常量
在研究变量和常量之前,我们先来解决一个问题,计算7的次方和立方,很简单,解决方案如下:
但是如果出题人捣乱,又让你计算8的次方和立方,好的,你照做了,然后他又让你计算9的 10的 11 12的…好的 你选择揍死他。
这样我们就能很明显的看出问题所在,每一次修改就要修改五处,五次修改下来一共要修改25个地方。是不是很麻烦,可不可以每次就修改一处呢?五次下来只修改五次就好了。当然可以,这就是我们变量和常量的概念。
变量,顾名思义 就是可以变化的量。
先引入一个小知识,
a=10;
///在编程语言中 会经常出现类似这种的式子
///在编程世界里,一个等于号代表赋值操作 是将右边的值赋值给左边的变量
///两个等于号才是判断是否两个值相等,才是数学中等于的意思
在dart中定义变量有两种方法,一种是不写类型 自动推断类型的定义,第二种是声明类型的定义方式。
就像这样,把原来需要修改五处的工作量简化到了一次,是不是很厉害,啥?你说那如果像上述说的 修改五个数值那不是也要修改五遍吗 能不能简化到一次就修改五个数值?
啊这…当然没问题呐,看好了
但是这种操作需要用到秘密武器for循环,不是本节的内容 ,知道即可,以后会细讲。
讲完变量了,那常量呢?
变量是不可变化的量,那常量当然就是不能变化的量了,使用方法如下,
接下来说下变量或常量的命名规则,可以由数字、字母、下划线、美元符号组成,当然 都是英文状态下的才可以 不支持中文的符号,需要注意的是 命名不能以数字作为开头。然后就是 命名是分大小写的 也就是变量a和变量A指的不是同一个值。命名最好是英文单词,变量或常量的命名用名词 方法的命名用动词。
第四部分:数据类型
在第三部分说了 在dart中定义变量或常量有两种方法,一种是不写类型 自动推断类型的定义,第二种是声明类型的定义方式。
在第三部分只讲了前者,在第四部分部分我们就来讲讲后者。
这部分我们会学习到num类型、以及num的子类型 int和double、String类型、bool类型、List、Set和Map这些常用类型的用法。
先说数字类型:num、int、double
文本 字符串类型String
布尔类型 bool类型
接下来是Dart里的数组 List类型
想象一个场景,你拿着钱出去买东西 设立一个List类型作为购物清单,就可以使用List的第一种定义方法。
List l1=['包包','笔记本电脑','智能手机'];
又或者 你拿着钱出去逛街 但是提前并不知道要买什么,看到什么好物之后再买。就可以使用第二种定义方法。
List l2=new List();
//增加一个成员
l2.add('衣服');
l2.add('裤子');
也可以事先指定一种成员类型的数据,比如说String类型,那么在这个List数组中就只能添加String类型的成员,添加其他类型的成员即会报错,操作如下,
List<String> l3=['一','二'];
或者 这样,
List<String> L3=new List<String>();
要创建一个常量的List类型,这样创建:
List l4=const[1,2,3];
如果要单独打印List类型中的一个成员,这样操作:
//初始化一个List类型变量
List l5=const['第一个成员','第二个成员','第三个成员'];
//[]内输入索引值,在dart中 数组的索引下标从0开始,所以[1]打印的是数组中的第二个成员
print(l5[1]);
接下来讲解一下:List里面常用的属性和方法
先说属性
/*
常用属性:
length 长度
reversed 翻转
isEmpty 是否为空
isNotEmpty 是否不为空
*/
看一下运行结果
然后说一下List类型常用的方法,
/*常用方法:
add 增加
addAll 拼接数组
indexOf 查找 传入具体值
remove 删除 传入具体值
removeAt 删除 传入索引值
fillRange 修改
insert(index,value); 指定位置插入
insertAll(index,list) 指定位置插入List
toList() 其他类型转换成List
join() List转换成字符串
split() 字符串转化成List
*/
操作代码如下,
输出结果,
讲完了List类型,然后讲解一下与List很接近的Set类型
除此之外,Set也和List一样 有add方法 用于新增成员。也可以如List一样事先指定类型去定义 规定集成中只能有统一的一种类型的成员。最后,Set中也有很多自己的属性和方法,感兴趣的大家可以去自行了解,因为用的不多,大多情况下都使用List类型,所以在这里不做讲解。
最后一个 映射类型 Map
再说一下,如何事先指定Map的key值和value值的类型,
Map<String,int> a={
'一加一等于几':2,
'二加二等于几':4,
};
}
常量的话,就这样,
var a=const<String,int>{
'一加一等于几':2,
'二加二等于几':4,
};
再说一下打印输出,如果想像List数组那般,
List a=[1,2,3];
print(a[1]);
打印单独的一个成员,在Map中是这样操作的,
Map person={
'姓名':'大明',
'岁数':'30',
'职业':['架构工程师','外卖员']
};
print('''
姓名:${person['姓名']}
年龄:${person['岁数']}
职业:${person['职业']}''');
运行结果,
为何与List不同,Map不可以使用索引值来进行打印?这里需要强调一下,Map与List不同 与Set相同的一点是 Map类型中的成员是无序的。
如同上面讲解List的步骤一样,接下来讲解一下:Map里面常用的属性和方法
先说属性
/*
常用属性:
keys 获取所有的key值
values 获取所有的value值
isEmpty 是否为空
isNotEmpty 是否不为空
*/
具体操作,
常用方法,
/*
常用方法:
remove(key) 删除指定key的数据
addAll({...}) 合并映射 给映射内增加属性
containsValue 查看映射内的值 返回true/false
*/
具体操作,
基本上 所有常用的数据类型 num、int、double、String、bool、List、Set、Map都讲解完了。包括List、Set、Map的基本的属性和方法。接下来再介绍五个List、Set、Map通用的方法。
/*
forEach 循环集成中的每一个成员 并执行参数方法体中的代码
map 循环集成中的每一个成员 并返回一个值.最终将每一轮返回的值弄成一个数组返回
where 循环集成中的每一个成员 并将符合条件的成员组成一个数组返回
any 遍历集成中的每一个成员 只要有一个满足条件的就返回true 没有则返回false
every 遍历集成中的每一个成员 所有成员都满足条件才返回true 否则 返回false
*/
首先说forEach方法,
map方法
where方法
any方法
every方法
五大常用的通用方法都讲解完了。在数据类型这里,最后再介绍一下Dart中的类型判断和类型转换。
先说类型判断,
最后讲一下类型转换,
第五部分:异常处理
最后来讲一下异常处理,try…catch。
在写程序的过程中总会遇到很多异常,比如在一款应用的登录页面,用户在输入密码的时候 输入了非法字符(例如一些奇怪的符号),可是后台代码中是不允许这种操作的,就会出现报错。要解决类似这种的问题,就需要用到我们接下来要学到的try…catch 异常处理。
如果发生了异常,就如上图所述。如 没有发生异常,也就是str变量的值不是空,那么,
就会如约而至的打印转换成功的数据,
结束
好了,今天的这篇技术教程就到这里了,一共讲了第一个Dart程序、注释、变量和常量、数据类型、异常处理五大部分。数据类型那里内容较多,可以慢慢消化。
这篇写了四千多字,还没有计入代码的字数,争取以后做的精简吧。
下节预告
讲解Dart中的算术运算符、关系运算符、逻辑运算符、赋值运算符、条件表达式。
说人话:下节讲解Dart中的运算符、表达式。
好了,这节就分享这么多了,我们下节再见,祝大家编程愉快!!