3、dart 语言学习 内置类型

127 阅读5分钟

内置类型

Numbers (int, double)

int

整数值;长度不超过 64 位,具体取值范围 依赖于不同的平台。在 DartVM 上其取值位于 -263 至 263 - 1 之间。在 Web 上,整型数值代表着 JavaScript 的数字(64 位无小数浮点型),其允许的取值范围在 -253 至 253 - 1 之间。

int a=12;
var b=12;
///如果使用时来强类型定义一个带小数的类型,那么会报错
int c=1.2; //error A value of type 'double' can't be assigned to a variable of type 'int'
//如果用弱类型定义,则不会报错
var c=1.2

double

64 位的双精度浮点数字,且符合 IEEE 754 标准。

/// 定义double 的时候,定义整数,则不会报错
double a=12;
///整型字面量将会在必要的时候自动转换成浮点数字面量:

注意:在 Dart 2.1 之前,在浮点数上下文中使用整数字面量是错误的。

开发中遇到的问题:

1、数字怎么转换成字符串类型?

2、数字怎么保留两位小数呢?

Strings (String)

Dart 字符串(String 对象)包含了 UTF-16 编码的字符序列。可以使用单引号或者双引号来创建字符串,

字符串字面量是一个编译时常量,只要是编译时常量 (null、数字、字符串、布尔) 都可以作为字符串字面量的插值表达式:

单引号

var s1 = 'Single quotes work well for string literals.';
var s2 = "Double quotes work just as well.";

双引号

var s4 = "It's even easier to use the other delimiter.";

多行字符串

///三个单引号
var s1 = '''
You can create
multi-line strings like this one.
''';
///三个双引号
var s2 = """This is also a
multi-line string.""";

查找&替换

contains 、startsWith、endsWith、indexOf |replaceAll

var a = 'web site ducafecat.tech';
print(a.contains('ducafecat'));
print(a.startsWith('web'));
print(a.endsWith('tech'));
print(a.indexOf('site'));

//替换
print('hello word word!'.replaceAll('word', 'ducafecat'));

截取&分割

substring 这个和js的用法一样, 字符串转数组 split('')

print(a.substring(0,5));
var b = a.split(' ');
print(b.length);
print(b[0]);

大小写转换

toLowerCase() 和toUpperCase()

print(a.toLowerCase());
print(a.toUpperCase());

转义字符串

var s3 = 'It's easy to escape the string delimiter.';
/// 不做任何处理的字符串
var s = r'In a raw string, not even \n gets special treatment.';
// 代码中文解释
var s = r'在 raw 字符串中,转义字符串 \n 会直接输出 “\n” 而不是转义为换行。';

表达式

使用插值表达式${} ,如果表达式是一个标识符,可以省略掉 {}。如果表达式的结果为一个对象,则 Dart 会调用该对象的 toString 方法来获取一个字符串

var hello="hello";
var world="dart";
print('我在学dart, $hello  $world')
  
print('我在学dart '+hello+' '+world);

var n10=10;
print(n10.toString())
print('${n10.toString()}')

开发中遇到的问题:

1、字符串数字怎么转换int ?

2、字符串数字怎么转换double?

Booleans (bool)

概念

Dart 使用 bool 关键字表示布尔类型,布尔类型只有两个对象 true 和 false,两者都是编译时常量。

Dart 的类型安全不允许你使用类似 if (nonbooleanValue) 或者 assert (nonbooleanValue) 这样的代码检查布尔值。相反,你应该总是显示地检查布尔值。

//js
var a=10;
if(a){
  
}
//在dart 中会报错

// 检查是否是空字符串.
var fullName = '';
assert(fullName.isEmpty);

// 判断.
var hitPoints = 0;
assert(hitPoints <= 0);

// 检查是否是空.
var unicorn;
assert(unicorn == null);

// 检查非数字.
var iMeantToDoThis = 0 / 0;
assert(iMeantToDoThis.isNaN);

Lists (也被称为 arrays)

概念

数组 (Array) 是几乎所有编程语言中最常见的集合类型,在 Dart 中数组由 List 对象表示。通常称之为 List。Dart 中的列表字面量是由逗号分隔的一串表达式或值并以方括号 ([]) 包裹而组成的。

var list = [1, 2, 3];
var list = ['Car','Boat','Plane'];

List 的下标索引从 0 开始,第一个元素的下标为 0,最后一个元素的下标为 list.length - 1。你可以像 JavaScript 中的用法那样获取 Dart 中 List 的长度以及元素:

var list = [1, 2, 3];
assert(list.length == 3);
assert(list[1] == 2);

list[1] = 1;
assert(list[1] == 1);

Dart 在 2.3 引入了 扩展操作符(...)和 空感知扩展操作符(...?),它们提供了一种将多个元素插入集合的简洁方法。

例如,你可以使用扩展操作符(...)将一个 List 中的所有元素插入到另一个 List 中:

var list = [1, 2, 3];
var list2 = [0, ...list];
assert(list2.length == 4);

如果扩展操作符右边可能为 null ,你可以使用 null-aware 扩展操作符(...?)来避免产生异常:

var list2 = [0, ...?list];
assert(list2.length == 1);

属性

名称说明
isEmpty是否为空
isNotEmpty是否不为空
first第一个对象
last最后一个对象
length个数
reversed反转

方法

名称说明
add添加
addAll添加多个
insert插入
insertAll插入多个
indexOf查询
indexWhere按条件查询
remove删除
removeAt按位置删除
fillRange按区间填充
getRange按区间获取
shuffle随机变换顺序
sort排序
sublist创建子

add | addAll 插入

add | addAll

var fruits = ['apples', 'oranges'];
fruits.add("banana");
print(fruits);

var subject=['js','java'];

//fruits+subject ?

remove 删除

remove | removeAt | removeLast | removeRange

var fruits = ['apples', 'oranges'];
fruits.add("banana");
print(fruits);

var subject=['js','java'];
subject.addAll(fruits);


///删除
subject.remove("java");

//按索引删除
subject.removeAt(1);

//删除最后一个
subject.removeLast();

indexOf 查找下标

indexOf()

var fruits = ['apples', 'oranges'];

// Access a list item by index.
assert(fruits[0] == 'apples');

// Find an item in a list.
assert(fruits.indexOf('apples') == 0);

高级用法

///在构建集合时,可以使用条件判断 (if) 和循环 (for)。
var promoActive=true;
var nav = ['Home', 'Furniture', 'Plants', if (promoActive) 'Outlet'];

///下面是使用 集合中的 for 将列表中的元素修改后添加到另一个列表中的示例:
var listOfInts = [1, 2, 3];
var listOfStrings = ['#0', for (var i in listOfInts) '#$i'];
assert(listOfStrings[1] == '#1');

Sets (Set)

概念

在 Dart 中,set 是一个无序的,元素唯一的集合。因为一个 set 是无序的,所以无法通过下标(位置)获取 set 中的元素。

// Create an empty set of strings.
var ingredients = <String>{};

// Add new items to it.
ingredients.addAll(['gold', 'titanium', 'xenon']);
print(ingredients.length == 3);

// Adding a duplicate item has no effect.
ingredients.add('gold');
print(ingredients.length == 3);

// Remove an item from a set.
ingredients.remove('gold');
print(ingredients.length == 2);

// You can also create sets using
// one of the constructors.
var atomicNumbers = Set.from([79, 22, 54]);
  print(ingredients);

方法

名称说明
addAll添加
contains查询单个
containsAll查询多个
difference集合不同
intersection交集
union联合
lookup按对象查询到返回对象
remove删除单个
removeAll删除多个
clear清空
firstWhere按条件正向查询
lastWhere按条件反向查询
removeWhere按条件删除
retainAll只保留几个
retainWhere按条件只保留几个

add 新增

remove 移除

contains containsAll 来检查一个或多个元素是否在 set 中

Maps (Map)

概念

map 是一个无序的 key-value (键值对)集合,就是大家熟知的 dictionary 或者 hash。 map 将 kay 与 value 关联,以便于检索。和 JavaScript 不同,Dart 对象不是 map。

//定义map
//1 、强制类型定义
Map map= Map<String,String>();
map["name"]="张三";
var map1={};

map["age"]=20; //。报错,类型不匹配

//2、弱类型定义
Map map= Map();

  

基本属性

名称说明
isEmpty是否为空
isNotEmpty是否不为空
keyskey 集合
valuesvalues 集合
length个数
entries加工数据入口

方法

名称说明
addAll添加
addEntries从入口添加
containsKey按 key 查询,返回true|false
containsValue按 value 查询返回true|false
clear清空
remove删除某个
removeWhere按条件删除
update更新某个
updateAll按条件更新

addAll

var b = new Map<String, String>();

b.addAll({'first': 'java', 'second': 'python'});

addEntries

var b = new Map<String, String>();
b.addEntries(a.entries);

containsKey

var cb = new Map<String, String>();

cb.addAll({'first': 'java', 'second': 'python'});

print(cb.containsKey('first'));

  var cb = new Map<String, String>();

cb.addAll({'first': 'java', 'second': 'python'});

print(cb.containsValue('java'));//true

clear

 var cb = new Map<String, String>();

cb.addAll({'first': 'java', 'second': 'python'});

print(cb);
cb.clear();
print(cb); //{}

remove

 var cb = new Map<String, String>();

cb.addAll({'first': 'java', 'second': 'python'});

print(cb);
cb.remove('first')
print(cb); //{second: python}

removeWhere

 var cb = new Map<String, String>();

cb.addAll({'first': 'java', 'second': 'python'});
cb.removeWhere((key,val) => key == 'java');

print(cb)  //{second: python}

update

 var cb = new Map<String, String>();

cb.addAll({'first': 'java', 'second': 'python'});
cb.update('first', (val) => 'first0001');
print(cb) //{second: first0001}

updateAll

var a=Map();

a.updateAll((key, val) => "---$val---");

Runes (常用于在 Characters API 中进行字符替换)

Runes 对象是一个 32位 字符对象,用来表示一个字。
这样设计也是考虑兼容 UTF-16 四个字节的情况。

Symbols (Symbol)

The value null (Null)