【Dart】001-变量、常量、类
原创
©著作权归作者所有:来自51CTO博客作者訾博ZiBo的原创作品,请联系作者获取转载授权,否则将追究法律责任
【Dart】001-变量、常量、类
文章目录
- 【Dart】001-变量、常量、类
- 一、Hello World
- 二、变量
- 1、使用 final 关键字声明:只能赋值一次数据
- 2、使用 const 关键字声明:声明时必须赋值
- 2、什么时候可以使用 const
- 3、只有被 const 的修饰的常量才不允许被修改
- 4、const 修饰列表也不允许修改
- 5、flutter 中使用 const 的注意点
一、Hello World
void main() {
hello(); // hello, world!
}
// 我从哪里来?(在哪里)
void hello(){
// 我是谁? (是什么)
String str = 'hello, world!';
// 我要到哪里去?(做什么)
print(str);
}
二、变量
1、定义和使用
代码演示
void main() {
hello();
}
void hello() {
String name = '訾博';
String name2 = "訾博";
String name3 = '''訾博''';
String name4 = """訾博""";
print('hello, world!');
print('hello, $name!');
print('hello, ${name}!');
print('hello, ${name2}!');
print('hello, ${name3}!');
print('hello, ${name4}!');
}
运行结果
hello, world!
hello, 訾博!
hello, 訾博!
hello, 訾博!
hello, 訾博!
hello, 訾博!
2、声明和初始化变量的四种方式
代码演示
void main() {
hello();
}
void hello() {
// 1、声明并初始化变量
String name = '訾博';
// 2、先声明变量,再初始化
String name2;
name2 = '訾博';
// 3、声明变量时,不指定类型(不推荐)
var name3 = '訾博';
name3 = '訾博2';
print(name);
print(name2);
print(name3);
// 4、使用其他变量初始化变量
String name4 = name;
print(name4);
}
运行结果
三、常量
1、使用 final 关键字声明:只能赋值一次数据
代码演示
void main() {
final String name;
// 不写数据类型(不推荐)
final name2;
name = '訾博';
print(name);
name = "zibo"; // The final variable 'name' can only be set once.
}
运行结果
2、使用 const 关键字声明:声明时必须赋值
代码演示
void main() {
// The constant 'name' must be initialized.
const String name = '訾博';
// 不写数据类型(不推荐)
const name2 = '訾博';
print(name);
name = "zibo"; // Constant variables can't be assigned a value.
}
运行结果
四、类
1、基本使用
代码演示
void main() {
User user = User('訾博', 26);
user.say();
print(user.name);
print(user.age);
}
class User {
String name;
int age;
// 构造函数
User(this.name, this.age);
void say() {
print('name: $name, age: $age');
}
}
运行结果
五、const 关键字的一点点细节
1、常量:编译期间其值就已经确定
常量对象不会在运行时创建!
代码演示
void main() {
User user = const User('訾博', 26);
User user2 = const User('訾博', 26);
// 检查两个引用是否对同一个对象
print(identical(user, user2));
User user3 = User('zibo', 26);
User user4 = User('zibo', 26);
// 检查两个引用是否对同一个对象
print(identical(user3, user4));
}
class User {
final String name;
final int age;
// 构造函数,必须是 const ,否则会报错
const User(this.name, this.age);
}
运行结果
2、什么时候可以使用 const
使用在有 const 构造方法的类中,其所有成员必须以 final 修饰。
只有在应用未运行时就已经确定的量才是常量。
class User {
final String name;
final int age;
// 构造函数,必须是 const ,否则会报错
const User(this.name, this.age); // const 构造不能有方法体
}
3、只有被 const 的修饰的常量才不允许被修改
void main() {
User user = const User('訾博', 26);
const User user2 = User('訾博', 26);
// 检查两个引用是否对同一个对象
print(identical(user, user2));
user = User('zibo', 26); // 正常
user2 = User('zibo', 26); // 报错:Constant variables can't be assigned a value.
}
class User {
final String name;
final int age;
// 构造函数,必须是 const ,否则会报错
const User(this.name, this.age);
}
4、const 修饰列表也不允许修改
示例一
void main() {
List<int> list = const [1, 2, 3, 4, 5];
list.add(100);
// 运行时报错
// dart:_internal UnmodifiableListMixin.add
// test\Hello.dart 3:8 main
}
示例二
void main() {
const List<int> list = [1, 2, 3, 4, 5];
list.add(100);
// 运行时报错
// dart:_internal UnmodifiableListMixin.add
// test\Hello.dart 3:8 main
}
示例三
void main() {
List<int> list = [1, 2, 3, 4, 5];
list.add(100);
print(list); // [1, 2, 3, 4, 5, 100]
}
5、flutter 中使用 const 的注意点
被标记为 const 的相同 Widget 应被视为同一对象,然后却没有!
在 debug 模式下,(由于 Dart 的去重策略)你也许会发现两个 const 的 widget 长得并不完全一样。