Dart

Dart系列-数据类型

2020-10-21  本文已影响0人  h2coder

周末学习了一下Dart语言,按照慕课网Flutter开发第一步-Dart编程语言入门教程进行学习,所以记录一下,感觉慕课网的老师辛苦做的视频教程,说得很清楚,有基础学起来很轻松也很快,本篇来学习dart的数据类型。

变量和常量

写程序,变量和常量可以说是代码的组成单元之一了。来看下Dart是怎么定义变量和常量的吧~

dart声明变量。

//先声明,但不赋值,则为null
var a;
print(a);
//后续赋值
a = 10;
print(a);

//重复赋值,类型可以不一致
a = "Hello Dart!";
print(a);

var b = 20;
//已经推断出类型,就不能赋值其他类型了
b = 'Hello';
print(b);
final c = 30;
//final修饰的变量,只能设置一次
//c = 50;

const d = 20;
//const修饰为常量,表示编译时常量,只能赋值一次
//d = 50;

数据类型-简介

任何语言,都会有数据类型,本篇来快速过一下Dart语言的数据类型~数据类型主要有Number、String、Bool、List、Map以及dynamic类型。

注意:在dart中,所有的类型都是对象,没有基础数据类型(自然没有装拆箱)。

数据类型-数值型

dart中,数值型数据类型有int和double,他们的父类是num类型。

//num类型为int和double的父类
num a = 10;
a = 20;
//所以num类型可以赋值整形或浮点型都可以
a = 20.5;

//但是如果确定了是子类类型,就不能了,int类型不能赋值浮点型
int b = 20;
//b = 20.5;

//由于浮点型包含整形,所以是可以赋值的
double c = 10.5;
c = 20;
print(c);

数值型的一些操作。

//加、减、乘、除、取余
print(b + c);
print(b - c);
print(b * c);
print(b / c);
print(b % c);
    
//dart中,还有取整运算,使用~/
//~/代表取整
int result = b ~/ c;
print(result);
//是否是数字
print(0.0 / 0.0);
    
//是否是偶数,是
print(b.isEven);
//是否是奇数,不是
print(b.isOdd);
    
//求绝对值
int e = -100;
print(e.abs());
    
double f = 10.5;
//四舍五入
print(f.round());
//向上取整
print(f.ceil());
//向下取整
print(f.floor());
    
//类型转换
print(f.toInt());
  
int d = 11;
print(d.toDouble());

数据类型-字符型

在dart中,字符串和字符都为String类型,没有char类型。

//普通声明
String str1 = 'Hello'; //双引号也可以""
print(str1);

//多行字符串,使用3个单引号
String str2 = '''Hello
            Dart''';
print(str2);

//存在转义字符
String str3 = 'Hello \n Dard';

//原始字符串,不进行转义,前面加r
str3 = r'Hello \n Dard';
print(str3);
//字符串拼接
String str4 = "Hello Dart";
print(str4 + 'New');

//重复复制字符串
//输出:Hello DartHello DartHello DartHello DartHello Dart
print(str4 * 5);

//比较字符串内容是否相等
print(str3 == str4);

//角标取出字符串中的字符
print(str4[0]);
//插值表达式
int a = 1;
int b = 2;

//将表达式嵌入到字符串中
print('a + b = ${a + b}');

//直接取值嵌入到字符串中
print('a = $a');
//取出字符串长度
print(str4.length);
//判断字符串是否为空
print(str4.isEmpty);
//判断字符串是否不为空
print(str4.isNotEmpty);
//判断字符串是否包含另外一个字符串
print(str4.contains('Hello'));
//截取字符串
print(str4.substring(0, 3));
//判断字符串是否以某个字符串开头
print(str4.startsWith('H'));

//判断字符串是否以某个字符串结尾
print(str4.endsWith('Dart'));
//取字符串在指定字符串中的角标位置
print(str4.indexOf('D'));
//从后面开始找
print(str4.lastIndexOf('t'));
//字符串转大写
print(str4.toUpperCase());
//字符串转小写
print(str4.toLowerCase());
//去除字符串前后空格
String str5 = ' Hello ';
print(str5.trim());
//只去除前面的空格
print(str5.trimLeft());
//只去除后面的空格
print(str5.trimRight());
String str6 = "wally,barry,rose";
//字符串分割
List<String> list = str6.split(',');
print(list);
//替换所有
print(str5.replaceAll('l', 'a'));
//替换第一个
print(str5.replaceFirst('l', 'a'));

数据类型-布尔型

布尔型,true或者false。

//布尔值,只有true和false
bool isTrue = true;
bool isFalse = false;
print('Hello'.isNotEmpty);

数据类型-列表List

存储数据的列表容器list。没有数组类型。

//声明列表
var list1 = [1, 2, 3, 4, 'Dart', true];
print(list1);

//也可以用new关键字
list1 = new List();
//获取数组中的元素
print(list1[0]);

//修改元素的值
list1[1] = 'Hello';
print(list1);
//不可变list
var list2 = const [1, 2, 3];
print(list2);
//不可变list不能修改其内容,编译会抛出异常
list2[0] = 100;
//获取一个list的长度
var list4 = ['Hello', 'Dart'];
print(list4.length);
//给list添加元素
list4.add('New');
print(list4);
//指定位置添加元素
list4.insert(1, 'love');
print(list4);
//移除某个元素
list4.remove('love');
print(list4);
//按角标移除元素
print(list4.removeAt(0));
//查找元素位置,找不到返回-1
print(list4.indexOf('Dart'));
//反向查找
print(list4.lastIndexOf('Hello'));
list4.sort();
print(list4);
//截取list,从第二个元素开始
print(list4.sublist(1));
//打乱
print(list4.shuffle());
//转换为键值对Map,会以list中的角标作为map的key,值作为map的value
print(list4.asMap());
//遍历
list4.forEach(print);

数据类型-键值对Map

Map键值对类型,开发也是非常常见的~

//声明并赋值Map
var map1 = {'first': 'dart', 1: true, true: 2};
//也可以用new关键字声明
map1 = new Map();
//按key取值
print(map1['first']);
print(map1[true]);
//修改map的值
map1[1] = false;
print(map1);
//不可变map
var map2 = const {1: 'Java', 2: 'Dart'};
print(map2);
//修改就会编译不过
map2[0] = 'Python';
//获取map的长度
var map = {'first': 'Dart', 'second': 'Java', 'third': 'Python'};
print(map.length);
//判断是否为空
print(map.isEmpty);
//判断是否不为空
print(map.isNotEmpty);
//获取全部key
print(map.keys);
//获取全部value
print(map.values);
//判断是否包含某个key和某个value
print(map.containsKey('first'));
print(map.containsValue('C'));
//移除某个元素
map.remove('third');
print(map);
//遍历,传入一个方法进行遍历
map.forEach(f);

void f(key, value) {
  print('key=$key, value=$value');
}

数据类型-特殊的dynamic

终于到我们的dynamic类型了,这种类型可以被任何类型赋值,其实说白了就是相当于Java的Object类型,dart中则为dynamic类型。

//var 这时候赋值给任何类型都可以
var a;
a = 10;
a = 'Dart';

//其实类型就是dynamic,就是动态的
dynamic b = 20;
b = "JavaScript";
//list的泛型中传入dynamic,就能存放任何类型
var list = new List<dynamic>();
list.add(1);
list.add('hello');
list.add(true);
print(list);

总结

本篇,我们学习了dart中的数据类型,以及他们的常用Api。下篇我们来学习dart中的运算符

上一篇下一篇

猜你喜欢

热点阅读