定义变量
有两种方式:明确声明变量和类型推导
- 明确声明变量:
变量类型 变量名称 = 变量值;
String name = 'coderwhy';
int age = 18;
double height = 1.88;
print('${name}, ${age}, ${height}'); // 拼接方式后续会讲解
注意:定义的变量可以修改值,但是不能赋值其他类型
String content = 'Hello Dart';
content = 'Hello World'; // 正确的
content = 111; // 错误的, 将一个int值赋值给一个String变量
- 类型推导:
var/dynamic/const/final 变量名称 = 赋值;
final和const用来定义常量,定义之后值都不可修改。例如
final name = 'coderwhy';
name = 'kobe'; // 错误做法
const age = 18;
age = 20; // 错误做法
- const在赋值时,赋值的类容必须是在编译期间就确定下来的;
const放在赋值语句的右边,可以共享对象,提高性能。 - final在赋值时,可以动态获取,比如赋值一个函数;
final一旦被赋值后就有确定的结果,不会再次赋值。
数据类型
- 数字类型:整数用int,浮点数用double。
Dart中的int和double表示的范围不是固定的,取决于运行Dart的平台。 - 布尔类型:bool
- 字符串类型:Dart字符串是UTF-16编码单元的序列,可以使用单引号或者双引号创建一个字符串。
字符串和其他变量或者表达式进行拼接,可以${expression},如果表达式是一个标识符,{}可省略。举例如下:
// 拼接其他变量
var name = 'coderwhy';
var age = 18;
var height = 1.88;
print('my name is ${name}, age is $age, height is $height');
- 集合类型:List/set/map;set和list最大的不同是:set是无序的且元素是不重复的
// List定义
// 1.使用类型推导定义
var letters = ['a', 'b', 'c', 'd'];
print('$letters ${letters.runtimeType}');
// 2.明确指定类型
List<int> numbers = [1, 2, 3, 4];
print('$numbers ${numbers.runtimeType}');
// Set的定义
// 1.使用类型推导定义
var lettersSet = {'a', 'b', 'c', 'd'};
print('$lettersSet ${lettersSet.runtimeType}');
// 2.明确指定类型
Set<int> numbersSet = {1, 2, 3, 4};
print('$numbersSet ${numbersSet.runtimeType}');
// Map的定义
// 1.使用类型推导定义
var infoMap1 = {'name': 'why', 'age': 18};
print('$infoMap1 ${infoMap1.runtimeType}');
// 2.明确指定类型
Map<String, Object> infoMap2 = {'height': 1.88, 'address': '北京市'};
print('$infoMap2 ${infoMap2.runtimeType}');
- 函数
Dart中函数也是对象,也有类型,函数的类型是Function。函数可以作为变量定义或者作为其他函数的参数或者返回值。函数的定义方式如下:
返回值类型 函数的名称(参数列表) {
函数体
return 返回值
}
如果函数中只有一个表达式,则可以使用箭头语法。
函数的参数可以分为必选参数和可选参数,可选参数包括命名可选参数和位置可选参数。命名可选参数, 可以指定某个参数是必传的(使用@required);可选参数可以设置默认值, 必须参数不能有默认值。
命名可选参数: {param1, param2, ...}
位置可选参数: [param1, param2, ...]
// 参数的默认值
printInfo4(String name, {int age = 18, double height=1.88}) {
print('name=$name age=$age height=$height');
}
可以将函数赋值给一个变量,也可以将函数作为另外一个函数的参数或者返回值来使用。
main(List<String> args) {
// 1.将函数赋值给一个变量
var bar = foo;
print(bar);
// 2.将函数作为另一个函数的参数
test(foo);
// 3.将函数作为另一个函数的返回值
var func =getFunc();
func('kobe');
}
// 1.定义一个函数
foo(String name) {
print('传入的name:$name');
}
// 2.将函数作为另外一个函数的参数
test(Function func) {
func('coderwhy');
}
// 3.将函数作为另一个函数的返回值
getFunc() {
return foo;
}