现在开始我们将学习dart, dart是flutter的基础,如果想通过flutter去开发app,就必须学习dart。 而flutter目前能算是最好的跨平台开发方式。 这里我推荐直接用dart pad这个网站去运行dart代码,网址是dartpad.dev,如果是在中国可以使用dartpad.cn。
Dart 编程中最基础也最核心的部分 ------ 变量与数据类型。如果把程序比作一座大厦,那么变量就是砖瓦,数据类型则是砖瓦的材质规格。掌握这一节的内容,能为我们后续的 Dart 学习打下坚实基础。
一、变量声明:给数据起个 "名字"
在 Dart 中,变量就像一个带标签的盒子,用来存储各种数据。声明变量的方式有三种,分别适用于不同场景,我们逐一来看。
1.显式声明类型(推荐)
直接指定变量类型,代码可读性更强,也是企业开发中的规范写法。
dart
void main() {
String username = "Flutter"; // 显式声明为字符串
int score = 95; // 显式声明为整数
bool isPass = true; // 显式声明为布尔值
// 类型不匹配会直接编译报错
// String height = 175; // 错误:不能将int赋值给String
}
2.用dynamic
声明动态类型变量
dynamic声明的变量可以随时更改类型,Dart 不会进行类型检查,灵活性高但安全性低。
dart
void main() {
dynamic value = "Hello";
print(value.length); // 正确:此时是String类型,有length属性
value = 100; // 可以改为int类型
// print(value.length); // 运行时错误:int类型没有length属性
}
3.用var
声明变量(类型推断)
var是最简洁的声明方式,Dart 会根据初始值自动推断变量类型,并且一旦确定类型就不能更改。
dart
void main() {
// 声明并初始化变量
var age = 25; // Dart推断为int类型
var name = "Dart"; // 推断为String类型
var isStudent = true; // 推断为bool类型
// 尝试修改为其他类型会报错
// age = "25"; // 错误:int类型变量不能赋值字符串
}
二、Dart 的基本数据类型
Dart 有四种最常用的基本数据类型,分别对应不同的数据形态,我们一个个来认识。
1. 整数类型(int)
用于存储没有小数部分的数字,范围是 - 2⁶³ 到 2⁶³-1。
dart
void main() {
int a = 10;
int b = -5;
int c = 0x1A; // 十六进制(0x开头),等价于26
print(a + b); // 输出5
print(c * 2); // 输出52
}
常用操作:+(加)、-(减)、*(乘)、/(除,返回 double)、~/(整除,返回 int)、%(取余)。
浮点类型(double)
用于存储带小数部分的数字,遵循 64 位双精度 IEEE 754 标准。
dart
void main() {
double pi = 3.14159;
double gravity = 9.8;
double scientific = 2.5e3; // 科学计数法,等价于2500.0
print(pi * 2); // 输出6.28318
print(gravity / 2); // 输出4.9
}
注意:int和double都属于num类型,num类型的变量可以同时接收整数和浮点数。
dart
num x = 10; // 正确
x = 3.14; // 也正确
字符串类型(String)
用于存储文本数据,用单引号(')或双引号(")包裹,支持多行字符串(三引号)。
dart
void main() {
String single = '单引号字符串';
String double = "双引号字符串";
String multi = """
多行字符串
可以换行
保留格式
""";
print(single);
print(double);
print(multi);
}
字符串拼接的三种方式:
- 用
+
号连接 - 用
$
引用变量(单个变量) - 用
${}
执行表达式(复杂计算)
dart
void main() {
String firstName = "张";
String lastName = "三";
int age = 20;
// 方式1:+号拼接
String fullName1 = firstName + lastName; // "张三"
// 方式2:$引用变量
String info1 = "姓名:$fullName1"; // "姓名:张三"
// 方式3:${}执行表达式
String info2 = "明年年龄:${age + 1}"; // "明年年龄:21"
}
4. 布尔类型(bool)
只有两个值:true(真)和false(假),用于逻辑判断。
dart
void main() {
bool isReady = true;
bool hasError = false;
int score = 85;
bool isPass = score >= 60; // true
print(isReady && hasError); // false(逻辑与)
print(isReady || hasError); // true(逻辑或)
print(!isReady); // false(逻辑非)
}
注意:Dart 是强类型语言,不能用0或非空值代替false/true,这一点和 JavaScript 不同。
dart
// 错误示例
bool flag = 0; // 编译报错:不能将int赋值给bool
三、类型转换:数据类型的 "变形术"
在实际开发中,我们经常需要在不同类型之间转换数据,比如将用户输入的字符串转为数字进行计算。Dart 提供了便捷的转换方法,但要注意处理转换失败的情况。
1. 字符串与数字互转
字符串转数字
- int.parse():将字符串转为 int(只能转整数格式)
- double.parse():将字符串转为 double(可转整数或小数格式)
dart
void main() {
String numStr1 = "123";
int num1 = int.parse(numStr1); // 123
String numStr2 = "3.14";
double num2 = double.parse(numStr2); // 3.14
// 转换失败会抛出FormatException
try {
int error = int.parse("abc");
} catch (e) {
print("转换失败:$e"); // 输出错误信息
}
}
数字转字符串
- 用toString()方法
- 整数转指定小数位数的字符串:toStringAsFixed(n)
dart
void main() {
int a = 100;
String str1 = a.toString(); // "100"
double b = 3.1415;
String str2 = b.toString(); // "3.1415"
String str3 = b.toStringAsFixed(2); // "3.14"(保留2位小数)
}
2.其他常用转换
- bool转字符串:true.toString() → "true"
- 数字转布尔:0和0.0在判断中不会自动转为false(需显式比较)
dart
void main() {
int x = 0;
if (x == 0) {
// 必须显式判断
print("x是0");
}
}
四、实战练习:温度转换器
我们来做一个小练习巩固今天的知识:编写一个程序,将摄氏度转换为华氏度,公式是:华氏度 = 摄氏度 × 1.8 + 32。
dart
void main() {
// 1. 声明并初始化摄氏度变量
double celsius = 25.5;
// 2. 计算华氏度
double fahrenheit = celsius * 1.8 + 32;
// 3. 输出结果(保留1位小数)
print("摄氏度:$celsius ℃");
print("华氏度:${fahrenheit.toStringAsFixed(1)} ℉");
}
运行结果:
dart
摄氏度:25.5 ℃
华氏度:77.9 ℉
大家可以尝试修改celsius的值,看看转换结果是否正确,也可以尝试用int类型实现整数温度的转换。