Dart值得注意的知识点(一)
2020-04-12 本文已影响0人
WinJayQ
1. dynamic的使用
- 在开发中, 通常情况下不使用dynamic, 因为类型的变量会带来潜在的危险
dynamic name = 'WinJayQ';
print(name.runtimeType);//String
name = 18;
print(name.runtimeType);//int
2.final&const的使用
- final和const都是用于定义常量的, 也就是定义之后值都不可以修改
2.1 final和const有什么区别呢?
- const在赋值时, 赋值的内容必须是在编译期间就确定下来的
- final在赋值时, 可以动态获取, 比如赋值一个函数
String getName() {
return 'WinJayQ';
}
main(List<String> args) {
const name = getName(); // 错误的做法, 因为要执行函数才能获取到值
final name2 = getName(); // 正确的做法
}
2.2 const放在赋值语句的右边,可以共享对象,提高性能
class Person {
const Person();
}
main(List<String> args) {
final a = const Person();
final b = const Person();
print(identical(a, b)); // true
final m = Person();
final n = Person();
print(identical(m, n)); // false
}
3.布尔类型
- 注意: Dart中不能判断非0即真, 或者非空即真
var message = 'Hello Dart';
// 错误的写法
//Error: A value of type 'String' can't be assigned to a variable of type 'bool'.
if (message) {
print(message)
}
4.字符串类型
Dart字符串是UTF-16编码单元的序列。您可以使用单引号或双引号创建一个字符串,可以使用三个单引号或者双引号表示多行字符串:
// 2.表示多行字符串的方式
var message1 = '''
哈哈哈
呵呵呵
嘿嘿嘿''';
5.函数
如果函数中只有一个表达式, 那么可以使用箭头语法(arrow syntax)
- 注意, 这里面只能是一个表达式, 不能是一个语句
sum(num1, num2) => num1 + num2;
5.1函数的参数问题
函数的参数可以分成两类: 必须参数和可选参数
可选参数可以分为 命名可选参数 和 位置可选参数
定义方式:
命名可选参数: {param1, param2, ...}
位置可选参数: [param1, param2, ...]
- 5.1.1 命名可选参数的演示:
// 命名可选参数
printInfo1(String name, {int age, double height}) {
print('name=$name age=$age height=$height');
}
// 调用printInfo1函数
printInfo1('win'); // name=win age=null height=null
printInfo1('win', age: 18); // name=win age=18 height=null
printInfo1('why', age: 18, height: 1.88); // name=win age=18 height=1.88
printInfo1('why', height: 1.88); // name=win age=null height=1.88
- 5.1.2 位置可选参数的演示:
// 定义位置可选参数
printInfo2(String name, [int age, double height]) {
print('name=$name age=$age height=$height');
}
// 调用printInfo2函数
printInfo2('win'); // name=win age=null height=null
printInfo2('win', 18); // name=win age=18 height=null
printInfo2('win', 18, 1.88); // name=win age=18 height=1.88
- 5.1.3 命名可选参数, 可以指定某个参数是必传的(使用@required)
- Required 是在meta 包下面定义的,因此你需要import package:meta/meta.dart 或者,import那些输出meta包的包,如Flutter下的package:flutter/material.dart.
// 命名可选参数的必传
printInfo3(String name, {int age, double height, @required String address}) {
print('name=$name age=$age height=$height address=$address');
}
-
5.1.4 参数默认值
参数可以有默认值, 在不传入的情况下, 使用默认值 -
注意, 只有可选参数才可以有默认值, 必须参数不能有默认值
// 参数的默认值
printInfo4(String name, {int age = 18, double height=1.88}) {
print('name=$name age=$age height=$height');
}
6.匿名函数的使用
某些情况下,给函数命名太麻烦了,我们可以使用没有名字的函数,这种函数可以被称之为匿名函数( anonymous function),也可以叫lambda或者closure。
main(List<String> args) {
// 1.定义数组
var movies = ['盗梦空间', '星际穿越', '少年派', '大话西游'];
// 2.使用forEach遍历: 有名字的函数
printElement(item) {
print(item);
}
movies.forEach(printElement);
// 3.使用forEach遍历: 匿名函数
movies.forEach((item) {
print(item);
});
movies.forEach((item) => print(item));
}
学习内容来自Flutter从入门到实战