DART概述
概念
Dart 是由谷歌开发的通用的编程语言,它常用于构建web、服务器、桌面和移动应用程序。
Dart是一种简洁、清晰、基于类的面向对象的语言,它是基于JavaScript的但是结构要比JavaScript要多。
Dart是一种面向对象的、类定义的、垃圾回收语言。它支持接口、mixin、类对象,具有化泛型、静态类型等。
- 在dart中,能够放在变量中的所有内容都是对象,每个对象都是一个类的实例。甚至于数字、函数和null值都是对象,并且所有对象都继承自Object类;
- Dart是强类型语言,但类型标识是可选的,因为Dart可以推断类型,所以可以直接用数据类型定义变量,但是也可以用var声明变量进行类型推断;
- 能够放在变量中的所有内容都是对象,所以如果一个变量没有初始化值,那它的默认值就为null;
- 在dart中,即使是函数也是对象,并且具有类型Function类型;
- 与Java不同,Dart没有关键字public、protected和private。如想设置私有变量或函数,则变量和函数名以下划线(_)开头;
- dart中,没有函数重载;
特性
1.Dart是AOT(Ahead Of Time)编译的,可编译成快速,可预测的本地代码。
2.Dart可以JIT(Just In Time)编译,开发周期快,为Flutter热重载提供基础。
3.Dart可以轻松创建60fps运行的流畅动画和转场。
4.Dart的声明式编程布局,易于阅读和可视化,不需要单独的声明式布局语言,如:XML,JSX。
5.Dart非常易于学习,具有静态和动态语言,编程人员都熟悉的特性。
Dart的内置库
包名 | 描述 |
---|---|
dart:asynv | 异步编程,提供Future,Stream类 |
dart:collection | 集合 |
dart:convert | 不同类型的字符编码解码 |
dart:core | Dart语言核心功能,内置类型 |
dart:html | 网页开发用到的库 |
dart:io | 文件读写,IO相关 |
dart:math | 数字常量以及函数,随机算法等 |
dart:svg | 事件和动画矢量图支持 |
变量
命名
在Dart语言当中,定义变量的方式是
dataType viriableName = Initial Valute
这里其实和Java是一样的,不仅如此连命名的方式也和Java相同,都是采用驼峰命名的方式。
声明
在声明的时候,除了基本数据类型之外,还有三种变量的声明: var
,dynamic
,Object
var:如果没有初始值的时候,var可以变成任意类型。
dynamic:动态任意类型,编译阶段不检查类型。
Object: 动态任意类型,在编译阶段检查类型。
和var的区别:
var如果有初始值,那么类型会被锁定。
void main(){
// a 的数据类型可以随意改变,这种类型就是 dynamic
var a ;
a = 10;
a = "dart";
// 这里我们使用 dynamic 声明
dynamic d = 10;
d = 'dart';
}
默认值
1.没有初始值的变量会自动获取一个默认值null。
2.一切皆为对象,对象的默认值是null。
私有变量
- 与Java不同,Dart没有关键字public、protected和private。如想设置私有变量或函数,则变量和函数名以下划线(_)开头
final和const
表示不可改变
const
变量是一个编译时常量,final
变量在第一次使用时被初始化
相同点:
- 声明的类型可以省略
- 初始化后不能再赋值
- 不能和var同时使用
不同点:
- 类级别常量,使用static const
- const可使用其他const 常量的值来初始化其值
- 使用const赋值声明,const可以省略
- 可以更改非final、非const变量的值。即使曾经具有const值
- const导致的不可变性是可以传递的
- 相同的const常量不会再内存中重复创建
- const需要是编译时常量
基本数据类型
8种基本数据类型:
Number
数值型里面有包含了int型和doubule两种类型,这两种和Java类似,其中int是整数型,double是64-bit双精度浮点数,这两种都是Number类型的子类。
void main() {
num a = 10; // 整形
a = 20.1; // 浮点型
print(a);// 20.1
int i = 10;
// i = 10.1; // 这个地方会报错,因为将 int 型的数据改为 double 型 向下转型
// i = int.parse('10.1'); // 字符串转换为int类型
i = 10.1.round();// 通过round()方法将double转换为int
print(i); // 10
double d = 20.1;
d = 20; // 这个地方不会报错,因为将 double 型的数据改为 int 型,向上转型
// 向上转型 : (小范围)---》(大范围),这种属于自动转换
// 向下转型 : (大范围)---》(小范围),这种属于强制转换
print(d); // 20.0
}
数值型的操作
运算符: +、 - 、* 、/ 、 ~/ 、 %
常用属性: isNaN、isEven、isOdd
常用方法:abs()、round()、floorl()、ceil()、toInt()、toDouble()
String
Dart字符串是UTF-16编码的字符序列。
1.可以使用单引号或者双引号来创建字符
void main() {
print("This is a String");
print('This is also a stirng');
}
这两个是一样的。
单双引号成对嵌套
void main() {
String str = '单引号中的"双引号"';
String str1 = "双引号中的'单引号'";
print(str); // 单引号中的"双引号"
print(str1); //双引号中的'单引号'
String str2 = '单引号中的 \'单引号\' ';
String str3 = "双引号中的 \"双引号\" ";
print(str2); //单引号中的 '单引号'
print(str3); //双引号中的 "双引号"
}
2.字符串拼接
void main() {
String s1 = "First string.....";
String s2 = " Second string";
print(s1 + s2); // First string..... Second string
// 使用空格即可拼接字符串
// 使用的是空格拼接,多个空格也可以
String str1 = '单引号空格字符串' '拼接' '~'; // 单引号字符串空格拼接~
// 使用换行符以及空格
String str2 = '单引号符串'
'换行了'
'再加空格'
'拼接'; // 单引号符串换行了再加空格拼接
// 单双引号 空格拼接
String str3 = "单双引号空格字符串" '拼接' "~"; // 单双引号字符串空格拼接~
// 单双引号 换行符以及空格
String str4 = "单双引号符串"
'换行了'
'再加空格'
'拼接'; // 单双引号符串换行了再加空格拼接
// 下面这两种情况会报错
// String blockStr4 = '单引号''''空格';
// String blockStr5 = "双引号""""空格";
}
3.字符插值
${exprsssion},如果表达式是一个标识符,可以省略{},如果表达式的结果为一个对象,Dart会调用对象的toString()函数来获取一个字符串。
void main() {
String s1 = "First string.";
print("String 后面拼接 $s1");// String 后面拼接 First string.
print("The sum of 1 and 1 equals ${1 + 1}.");// // The sum of 1 and 1 equals 2.
}
4.多行显示
使用双引号创建多行字符
还可以使用(’)和(")
var s = 'Firtst'
'Second'
"Third";
print(s);// FirtstSecondThird
使用三引表示多行字符
var multilineString = """This is a
multiline string
consistiong of
multiple lines""";
print(multilineString);
/* This is a
multiline string
consistiong of
multiple lines */
5.使用r前缀创建“原始raw”字符串
String s4 ="adbchi\ndfafa";
print(s4);// 转译 /n
String s5 =r"adbchi\ndfafa";
print(s5);// 不转译 /n
//输出的结果
adbchi
dfafa
adbchi\ndfafa
Bool
Dart的bool和Java类似只有两种类型,一种是true一种是false,但是,不同的是bool对象未初始化的默认值是null。
List
-
实例化数组
// 使用构造创建 var list = new List(); //创建一个int类型的list List intlist = [1, 2, 3]; // 创建一个常量List, 不可以改变的List List constList = const[10, 7, 23];
-
Dart就可以直接打印list包含list的元素,java中直接打印list结果是地址值。
var list = [0, 1, 2, 3, 4, 5, 6]; print(list); // [0, 1, 2, 3, 4, 5, 6]
-
Dart中List的下标索引和java一样都是从0开始。
-
Dart中List也支持泛型,这点和java一样,同时还可以进行泛型的判断。
var list1 = List<String>(); print(list1 is List<String>); // true 这里的 is 是一种类型判断
-
有增删改查的操作,支持倒叙,自带顺序,洗牌,可以使用+将两个List合并。
var list = [0, 1, 2, 3, 4, 5, 6]; print(list); var list2 = [7, 8, 9, 10, 11]; print(list + list2); //[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
-
数组中的常用操作
// 在数组中可以存放多个不同类型的对象 var list = [1, 2, 3, 'Flutter', true]; print(list); // 输出的结果:[1, 2, 3, Flutter, true] // 修改数组下标为2 的值 list[2] = 'Dart'; // 输出的结果:[1, 2, Dart, Flutter, true] // 从下标0开始,下标2结束(不包括2),修改之间的值为字符a list.fillRange(0, 2, 'a'); // 输出的结果:[a, a, Dart, Flutter, true] // 获取数组的长度 print(list.length); // 输出的结果:5 // 向数组中添加元素 list.add("value"); // [a,