没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
2. Dart 语言概览 翻译和实践
1.开发工具 VS Code 常用快捷键
2.重要概念
3.关键字段
4.变量声明
默认值
final 和 const 类型
5.数据类型
6.函数 Functions
可选参数
命名参数
位置参数
默认参数
函数是一等对象(一等公民)
匿名函数
词法作用域
返回值
测试函数相等性
7.操作符
算术运算符
比较和关系运算符
类型测试运算符
赋值运算符
逻辑运算符
按位以及位移运算符
条件表达式
级联操作(..)
其他操作符
8.控制语句
For 循环
Switch and Case
Assert
9.异常 Exceptions
Catch
Finally
10.Classes 类
构造函数
默认构造函数
构造函数不能继承
命名构造函数
调用非默认父类构造函数
初始化列表
重定向构造函数
常量构造函数
Factory构造函数
方法
Getters and Setters
抽象类、抽象方法
隐式接口
类的继承
重写操作符
noSuchMethod()
枚举类型
类变量和方法
11.泛型
为什么使用泛型
Dart 中集合泛型的使用
extends 限制参数类型
泛型方法
12.Libraries 和可见性
使用 libraries
指定库别名(前缀)
导入库的一部分
实现库
13. 异步支持
什么是 isolate
Isolate.spawn
事件驱动
什么是 Future、async、await
Future
async 和 await
什么是 Stream
14.可调用类(Callable classes)
15.Typedefs
16.MetaData
17.注释
18.总结
19.参考资料
1.开发工具 VS Code 常用快捷键
功能 快捷键
代码提示 keymap→搜索 Trigger Suggest 修改成 option + /
参数提示 cmd + shift + space
2.重要概念
一个例子:
// Define a function.
printInteger(int aNumber) {
print('The number is $aNumber.'); //
Print to console.
}
// This is where the app starts executing.
main() {
var number = 42; // Declare and
initialize a variable.
printInteger(number); // Call a
function.
}
Everything you can place in a variable is an , and every object is an instance of a . Even numbers, functions, and are
object
class
null
objects. All objects inherit from the class.Object
Although Dart is strongly typed, type annotations are optional because Dart can infer types. In the code above, is inferred to number
be of type . When you want to explicitly say that no type is expected, .int use the special typedynamic
Dart supports generic types, like (a list of integers) or (a list of objects of any type).List<int> List<dynamic>
Dart supports top-level functions (such as ), as well as functions tied to a class or object ( and , main()
static
instance methods
respectively). You can also create functions within functions ( or ).
nested
local functions
Similarly, Dart supports top-level , as well as variables tied to a class or object (static and instance variables). Instance
variables
variables are sometimes known as fields or properties.
Unlike Java, Dart doesn’t have the keywords , , and . If an identifier starts with an underscore (_), it’s public protected private
private to its library. For details, see .Libraries and visibility
Identifiers
can start with a letter or underscore (_), followed by any combination of those characters plus digits.
Dart has both (which have runtime values) and (which don’t). For example, the
expressions
statements
conditional expressioncondit
has a value of or . Compare that to an , which has no value. A statement ion ? expr1 : expr2 expr1 expr2 if-else statement
often contains one or more expressions, but an expression can’t directly contain a statement.
Dart tools can report two kinds of problems: and . Warnings are just indications that your code might not work, but
warnings
errors
they don’t prevent your program from executing. Errors can be either compile-time or run-time. A compile-time error prevents the
code from executing at all; a run-time error results in an being raised while the code executes.exception
一切皆是对象。包括数字类型、函数类型和 都是对象,所有的对象都继承自 这个类null Object
Dart 是一个强类型语言,支持类型推导,例如上面例子中定义的 类型会被推导成 类型。如果你不想声明成某个确切的类型,你可以使number int
用 dynamic type
Dart 支持泛型,例如 List<int> 或者 List<dynamic>
Dart 支持顶级函数,例如 main(), 你可以在 class 中声明 static 或者 实例方法。你可以再函数中在声明一个函数(嵌套或者叫局部函数)
Dart 也支持定级变量
Dart 没有 public, protected 和 private 这样的关键字,这个区别于 Java。如果一个标志符(变量名、函数名)以下划线( _ )开头,那么他是私有
的
标志符以字符或者( _ ) 开头,后面跟上字符和数字的组合
Dart 既有表达式(有运行时值)又有语句声明(没有运行时值)。例如条件表达式 (condition ? expr1 : expr2) 有值 expr1 或者 expr2,具体值需
要运行时才知道。与 if-else 声明(没有值)。一个语句声明通常包含一个或多个表达式,但是一个表单时不能直接包含一个声明。云里雾里的
Dart 工具可以报出两类问题:警告和错误。警告紧紧是标识你的代码可能不工作,但是不会阻止代码的运行。错误可以是编译时间或者运行时间。
编译错误阻止代码运行,运行时错误会抛出异常
3.关键字段
abstract
2
dynamic
2
implements
2
show
1
as
2
else
import
2
static
2
assert enum in super
async
1
export
2
interface
2
switch
await
3
extends is
sync
1
break
external
2
library
2
this
case
factory
2
mixin
2
throw
catch false new true
class final null try
const finally
on
1
typedef
2
continue for
operator
2
var
covariant
2
Function
2
part
2
void
default
get
2
rethrow while
deferred
2
hide
1
return with
do if
set
2
yield
3
尽量避免使用上面这些标志符,如果有必要,带有上标的关键字可以在下面这种情况用作标志符:
上标是 1 的是上下文关键字,只在一些特殊的地方不可用作标志符。一般情况都是可以用作标志符
上标是 2 的是内置标志符。可用来简化移植 JavaScript 代码到 Dart 的工作,这些关键字在大部分地方都可以用作标志符,但是他们不能用作
class 或者 type 名称或者作为导入的前缀
上标为 3 的词是在 Dart 1.0 版本之后添加的与异步支持相关的更新的、有限的保留词。你无法使用 async, async* 或 sync* 标记的函数体内使用
await 或 yield 作为标识符
4.变量声明
var name = 'Bob';// 类型推导,声明后 name只能被赋值 String 类型,比如 name = 123; 则编译器提示报错;另外这里只是把 ’Bob‘ 这个字符串的引
用赋值给 name
dynamic name = 'Bob';// dynamic 声明的变量没有固定的类型,比如重新赋值 name = 123;这个是合法的
String name = 'Bob';// 这个就是显示声明成 String 类型
默认值
未初始化的变量有一个默认值 null 。及时变量是一个 number 类型,它的初始值也是 null,因为在 Dart 中一切解释对象。
int lineCount;
assert(lineCount == null);
final 和 const 类型
如果你不期望一个变量改变你可以将变量声明成 final 或 const 类型。const 表示将变量声明成编译期变量( compile-time constants),final 表示将变量
声明成运行时变量( run-time constants)。
关于 compile-time 变量和 run-time 变量下面举一个例子说明:
const a = Random().nextDouble();// error,因为 a 的值是在运行时才确定的,所以这里会出现编译错误。
final b = Random.nextDouble(); // right,
使用final 和 const 声明变量:
final name = "Bob";//valid
final String name = "Bob";//valid
final var name = "Bob;"//invalid
classCalculator{
staticconstPI=3.141590;// const 必须声明成 static
finalinta,b;
final c = 10;
constCalculator(this.a,this.b);
}
5.数据类型
Dart 语言支持如下数据类型的特别支持,请结合说明认真阅读下面的例子的使用方式,你可以亲自去尝试一下。
支持的类
型
Dart
类型
例子 说明
numbers
int
var a = -1;
int b = 2;
int c = int.parse("3")// 将字符串转换成 int
a.abs();// 输出 1
int 和 double 都是 num 类型的子类,父类 num 包括一些基本的 +、-、*、/、>>、
<<、| 等操作,还包括比如:abs(), ceil() 和 floor()等方法,如果没有找到你想要的方
法,可以引入 dart:math 库,里面有很多数学操作。
字面量数字是编译时常量。许多算数表达式都是编译时常量,是要他们的运算项是编
译期常量。
double
var a = 1.0;
double b = 2.0;
double c = 2;// 默认会转换成 2.0,结果是2.0不是
2
double d = double.parse("3.0")
String pi = 3.14159.toStringAsFixed(2) // 转换成
特定精度的字符串
strings
String
vars1= ;'hello'
Strings2= ;"world"
vars3= ;'it\'sawork${s1}'
vars4= ;"it'snotawork"
vars5= ;"${s4},it'saresponsibility"
vars6='${s1}'
;'$s2'
vars7=s1+s2; // 拼接字符串
vars8="""line0// 多行字符串
line1
line2...
;"""
var s9 = r'在rawString中,换行符 \n也不会产生一
个换行 '// raw String 写法
Dart 字符串编码是 UTF-16。你可以使用单引号或双引号来创建字符串。
你也可以通过 ${expression}来将结果合入到字符串中。
booleans
bool
vara= ;true
boolb= ;false
final 和 const 注意事项
const 是编译期确定的,final 是运行期间确定的;可以按照字母开头来记忆, const 和 compile-time 都是以字母 c 开头
final 和 const 不能和 var 一起使用;例如:final var name = "Bob"; 这种编译期会提示错误,这个很好理解 var 表示的是一个可变
的,正好与 final/const 表示不变的意思相冲突
const 声明在 class top-level 中必须加上 static,参考下方类 Calculator 中 PI 常量的定义。
final 声明在 class top-level 中必须要初始化,如下方类中的 c 变量,如果不初始化那么必须在构造函数中进行声明
const 不仅可以用来声明变量,也可以用来声明构造函数;例如 var cal = const Calculator(2,3); 注意这里是声明了一个不可变的
Calculator 然后将值赋值给 cal 变量,所以可以对 cal 重新赋值,例如 cal = Calculator(3,4);但是 final 不支持这么使用。
lists
List<E>
varlist=[ , , ];1 2 3
List< >list2=[ , , ];int 5 6 7
varlist3;
varlist4=[...list, ,...list2,...?list3];4 //
将listlist2list3展开添加到新的集合中
var generic = <String>[]// 创建一个String类型的
空 List
var constTest = const[]; //注意此处是创建了一个
const类型的 List,然后将引用赋值给变量
constTest,所以此处的 constTest 可以被重新赋
值。
varlist5=[
...list,
4,
if(list3==null)40,// 直接写上数据
for(vartmpinlist2){// 这里的大括号也输出了
tmp
},
for(vartmpinlist2)tmp+3// 直接写上数据
];
print(list5);// 输出:[1,2,3,4,40,{5},{6},{7},
8,9,10] ,一定要注意此处的输出,可以看到在 for 或
者 if 的地方写的大括号也一起输出了。
在 Dart 中 arrays 就是 List,所以在 Dart 中通常不称呼数组,而是称呼其是
List,其初始化方式跟 JavaScript 中语法类似。
Dart 中 List 的下标跟绝大多数语言的下表是一致的,都是从 index = 0 开始
Dart 支持 和 ,提供了一种简洁的方式,展开运算符( ... ) 非空展开运算符( ...? )
将一个集合插入到另一个集合中
Dart 还提供了 和 ,用来在创建集合的时候根据一定的条件或者条件 if 条件 for
做一定的变化将另外一个集合中的数据插入到新的集合中。
sets
Set<Str
ing>
varset0 ={ , , , };"hello" "world" "test" "test" //输
出{hello,world,test}
var set1 ={...set0}
//创建一个空set
Set< >set2={};String
set3=< >{};var String
//作为对比,创建一个map
varmap1={};//类型Map<dynamic, dynamic>.
map2=< , >{};var String String
Set 是 Dart 提供的一种无序且数据唯一的集合。
需要注意创建 set 和 map 都是用{} ,需要区分创建一个空 set 和 空 map 的区
别,可以查看例子对比一下
Set 跟 List 一样也支持展开、条件 if、条件 for 等操作
Set 和 List 也提供了 add(), addAll() 等方法
maps
Map<E,
T>
//声明map
varmap1={};
varmap2=<String,String>{};
varmap3={
"key1":"value1",
"key2":"value2"
};
Map<String,String>map4={
...map3,
"key3":"value3"
};
varmap5=Map();
print(map4);
//map取值或赋值操作
map4["key4"]="value4";
print(map4);
Map 跟 Set, List 一样也支持展开、条件 if、条件 for 等操作
runes
todo
symbols
todo
6.函数 Functions
Dart 是一门 的语言,所以函数也是对象,而且其类型是 , 这意味着你可以把函数当成变量传给另外一个函数。你可以将 Dart 类的实真-面向对象 Function
例看作函数进行调用。
下面是个例子
剩余25页未读,继续阅读
资源评论
Jaesun
- 粉丝: 0
- 资源: 4
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功