Dart 概述
学习 Dart 编程语言的基础知识。
在本节课中,我们将学习 Dart 的一些基础知识。Dart 是一种专为在任意平台上开发高性能应用而设计的编程语言。它是一种面向客户端优化的语言,与针对服务端优化的 Java 或 JavaScript 不同。Dart 也是 Flutter 的基础,为 Flutter 应用提供语言支持和运行时环境。
熟悉 Kotlin 的开发者可能会觉得 Dart 很容易上手。或者更广泛地说,任何熟悉面向对象编程语言的开发者都能较快掌握 Dart。
Dart 是一种强类型语言,这意味着大多数表达式(如变量赋值、函数返回类型等)在编译时都会进行严格的数据类型检查。因此,许多错误和异常会在编译阶段就被发现。
变量
1var count = 25;
如果我们使用 var 关键字而不是明确指定数据类型,Dart 会通过其类型推断机制自动确定类型。在此例中,它会推断出类型为 int。
同样,我们也可以显式声明变量类型:
1int count = 25;
由于 Dart 具备类型推断功能,通常建议使用 var 而不显式写出数据类型。但如果我们声明变量时无法立即初始化,则必须明确指定类型:
1int count;
当使用 var 或具体类型(如 int)声明变量时,允许后续重新赋值。但如果可以确定变量一旦初始化后就不会再被修改,那么作为一种良好的编程实践,应在声明时使用 final 关键字:
1final count = 25;
函数
Dart 中的函数与 Java 中的函数类似,唯一的区别是访问修饰符需要通过命名方式体现。要声明一个私有方法,函数名必须以下划线 _ 开头;否则,默认为公有方法。以下代码展示了 main.dart 文件无法访问 _privateGreet 函数的情况。
可以先直接运行示例,然后再取消注释第 9 行和第 10 行,观察并对比结果差异。
1import 'dart:convert'; 2 3import 'another_class.dart'; 4 5void main() { 6 final anotherClass = AnotherClass(); 7 final publicGreeting = anotherClass.publicGreet(); 8 print(publicGreeting); 9 //final privateGreeting = anotherClass._privateGreet(); 10 //print(privateGreeting); 11}
上述代码定义了一个名为 AnotherClass 的类,包含两个方法:
publicGreet:这是一个公共方法,可以从类外部访问。_privateGreet:这是一个私有方法,只能在类内部或同一库中的其他类中访问。
main 函数创建了 AnotherClass 的实例,并调用了 publicGreet 方法,然后将结果打印到控制台。_privateGreet 方法未被调用。
在面向对象编程中,通常建议将不希望被外部代码调用的方法设为私有。这有助于封装类的内部实现细节,防止外部代码依赖这些细节,从而在修改内部实现时不会破坏外部逻辑。
区别非常明显,对吧?正如预期,私有成员无法从其他类中访问。
final 与 const
final 关键字
我们在学习变量声明时已经见过 final 关键字。final 用于声明不可变的变量,即一旦赋值后其值不能再更改。因此,final 修饰的是变量本身。
1final z = 3; 2final x = DateTime.now();
const 关键字
const 修饰的是值。这意味着当我们使用 const 声明对象、变量、组件等时,表示其底层的值或状态在编译期就已确定且不会改变。
理解 const 的关键在于:const 对象的值必须能够在编译时计算出来。例如,1+2 永远等于 3,这个结果是固定的。而 DateTime.now() 每次调用都会返回不同的时间值,即使两次调用之间仅相差一纳秒,因此它的值依赖于运行时,不能用 const。
1const text = Text('Hello, World!');
注意:使用
final声明的列表虽然本身不可重新赋值,但其内容仍可修改,比如添加或删除元素;而使用const声明的列表不仅不可重新赋值,其所有元素也必须固定,整个列表是完全不可变的。