dart学习第1节: 变量与数据类型 —— 程序的 “基本元素”

现在开始我们将学习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类型实现整数温度的转换。

相关推荐
用户736004375562 小时前
【Flutter 必备插件】HTTP 封装 dio
flutter
风清云淡_A3 小时前
【Flutter3.8x】flutter从入门到实战基础教程(四):自定义实现一个自增的StatefulWidget组件
前端·flutter
喝拿铁写前端1 天前
Flutter 学习笔记 - 搭建(macOS 版)
前端·flutter
ALLIN1 天前
Mac Flutter fvm 多版本管理安装与常用指令(详细使用)
flutter
梦想改变生活1 天前
《Flutter篇第二章》MasonryGridView瀑布流列表
android·flutter
SoaringHeart2 天前
Flutter小技巧:IM音浪效果实现
前端·flutter
Bryce李小白3 天前
Flutter中实现页面跳转功能
flutter
RaidenLiu3 天前
Flutter 多环境配置:flavor
前端·flutter
忆江南3 天前
Widget 、 Element 和 RenderObject 关系
flutter