Dart语言01-基础

一、安装

1、下载flutter,配置dart

因为后期使用flutter进行开发,flutter包含dart

下载地址:

https://flutter.dev/docs/development/tools/sdk/releases#windows

flutter官网:

https://flutterchina.club/get-started/install/

最后执行flutter doctor命令:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uNIikrBN-1628145530677)(image/01.png)]

为了能使用flutter中的dart还需要配置dart的环境变量

2、vscode

在vscode中安装插件,dart(代码提示)和code runner(运行.dart文件)

写好代码后,右击“run code”

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5s3BNOT7-1628145530679)(image/02.png)]

二、dart基础

1、入口方法main

有两种定义方式:

main(){
	print("hello word!");
}

无返回值:

void main(){
  print("hello word!");
}

2、注释

//注释11111
///注释2222
/**
 * 注释33333
 */
void main() {
  print("hello word!");
}

3、变量

dart是一个强大的脚本语言,可以不预先定义变量类型,自动会进行类型推断

dart中定义变量可以通过var关键字、也可以通过类型来申明变量

注意:var后就不要写类型,写了类型 就不写var

void main() {
  var str = "hell";
  print(str);

  String a = "word";
  print(a);

  int num = 123;
  print(num);
}

命名规则:

  1. 变量名称必须由数字、字母、下划线和美元符($)组成。
  2. 注意:标识符开头不能是数字
  3. 标识符不能是保留字和关键字
  4. 变量的名字是区分大小写的
  5. 标识符(变量名称)一定要见名思意。变量名称建议用名次,方法名称建议用动词

4、常量(final和const修饰符)

const值不变,一开始就得赋值

final可以开始不赋值,只能赋一次;而final不仅有const的编译时的特性,最重要的它是运行时常量,并且final时惰性初始化,即在运行时第一次使用前才初始化

void main() {
  const PI = 3.1415926;
  // PI = 111; //不可以被修改(错误写法)
  print(PI);

  final P = 3.1415926;
  // P = 111; //不可以被修改(错误写法)
  print(P);

  //final:运行时常量,并且final时惰性初始化,即在运行时第一次使用前才初始化
  final time = new DateTime.now();

  //const不可以
  //const time2 = new DateTime.now();
  print(time);
}

5、数据类型

常用数据类型:

A)、Numbers(数量):int、double

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JULcr5Yo-1628145530680)(image/05.png)]

B)、Strings(字符串):String

三个单引号(’)或三个双引号("),可以实现换行

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LtvLrXqj-1628145530682)(image/03.png)]

字符串的拼接:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-X4uV2iVo-1628145530682)(image/04.png)]

C)、Booleans(布尔):bool

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UbXyJ4QQ-1628145530683)(image/06.png)]

D)、List(数组/集合)

​ 在dart中,数组是列表对象,所以大多数人只是成他们为列表

void main() {
  //第一种 定义List的方式
  var l1 = ["张三", 123, true];
  print(l1);
  print(l1.length);
  print(l1[0]);

  //第二种 定义List的方式,指定类型
  var l2 = <String>["ss", "ls"];
  print(l2);

  //第三种 定义List的方式 增加数据 通过【】创建的集合他的容量可以变化
  var l3 = [];
  l3.add("zs");
  l3.add("ls");
  print(l3);

  //第四种 定义List的方式
  // var l4 = new List();  在新版本的dart里面没法使用这个方法,但是在flutter 2.x中还是可以使用到

  var l5 = List.filled(2, ""); //创建一个固定长度的集合
  print(l5);
  l5[0] = "123";
  l5[1] = "abc";
  print(l5);

  var l6 = List<String>.filled(2, ""); //指定类型
}
E)、Maps(字典)

​ 通常来说,Map是一个键值对相关的对象,键和值可以是任何类型的对象。每个键只出现一次

void main() {
  //第一种 定义Map的方式
  Map person = {
    "name": "wxb",
    "age": 23,
    "work": ["ww", "aa"]
  };

  print(person);
  print(person["name"]);

  //第二种 定义Map的方式
  Map p = new Map();
  p["name"] = "ls";
  p["age"] = 34;
  print(p);
}
F)、is 关键词判断类型
void main() {
  var str = "111";

  if (str is String) {
    print("String");
  } else {
    print("其他");
  }
}

6、运算符

A)、算数运算符
void main() {
  int a = 13;
  int b = 5;

  print(a + b); //加
  print(a - b); //减
  print(a * b); //乘
  print(a / b); //除
  print(a % b); //取余
  print(a ~/ b); //取整
}
B)、关系运算符
void main() {
  int a = 13;
  int b = 5;

  print(a == b); //等于
  print(a != b); //不等于
  print(a > b); //大于
  print(a < b); //小于
  print(a >= b); //大于等于
  print(a <= b); //小于等于
}
C)、逻辑运算符
void main() {
  //! 取反
  bool flag = false;
  print(!flag);

  //&& 并且 :全部为true的话值为true,否则值为false
  bool a = true;
  bool b = false;

  print(a && b);

  // || 或者 :全部为false的话值为false,否则值为true
  bool c = true;
  bool d = false;

  print(c || d);
}
D)、赋值运算符
void main() {
  //1、基础赋值运算符 =  ??=

  int a = 10;
  print(a);

  //b??=23 表示如果b为空的话把23赋值给b

  int b = 10;
  b ??= 23;
  print(b);

  //2、 复合赋值运算符 += -=  *=  /=  %=  ~/=
}

7、条件表达式

void main() {
  //1、 if else  switch case
  bool flag = true;

  if (flag) {
    print("aa");
  } else {
    print("bb");
  }

  var sex = 's';

  switch (sex) {
    case "男":
      print("是男");
      break;
    case "女":
      print("是女");
      break;
    default:
      print("错误");
      break;
  }

  //2、 三目运算符
  var f = true;
  var str = f ? "wo shi true" : "wo shi false";
  print(str);

  //3、 ??运算符
  var a;
  var b = a ?? 20;  //判断a是否为空,为空的话将20赋值给b
  print(b);
}

8、类型转换

A)、Number与String类型之间的转换
//Number类型转换成String类型 toString()
  var myNumStr = 1234;
  var str1 = myNumStr.toString();
  print(str1);
B)、String类型转换成Number类型
void main() {
  //String类型转换成Number类型 int.parse() double.parse()
  String str = '123';
  var myNum = int.parse(str);
  print(myNum is int);

//处理异常
  String price = '';
  var myDouble;
  try {
      myDouble = double.parse(price);
      print(myDouble);
  } catch (err) {
      print(err);
      myDouble = 0;
      print(myDouble);
  }
}


C)、其他类型转换成bool类型
//	isEmpty:判断字符串是否为空
//string
var str = '';
if(str.isEmpty){
	print('为空');
}else{
	print('不为空');
}

//number
var myNum = 123;
if(myNum == 0){
  print('wei true');
}eles{
  print('wei false');
}

var myNum2;
if(myNum2 == null){
  print('wei kong')
}

var myNum3 = 0/0;
if(myNum3 isNaN){
  print('wei NaN');
}


9、循环

A)、for循环
void main() {
  for (var i = 0; i < 10; i++) {
    print(i);
  }
}
B)、while循环
void main() {
  var i = 1;
  while (i < 10) {
    print(i);
    i++;
  }
}
C)、do while循环
void main() {
  var i = 1;

  do {
    print(i);
    i++;
  } while (i < 10);
}


while和do while循环区别:

在第一次循环条件不成立的时候,while循环体中是不执行的,但是do while会执行一次(do while无论如何都会执行一次)

D)、break关键字
break语句功能:

​	1、在switch语句中使流程跳出switch解构

​	2、在循环语句中使流程跳出当前循环,遇到break 循环终止,后面代码也不会执行

强调:

​	1、如果在循环中已经执行了break语句,就不会执行循环体中位于break后的语句

​	2、在多层循环中,一个break语句只能向外跳出一层

break可以用在switch case中 ,也可以用在for 循环和 while循环中
E)、continue关键字
continue语句的功能:

​	1、只能在循环语句中使用,使本次循环结束,即跳过循环体下面尚未执行的语句,
		接着进行下面的代码

​	2、continue可以用在for循环以及while循环中,但是不建议在while中使用,
		不小心容易造成死循环

三、集合

1、List

A)、定义list
void main() {
  var l1 = ["zs", "ls"];
  print(l1);

  //指定类型
  var l2 = <String>["ss", "qq"];
  print(l2);

  //通过【】定义的list,可以通过add增加
  List l3 = <String>["aa", "qq"];
  print(l3);
  print(l3.length);
  l3.add("cc");
  print(l3.length);

  //通过List.filled()定义固定长度的list
  List l4 = List<String>.filled(2, "");
}

B)、常用属性
 1、length			长度​	
 2、reversed		翻转​
 3、isEmpty		 是否为空​	
 4、isNotEmpty   是否不为空
C)、常用方法
	1、add()							增加​	
	2、addAll(['aa','aa'])				增加数组​	
	3、indexOf		  					查找。传入具体值,得到索引值(查找不到返回-1)​	
	4、remove		   					删除。传入具体值​	
	5、removeAt							删除。传入索引值​	
	6、fillRange(start,end,value)		 修改​	
	7、insert(index,value)				指定位置插入​	
	8、insertAll(index,list)			指定位置插入list​	
	9、toList()							其他类型转换成List​	
	10、join()			 				List转换成字符串			
		eg: l1.join(",")   		会输出以“,”作为分割的元素字符串​	
	11、split()			  				字符串转化成List			
		eg: str.split(",")   	会以“,”作为字符串的分割符,转为list​	
	12、forEach							循环​	
	13、map								通过map修改集合元素
void main() {
  //map 方法修改集合中的数据
  List l1 = [1, 2, 3];

  var newList = l1.map((value) {
    return value * 2;
  });

  print(newList);
  print(newList.toList());
  //forEach循环
  l1.forEach((element) {
    print(element);
  });
}


2、Set

用set最主要的功能就是去除数组的重复内容

Set是没有顺序且不能重复的集合,所以不能通过索引去获取值

3、Map

映射是无序的键值对:

A)、常用属性
	1、keys		获取所有的key值​	
	2、values		获取所有的value值​	
	3、isEmpty		是否为空​	
	4、isNotEmpty	是否不为空
B)、常用方法
	1、remove(key)				删除指定key的数据
	​2、addAll( {...} )			合并映射   给映射内增加属性
	​3、containsValue(value)		查看映射内的值	返回true / false

4、where、any、every

A)、where
void main() {
  //where 返回满足条件的值
  List l1 = [1, 2, 3];

  var newList = l1.where((value) {
    return value > 2;
  });

  print(newList);
  print(newList.toList());
}
B)、any
void main() {
  //any 判断是否有满足条件的元素,如果有一个就返回true,如果都不满足就返回false
  List l1 = [1, 2, 3];

  var falg = l1.any((value) {
    return value > 2;
  });

  print(falg);
}


C)、every
void main() {
  //every 判断是否所有元素都满足条件,如果都满足返回ture,否则返回false
  List l1 = [1, 2, 3];

  var falg = l1.every((value) {
    return value > 2;
  });

  print(falg);
}

四、补充,版本升级

1、Null safety空安全

Null safety翻译成中文的意思是空安全
可以帮助开发者避免一些日常开发中很难被发现的错误,并且可以改善性能
Flutter 2.2.0 (2021年5月19日发布) 之后的版本都要求使用 null safety

? 可空类型
! 类型断言

2、类型断言

void main() {
  String? str = "abcd";

  str = null;
  print(str!.length); //类型断言:如果str不等于null;会打印出str的长度,如果等于null会抛出异常
}

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MbtkDgQu-1628242604039)(image/10.png)]

3、late 关键字

主要用于延迟初始化

class Person {
  late String name;
  late int age;

  void setPerson(String name, int age) {
    this.name = name;
    this.age = age;
  }

  String getPerson() {
    return "${this.name}---${this.age}";
  }
}

4、required关键词

之前是@required  是注解

现在已经作为内置修饰符

主要用于允许根据需要标记任何命名参数(函数或类),使得他们不为空
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值