【Dart】001-变量、常量、类

文章目录

  • ​​【Dart】001-变量、常量、类​​
  • ​​一、Hello World​​
  • ​​二、变量​​
  • ​​1、定义和使用​​
  • ​​代码演示​​
  • ​​运行结果​​
  • ​​2、声明和初始化变量的四种方式​​
  • ​​代码演示​​
  • ​​运行结果​​
  • ​​三、常量​​
  • ​​1、使用 final 关键字声明:只能赋值一次数据​​
  • ​​代码演示​​
  • ​​运行结果​​
  • ​​2、使用 const 关键字声明:声明时必须赋值​​
  • ​​代码演示​​
  • ​​运行结果​​
  • ​​四、类​​
  • ​​1、基本使用​​
  • ​​代码演示​​
  • ​​运行结果​​
  • ​​五、const 关键字的一点点细节​​
  • ​​1、常量:编译期间其值就已经确定​​
  • ​​代码演示​​
  • ​​运行结果​​
  • ​​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);
}

运行结果

訾博
訾博
訾博2
訾博

三、常量

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');
}

}

运行结果

name: 訾博, age: 26
訾博
26

五、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);

}

运行结果

true
false

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 长得并不完全一样。