目录
学习语言的第一课Dart介绍:
Dart是由谷歌开发的计算机编程语言,它可以被用于web、服务器、移动应用 和物联网等领域的开发。Dart诞生于2011年,号称要取代JavaScript。但是过去的几年中一直不温不火。直到Flutter的出现现在被人们重新重视。要学Flutter的话我们必须首先得会Dart。
官网:https://dart.dev/
Dart环境搭建:
要在我们本地开发Dart程序的话首先需要安装Dart Sdk,。如果你只是想开发移动应用,则不需要使用 Dart SDK,只需 安装 Flutter 即可
Dart官方文档:https://dart.dev/get-dart
windows(推荐): http://www.gekorm.com/dart-windows/
Dart 开发工具:
Dart的开发工具有很多: IntelliJ IDEA 、 WebStorm、 Atom、Vscode等
第一行Dart代码:
main(){
print('Hello dart');
print('Hello dart1');
}
main()是Dart的入口方法,所有要执行的东西都要放在里面;
如果一个方法里只有一行代码,可以简写为:
main()=> print('Hello dart');
Dart中的注释
dart中有三种常见注释
示例:
1.单行注释:
单行注释以//开头, Dart编译器会忽略//和行尾之间的所有内容
//print('Hello dart')
2.多行注释
多行注释以 /* 开头,以 */ 结尾
/*
print('Hello dart1')
print('Hello dart')
*/
3.文档注释
文档注释是以 ///或 /** 开头的多行或单行注释, 在连续行上使用 /// 与多行文档注释具有相同的效果。可以通过dartdoc
命令导出文档。
/// Say something to dart
/// The string [what] is what you want to say.
sayWhat(String what) {
/*
* Say something
* */
print(what);
}
Dart 变量:
dart是一个强大的脚本类语言,可以不预先定义变量类型 ,会自动类型判断
dart中定义变量可以通过var关键字可以通过类型来申明变量
如:
var str='this is str';
String str='this is str';
int str=123;
注意: var 后就不要写类型 , 写了类型 不要var 两者都写 如:
var int a = 5; 或
var a =" ";
a = 123; 就会报错
Dart 常量:
即不可修改的参数,使用final 和 const修饰符均可声明常量,两者区别如下:
const值不变 一开始就得赋值
final 可以开始不赋值 只能赋一次 ; 而final不仅有const的编译时常量的特性,最重要的它是运行时常量,并且final是惰性初始化,即在运行时第一次使用前才初始化
如:
final a=new DateTime.now();
print(a); //2020-04-16 15:59:02.894372
若使用const:
const a=new DateTime.now(); //报错了
Dart的命名规则:
1、变量名称必须由数字、字母、下划线和美元符($)组成。
2.注意:标识符开头不能是数字
3.标识符不能是保留字和关键字。
4.变量的名字是区分大小写的如: age和Age是不同的变量。在实际的运用中,也建议,不要用一个单词大小写区分两个变量。
5、标识符(变量名称)一定要见名思意 :变量名称建议用名词,方法名称建议用动词
示例代码:
void main(){
var str1='2134214';
//var 2str='xxx'; //错误
// var if='124214'; //错误
//注意变量的名字是区分大小写的
var age=20;
var Age=30;
print(age);//输出20
print(Age);//输出30
}
Dart中支持的数据类型:
常用数据类型:
Numbers(数值):int,double
Strings(字符串):String
Booleans(布尔): bool
List(数组)
在Dart中,数组是列表对象,所以大多数人只是称它们为列表
Maps(字典)
通常来说,Map 是一个键值对相关的对象。 键和值可以是任何类型的对象。每个 键 只出现一次, 而一个值则可以出现多次
Set
用它最主要的功能就是去除数组重复内容,Set是没有顺序且不能重复的集合,所以不能通过索引去获取值.
项目中不常用的数据类型 (用不到):
Runes
Rune是UTF-32编码的字符串。它可以通过文字转换成符号表情或者代表特定的文字。
示例代码:
main() {
var clapping = '\u{1f44f}';
print(clapping);
print(clapping.codeUnits);
print(clapping.runes.toList());
Runes input = new Runes(
'\u2665 \u{1f605} \u{1f60e} \u{1f47b} \u{1f596} \u{1f44d}');
print(new String.fromCharCodes(input));
}
Symbols
Symbol对象表示在Dart程序中声明的运算符或标识符。您可能永远不需要使用符号,但它们对于按名称引用标识符的API非常有用,因为缩小会更改标识符名称而不会更改标识符符号。要获取标识符的符号,请使用符号文字,它只是#后跟标识符:在 Dart 中符号用 # 开头来表示,入门阶段不需要了解这东西,可能永远也用不上。有兴趣的同学可以自行查看相关文档。
Dart运算符:
Dart中的运算符和其他语言中的基本一致,就不一一举例了,有几个特殊的,强调一下:
算术运算符 + - * / ~/ (取整) %(取余)
关系运算符 == != > < >= <=
逻辑运算符 ! && ||
赋值运算符:
基础赋值运算符 = ??=(若为0,则赋值)
示例代码:
int a=10;
int b=3;
print(a);
int c=a+b; //从右向左赋值
//c??=23; 表示如果b为空的话把 23赋值给b
int c=6;
c??=23;
print(c);//输出结果:6
int d;
d??=23;
print(d);//输出结果:23
复合赋值运算符 += -= *= /= %= ~/=
示例代码:
var a=12;
a=a+10;
print(a);//输出结果:22
var b=13;
b+=10; //表示b=b+10
print(b);//输出结果:23
var c=4;
c*=3; //c=c*3;
print(c);//输出结果:12
条件表达式 if else switch case
if else 中,多个条件判断可以有else if 链接:
//判断一个人的成绩 如果大于60 显示及格 如果大于 70显示良好 如果大于90显示优秀
var score=56;
if(score>90){
print('优秀');
}else if(score>70){
print('良好');
}else if(score>=60){
print('及格');
}else{
print('不及格');
}
//输出结果:不及格
switch case中,每一个case都需要一个break关键字来结束,否则会继续向下执行.所有case条件都未满足的话,就会执行default关键字里的内容
var sex="女";
switch(sex){
case "男":
print('性别是男');
break;
case "女":
print('性别是女');
break;
default:
print('传入参数错误');
break;
}
三目运算符
可以看做是if ...else的简写
var falg=true;
var c;
if(falg){
c='我是true';
}else{
c="我是false";
}
print(c);
//可以简化为:
bool flag=false;
String c=flag?'我是true':'我是false';
print(c);
??运算符:
//若a未空,则把后面的10赋值给b,若a不为空则把a的值赋值给b
var a;
var b= a ?? 10;
print(b); //输出结果:10
//
var a=22;
var b= a ?? 10;
print(b);//输出结果:22
类型转换
1、Number与String类型之间的转换
示例代码:
// Number类型转换成String类型 toString()
// String类型转成Number类型 int.parse()
String str='123';
var myNum=int.parse(str);
print(myNum is int);//输出结果:true
String str='123.1';
var myNum=double.parse(str);
print(myNum is double);//输出结果:true
String price='12';
var myNum=double.parse(price);
print(myNum);//输出结果:12.0
print(myNum is double);//输出结果:true
var myNum=12;
var str=myNum.toString();
print(str is String);//输出结果:true
类型转化的时候,注意非空的判断,否则会报错,在使用的时候,也可以用try catch 捕获异常,防止程序闪退,例如:
报错代码:
String price='';
var myNum=double.parse(price);
print(myNum);
print(myNum is double);
使用try ...catch后正常输出:
// try ... catch
String price='';
try{
var myNum=double.parse(price);
print(myNum);
}catch(err){
print(0);
}
//输出结果:0
2、其他类型转换成Booleans类型
示例代码:
// isEmpty:判断字符串是否为空
var str='';
if(str.isEmpty){
print('str空');
}else{
print('str不为空');
}
//输出结果:str空
注意:isEmpty和null还是不一样的,例如:
var str=''";
print(str.isEmpty);//输出结果:true
print(str==null);//输出结果:false
若没有给str初始化,则在调用isEmpty方法时会报错
var myNum;
if(myNum==0){
print('0');
}else{
print('非0');
}
//输出结果:非0
var myNum;
if(myNum==null){
print('空');
}else{
print('非空');
}
//输出结果:空
数值型的变量,可以调用isNan方法,来判断是否为Nan值:
var myNum=0/0;
print(myNum);//输出结果:Nan
print(myNum.isNaN);//输出结果:true
Dart中的自增自减操作
++ -- 表示自增 自减 1, 在赋值运算里面 如果++ -- 写在前面 这时候先运算 再赋值,如果++ --写在后面 先赋值后运行运算.
示例代码:
var a=10;
a++; //a=a+1;
print(a);//输出结果:11
var a=10;
a--; //a=a-1;
print(a);//输出结果:9
//----- --在前和在后的区别
var a=10;
var b=a--;
print(a); //输出结果:9
print(b); //输出结果:10
var a=10;
var b=--a;
print(a); //输出结果:9
print(b); //输出结果:9
Dart中的循环语句及其简单应用
dart中的循环语句和其他语言基本一致,常见的有三种,for循环,while 循环,do...while循环,下面分别距离说明
1.for循环语法:
for (int i = 1; i<=100; i++) {
print(i);
}
2.for循环运行次序分析:
第一步,声明变量int i = 1;
第二步,判断i <=100
第三步,print(i);
第四步,i++
第五步 从第二步再来,直到判断为false
例如:计算5的阶乘 (1*2*3*4*5 n的阶乘1*2……*n)
var sum=1;
for(var i=1;i<=5;i++){
sum*=i;
}
print(sum);
循环顺序:
第一次:sum=1*1;
第二次:sum=1*1*2;
第三次: sum=1*1*3;
第四次: sum=1*1*3*4*5;
3.while,do...while循环:
语法格式
while(表达式/循环条件){
}
---------------------------------------
do{
语句/循环体
}while(表达式/循环条件);
注意:1、最后的分号不要忘记
2、循环条件中使用的变量需要经过初始化
3、循环体中,应有结束循环的条件,否则会造成死循环。
例如求1~100的和:
//while循环写法
int i=1;
var sum=0;
while(i<=100){
sum+=i;
i++;
}
print(sum);
//do...while 写法
int i=1;
var sum=0;
do{
sum+=i;
i++;
}while(i<=100);
print(sum);
4.while 和 do while的区别:
第一次循环条件不成立的情况下,while不会执行循环体里的代码,但是do...while会先执行一次循环体中的方法.
5.break和continue的使用方法及其区别
break语句功能:
1、在switch语句中使流程跳出switch结构。
2、在循环语句中使流程跳出当前循环,遇到break 循环终止,后面代码也不会执行
强调:
1、如果在循环中已经执行了break语句,就不会执行循环体中位于break后的语句。
2、在多层循环中,一个break语句只能向外跳出一层
break可以用在switch case中 也可以用在 for 循环和 while循环中
continue语句的功能:
【注】只能在循环语句中使用,使本次循环结束,即跳过循环体重下面尚未执行的语句,接着进行下次的是否执行循环的判断。
continue可以用在for循环以及 while循环中,但是不建议用在while循环中,不小心容易死循环
示例代码:
//如果i等于4的话跳过
for(var i=1;i<=10;i++){
if(i==4){
continue; /*跳过当前循环体 然后循环还会继续执行*/
}
print(i);
}
//输出结果:1,2,3,5,6,7,8,9,10
//如果 i等于4的话跳出循环
for(var i=1;i<=10;i++){
if(i==4){
break; /*跳出循环体*/
}
print(i);
}
//输出结果:1,2,3
多层循环的时候:
//break语句只能向外跳出一层
for(var i=0;i<3;i++){
print('外层---$i');
for(var j=0;j<3;j++){
if(j==1){
break;
}
print('里层$j');
}
}
输出结果:
外层---0
里层0
外层---1
里层0
外层---2
里层0
每次内层循环运行到1的时候就会跳出循环,但是外层会继续执行