跳到主要内容

1.Dart语言的基础

Dart

致力于打造高质量的跨屏体验

  • 针对客户端开发优化
  • 丰富强大的框架
  • 灵活的工具
void main(){
var msg ="hello word";
print(msg);
// print("这是一堆字符串 $msg")
// print("这是一堆字符串 ${msg}ccssd")
}
  • 一切变量都是对象,包括数字、函数,null
  • 对象是类的实例,所有类都继承于Object
  • 可以使用 dynamic 指定类型
  • 可以通过 _ 打头的方式,让变量私有,只能在(library)内部使用
  • 错误分为 warningerror 后者会影响程序执行
  • constfinal 定义的值,定义后不会改变
  • final 定义的常值可以更改指向内部存储的数据(指向不可以更改),const 指向,以及指向的值都不可以修改

数据类型

数字 num 是 int double 的基类。

int:64位整数,double 64位浮点数

字符串:String

  • 使用 ${name} 实现插入变量值,如果是个合法的标识符,可以省去 {}
  • 可以使用 + 拼接字符串
  • 使用三重引号定义多行字符串
  • r 前缀来声明原始字符串,不做字符转译

布尔、列表(就是数组)

哈希表(Map),存储数据唯一,以键值对方式存储的数据

符文(Rune)

  • UTF-32 码点(Code Point)组成的字符串,一个 Rune 对应一个 Unicode 字符
  • 一般使用4个 16进制字符 \uXXXX 表示,如果表示的字节数超过4 个,需要用 {} 括起来
void main(){
var x = 1;
var x1 = 0xDEADBEEF; // 十六进制定义
var y = 1.1;
var y1 = 1.35e4; // 科学记数法定义
double y2 =1; // 明确指定 变量类型
var z = int.parse('558');
assert(z == 558); // assert 只在编译的时候有效果,运行时无效,如果错误,则抛出异常
String str1 = 3.1125.toStringAsFixed(2);
assert(str1 == '3.11');
assert((3<<1) == 6); // 3 << 1 表示放大一倍,
assert((3>>1) == 1); // 3 >> 1 表示缩小一倍,并且保留整数部分
assert((3<<2) == 12); // 放大一倍,然后再放大一倍
assert((3 | 4) == 7);
// 3 的二进制表示为 0011
// 4 的二进制表示为 0100
// 0111
var str1 = 'It\'s my football.'; // 单引号引起字符串,如果内部使用单引号,需要进行转译 \'
var str2 = '''
create
换行也会保留'''; //单引号或者双引号都可以
var str3 = r"此时\'55"; // 此时不会进行转译
var emptyStr = '';
assert(emptyStr.isEmpty); // isEmpty 用来判断是否为空
var vafaf = 0/0;
assert(vafaf.isNaN);
assert(vafaf.runtimeType); // runtimeType 可以得到该数据的类型
// 定义一个 Map
var gifts={
'first':'sss',
'second':'ddd'
};
var gift1 = Map(); // 自定义键值对的插入
gift1['bo'] = 'cs';
gift1['bokk'] = 'sscs';// 可以通过 gift1.length 获取键值对的数量

}

符文

void main(){
var clapping = '\u{1f44f}'; // 超过两个字节,需要用大括号括起来
print(clapping);
print(clapping.codeUnits); // 码元序列
print(clapping.runes.toList()); // runes 中的字符和 \u 中的字符一一对应
Runes input = Runes('\u2665 \u{1f605}'); // Runes 中保存的是一个编码的序列
print(String.fromCharCodes(input));
void foo(){}// 此时定义的函数,不会有任何返回的值
}

函数

每个程序都有一个顶层的 main 函数,作为程序的入口

函数的闭包,访问外层作用域函数的变量

var funA = ((fcc)=>{
fcc.Name = 'gogogo'
var a = 'x';
})(funA||{})

操作符

void main(){
var a = 1;
var b = 2;
var c = true;
print(a++);
print(a+b);
print(a = b);
print(a == b);
assert(5 ~/ 2 == 2);// 表示为 5 的整除商
var x = 1;
var vis = x ? 'gogo':'nono';
var someFun = Stringbb();
someFun.write('aa');
someFun.write('cc');
someFun..write('aa')..write('cc') // 等于上面的调用两次方法
}
// >> 为移位符, 比如 1001 ,通过该移位符移位之后是 100

流程控制语句

和大多数语言差不多,if else

while for switch

异常

异常表示有预料之外的错误发生,如果没有进行捕捉错误,那么程序将会终止运行。

Dart 内置两种异常

  • 核心库异常 Exception
  • 代码异常 Error

throw可以抛出非 null 对象作为异常

try-catch 语句来捕捉异常,防止异常扩散,同时可以使用 on 语句来处理特定类型的异常

rethrow 重新抛出异常

finally 用来执行无论是否有异常都要执行的代码

void main(){
void foo()=>throw UnimplementedError();// 跑出一个异常
try{
foo();
}on UniplementedError catch (e){ // 用于捕获特定的异常
print('Unknown exceptinon:$e');
}catch(e,s){
print('Exception details:\n $e');// 异常信息
print('Stack trace:\n $s');// 哪一行代码出现的问题
}
// 再次抛出异常
void misbehave(){
try {
dynamic foo = true;
print(foo++);// 因为boolean 值不能加减,所以抛出异常
} catch(e){
print('misbehave() partially handled ${e.runtimeType}.');
rethrow; // 再次抛出异常
}
}
try {
misbehave();
} catch(e){
print('main() finished handling ${e.runtimeType}.')
}
}