文章目录
1 前言
Dart 是一种面向对象的语言,具有 C 语言风格语法,广泛应用创建单页面应用程序。谷歌发布了一个特殊的Chromium版本 - Dart VM 。使用Dartium可以在浏览器上进行测试之前,不必将代码编译为JavaScript。
2 Dart语言基础语法
- 变量和运算符
- 类
- 函数
- 表达式和编程构造
- 决策和循环结构
- 注解
- 库和包
- 类型定义
- 数据结构-集合/泛型
3 标识符
- 可以包含字符和数字,不能以数字开头
- _ 和 $ 开头
- 不能是关键字
- 必须唯一
- 区分大小写
- 不能包含空格
4 Dart注释
// 单行注释
/*
多行注释
*/
5 面向对象编程
- 对象
- 类
- 方法
6 数据类型
- 数字
- 字符串
- 布尔
- 列表(类似数组)
- 集合
- 映射
- 符文(用于表示字符串中的 Unicode 字符)
- 符号
6.1 数字类型
//1.整数 int
var x = 123;
//2.双精度数
double x = 10;
//String 转成 int
var one = int.parse('1');
//String 转成 double
var one = double.parse('1.1');
//int 转成 String
var one = 1.1.toString();
//double 转成 String
var one = 2.435.toStringAsFixed(2);
var one = 2.3.toString();
//3.常量
const MAX_SIZE = 6
6.2 字符串
//1.字符串 UTF-16 代码单元
//2.符文 UTF-32 代码单元序列
var s1 = 'test';
var s2 = "test";
//3.使用 ${} 表达式放到字符串中
var i = 10;
var s2 = "${i}";
//4. + 号连接
var s3 = 's' + '1';
//5.单引号或双引号的三引号创建多行字符串
var s1 = '''
ssss
''';
var s2 = """
ssss
""";
//6.加 r 来创建 原始字符串
var s1 = r'google\n不换行了';
//7.常量
const s1 = 'google';
6.3 布尔类型
1.bool 类型,true,false
6.4 列表类型
//1.列表是 List
var list = [1,2,3];
//2.编译时常量列表
var list = const [1,2,2]
//3.扩展运算符 ...,将列表掺入另外一个列表
var list = [1,2,3];
var list2 = [0,...list];
//6.空值感知扩展运算符 ...?,不为空将列表掺入另外一个列表
var list;
var list2 = [0,...?list];
//5.if 和 collection 集合
var nav = [
1,2,
if(条件) '3'
];
var list = [1,2,3];
var list2 =[
0,
for(var i in list) i
];
6.5 集合
//1.Set 是唯一无序集合
var s1 = {'1','2'};
//2.创建空集合
var names = <String>{};
Set<String> names = {};
//3.add() addAll() 添加
var s1 = <String>{};
s1.add('1');
//4.length 长度
s1.length;
//5.常量
final s1 = const {1,2}
6.6 映射
//1.键值对
var s1 = {
'a':1,
'b':2
}
//2.使用 Map
var gifts = Map();
gifts['a'] = 1;
//3.length 长度
gifts.length
//4.常量
final map = const {
'a':1,
'b':2
}
6.7 符文
//1.String.codeUnitAt()
//2.String.codeUnits()
//3.String.runes()
6.8 符号
Symbol对象表示Dart程序中声明的运算符或标识符,获取标识符符号,使用符号文字,#后跟标识符
#radix
#bar
7 变量
7.1 变量语法
var name = "张三";
7.2 默认值
- 未初始化的变量初始值都是 null,数字类型也一样
7.3 dynamic 关键字
//1.动态类型 一般在泛型时使用
var list = new list<dynamic>();
list.add(1);
list.add("1");
7.4 final 和 const
//1.声明常量
final s1 = 0;
final int s1 = 0;
const s1 = 0;
const int s1 = 0;
8 运算符
- 和 java 差不多
9 条件语句
- if
- if else
- else if
- switch case
10 循环
//1.for
//2.for in
for (var prop in obj){
}
//3.while
//4.do while
//5.控制语句 break continue
//6.标签跳出循环
outerloop:
for(var i = 0;i < 5; i++){
if(i==5) break outerloop;
}
11 Dart 数字
//1.int
var int a = 1;
//2.double
var double a = 1.1
12 字符串
var s1 = ""
var s2 = ''
13 布尔类型
bool s = true;
14 列表
//1.固定长度
var list = new List(3);
list[0] = 1;
list[1] = 2;
list[3] = 3;
//2.可增长长度
var list = [0,1];
var list = new List();
//3.动态添加
list.add(5);
14 映射
//1.使用映射文字
var map = {"a":1,"b",2};
//2.使用 Map 构造函数
var map = new Map();
//3.forEach
map.forEach((k,v)=> print("$k $v"));
15 符号
- 不透明的动态字符串名称,反映库中的元数据,使用 Symbol 反射
16 符文
//1.String.codeUnitAt()
String x = 'Runes';
print(x.codeUnitAt(0)); //82
//2.String.codeUnits
print("test".codeUnits); //[116, 101, 115, 116]
//3.String.runes()
"test".runes.forEach(int rune){
var character=new String.fromCharCode(rune);
print(character);
};
//4.Runes
Runes input = new Runes('\u{1f605}');
print(new String.fromCharCodes(input));
17 枚举
enum Status{
none,runnind
}
Status.values.forEach((v)=> print("$v"))
18 函数
//1.定义函数
void test(){}
//2.可选函数
void test(n1,[s1]){}
//3.可选命名参数
void test(n1,{s1,s2}){}
test(123,s1:'hellow');
//4.可选命名参数 带有默认值
void test(n1,{s1:12}){}
test(123);
19 接口
class Son implements Person
20 类
class Car(){
String engine;
Car(){}
//命名构造函数
Car.namedConst(String engine){
this.engine = engine;
}
void set setEnine(String engine){
this.engine = engine;
}
String get getEngine(){
return this.engine;
}
}
//1.继承
class Son extends Person{}
//2.重写
@override
//3.static 关键字 静态变量
//4.super 关键字 找父级别
21 对象
new Test()
..test1()
..test2()
22 集合
//1.List
//1.1.固定长度
var list = new List(10);
//1.2.可增长长度
var list = new List();
//2.Set
Set set = new Set();
Set set = new Set.from([1,2]);
HashMap HashSet
//3.Map
var map = new Map()
//4.Queue
Queue a = new Queue();
//5.迭代
Iterator i = q.iterator;
while(i.moveNext()){
print(i.current);
}
22 异常
try/on/catch/finally
thorow 抛出异常
23 Typedef
//1.用作引用函数的指针。
typedef ManyOperation(int firstNo , int secondNo);
//function signature
Add(int firstNo,int second){
print("Add result is ${firstNo+second}");
}
Subtract(int firstNo,int second){
print("Subtract result is ${firstNo-second}");
}
Divide(int firstNo,int second){
print("Divide result is ${firstNo/second}");
}
Calculator(int a, int b, ManyOperation oper){
print("Inside calculator");
oper(a,b);
}
void main(){
ManyOperation oper = Add;
oper(10,20);
oper = Subtract;
oper(30,20);
oper = Divide;
oper(50,5);
}
24 库
//1.导入库
import 'dart:math'
//2.封装库
library loggerlib;
void _log(msg){
}
import 'test.dart' as web
void main(){
web._log("");
}
25 同步和异步
//1.同步
String name = stdin.readLineSync()
//2.异步
void main(){
File file = new File( Directory.current.path+"\\data\\contact.txt");
//在未来某个时段获取值
Future<String> f = file.readAsString();
f.then((data)=>print(data));
print("End of main");
}
26 并发
//1.使用 Isolates 作为并行工作的工具 dart:isolate
void foo(var message){
print('$message')
}
void main(){
Isolate.spawn(foo,'Hellow');
Isolate.spawn(foo,'Hellow');
}
//催生功能
//将传递给衍生函数对象