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类型实现整数温度的转换。

相关推荐
Gorit11 分钟前
使用 AI + Flutter-OH 开发 HarmonyOS 应用
人工智能·flutter·harmonyos
啥都想学点18 分钟前
从 Flutter 前端到 Spring Boot 后端:2026 年技术栈落地路线图(实战版)
前端·spring boot·flutter
西西学代码12 小时前
Flutter---回调函数
开发语言·javascript·flutter
圣光SG12 小时前
Vue.js 从入门到精通:技术成长之路
flutter
恋猫de小郭21 小时前
Swift 6.3 正式发布支持 Android ,它能在跨平台发挥什么优势?
android·前端·flutter
i-阿松!1 天前
PCB板子+ flutter前端 + go后端
物联网·flutter·pcb工艺·go1.19
恋猫de小郭1 天前
Flutter 3.41.6 版本很重要,你大概率需要更新一下
android·前端·flutter
亚历克斯神2 天前
Flutter for OpenHarmony: Flutter 三方库 mutex 为鸿蒙异步任务提供可靠的临界资源互斥锁(并发安全基石)
android·数据库·安全·flutter·华为·harmonyos
钛态2 天前
Flutter 三方库 smartstruct 鸿蒙化字段映射适配指南:介入静态预编译引擎扫除视图及数据模型双向强转类型错乱隐患,筑稳如磐石的企业级模型治理防线-适配鸿蒙 HarmonyOS ohos
flutter·华为·harmonyos
键盘鼓手苏苏2 天前
Flutter 组件 csv2json 适配鸿蒙 HarmonyOS 实战:高性能异构数据转换,构建 CSV 流式解析与全栈式数据映射架构
flutter·harmonyos·鸿蒙·openharmony