学习 Dart 编程语言:初学者指南
Source: Dev.to
Dart 正在因跨平台移动应用而人气飙升,尤其是 Flutter 生态多年来的爆炸式增长。
本文用 6 分钟的阅读时间解释 Dart 的核心要点。无需任何先前经验:只需复制粘贴代码片段并进行实验。阅读完后,你将掌握 Dart 编程语言的核心。
Introduction: Why Dart Rules Mobile Dev
如果你正准备使用 Flutter 开发移动应用,Dart 是你的优化强力引擎:类型安全、空安全,并编译为原生代码以实现丝般顺滑的性能。我们将覆盖变量、运算符、字符串、条件语句、集合、for 循环、函数以及空安全——这些是构建动态 UI 和 API 驱动应用的核心工具箱。打开 DartPad.dev 并跟着练习。准备好了吗?开始编码吧!
2025 Trend Tie‑In: 随着 Firebase ML 等 AI 工具对快速数据处理的需求,这些基础能够回答诸如 “如何在 Flutter 中安全解析 JSON?” 和 “自适应布局的高效列表实现?” 等热门问题。
Variables: The Building Blocks Everyone Trips On
变量用于保存应用的数据,例如用户名或分数。Dart 兼顾类型安全与灵活性:var 自动推断类型,final 在运行时只能赋值一次,const 在编译时锁定常量值。
void main() {
var name = 'Samuel'; // Inferred as String
final age = 1; // Can't reassign after init
const pi = 3.14; // Immutable from compile time
print('$name is $age years old (pi: $pi)');
}
Pro Tip: final 适用于 API 获取(运行时),const 适用于硬编码的 UI 常量。在你的第一个 Flutter 应用中,final 能防止有状态组件中的重新赋值错误。
Operators: Crunch Numbers and Logic Like a Pro
运算符用于处理数学、比较和决策。
void main() {
int a = 10, b = 3;
print(a + b); // 13
print(a % b); // 1 (remainder)
print(a > b && b != 0); // true
}
这些是游戏逻辑或表单校验的核心——移动开发的日常必备。空感知运算符将在空安全章节中介绍。
Trend Alert: 当应用集成 AI(例如用户输入过滤)时,逻辑运算可以大幅缩短处理时间,降低设备电池消耗。
Strings: Mastering Text for Dynamic UIs
字符串用于管理文本:单引号/双引号用于普通字符串,三引号用于多行。使用 $var 或 ${expression} 进行插值。
void main() {
String greeting = 'Hello, Dart!';
String multiline = '''
This is
a poem.
''';
print('$greeting World: ${2 + 2}'); // Hello, Dart! World: 4
print(multiline);
}
使用 \ 转义引号。字符串在 Flutter 的调试控制台打印以及全局化应用的本地化中都非常重要。
Conditionals: Branching for Smarter App Logic
条件语句控制程序流向:if、else if、else 为基础;三元运算 condition ? true : false 用于简写。switch 处理多分支情况。
void main() {
int score = 85;
if (score >= 90) {
print('A+');
} else if (score >= 80) {
print('B'); // Runs here
} else {
print('Keep grinding');
}
// Ternary example
String grade = score >= 90 ? 'A' : 'B';
print(grade);
}
Switch 示例:
switch (score ~/ 10) { // Integer division
case 9:
print('Great!');
break;
default:
print('Try again');
}
这些是认证流程或自适应 UI 的核心——Flutter 的条件渲染(如 Visibility 小部件)正是基于此实现的。
Tip: 对布尔值不要写 == true,Dart 的隐式转换已经足够。
Collections: Lists and Maps for Data Power
集合用于组织数据:List(有序数组)和 Map(键值对)。使用 ... 进行展开合并。
void main() {
List fruits = ['apple', 'banana'];
fruits.add('cherry'); // Now 3 items
print(fruits[1]); // banana (0‑indexed)
Map scores = {'Course': 100, 'User': 95};
scores['Newbie'] = 80;
print(scores['Course']); // 100
// Spread example
List more = [...fruits, 'date'];
}
列表在待办事项类应用中大放异彩;Map 用于解析 JSON API——为 Flutter 的 ListView.builder 提供数据源。
Pro Tip: 索引要谨慎(从 0 开始),以避免在动态信息流中出现崩溃。
For Loops: Iterating Efficiently
for 循环用于重复执行:经典计数器或 for‑in 用于遍历集合。
void main() {
// Classic for‑loop example (original snippet incomplete)
// for (int i = 0; i < /* condition */; i++) {
// // ...
// }
// For‑in loop
var nums = [1, 2, 3];
for (var num in nums) {
print(num * 2); // 2,4,6
}
}
在 Flutter 开发中坚持使用这些循环——while 循环稍后再介绍。使用 length - 1 可避免常见的越界错误。
Trend Tip: 优化循环可以降低电池消耗;在真实设备或模拟器上测试,以确保移动端性能。
Functions: Reusable Code for Modular Apps
函数用于封装逻辑。可以使用位置可选参数 ([]) 或命名可选参数 ({}),以及箭头语法简化代码。
int add(int a, int b) => a + b; // Arrow shorthand
void greet([String? name = 'World']) { // Positional optional
print('Hi, $name!');
}
void main() {
print(add(5, 3)); // 8
greet('Dart'); // Hi, Dart!
greet(); // Hi, World!
}
命名示例:greet(name: 'Flutter').
Pro Tip: 默认值可以防止用户输入导致的空参数问题。
Nullability: The Crash‑Proof Shield
Dart 自 2.12 起进入空安全时代,引入 ? 表示可空,! 表示断言非空,?? 表示回退值,late 用于延迟初始化。
String? nullableName; // Can be null
String name = nullableName ?? 'Default'; // Safe default
void main() {
int? maybeNum = null;
// print(maybeNum! + 1); // Crashes if null—avoid!
print(maybeNum ?? 42); // 42 if null
}
空安全消除了 Flutter 部署中大量的运行时错误。
Hot Trend: 空安全让 Dart 成为可靠移动开发的首选语言,尤其在配合异步 API 调用时更显优势。
Conclusion: Level Up to Flutter Mastery
你已经掌握了 Dart 的核心概念——现在可以在 DartPad 中动手练习,获得实战经验。
Top 5 Mobile Dev Questions This Answers (2025 Trends)
- Nulls in APIs? – 查看 Nullability 部分(Firebase 集成)。
- Efficient data lists? – 集合 + 循环用于动态 UI。
- Reusable UI logic? – 函数实现组件模块化。
- Text for global apps? – 字符串用于国际化(i18n)。
- Conditional layouts? – 条件语句用于不同屏幕的自适应布局。
你的第一个 Dart 项目是什么?在下方分享你的想法吧! 🚀