前言
标识符用于命名变量
、函数
、类
、库
和其他编程元素
。Dart
的标识符遵循特定的规则
和约定
,以确保代码的可读性
和一致性
。
关键字用于定义语法结构
、控制流程
和声明类型
等。
操千曲而后晓声,观千剑而后识器。虐它千百遍方能通晓其真意。
一、标识符
1.1、命名规则
1.1.1、字母或下划线开头
- 标识符必须以
字母
(a-z
或A-Z
)或下划线(_
)开头
。
1.1.2、后续字符
- 后续字符可以是
字母
、数字
(0-9
)或下划线
。
1.1.3、区分大小写
name
和Name
是两个不同的标识符。
1.1.4、不能使用关键字
- 标识符
不能
与Dart
的保留关键字
相同。
示例代码:
// 合法的标识符
int myVariable = 42;
String _privateVariable = "This is private";
void calculateSum() {}
class MyClass {}
enum Color { red, green, blue }
// 非法的标识符
int 1variable = 42; // 不能以数字开头
int class = 42; // 'class' 是关键字
int @symbol = 42; // '@' 不是合法字
1.2、命名约定
虽然Dart
没有强制性的命名约定,但遵循社区推荐的命名约定可以使代码更易读和维护。
1.2.1、驼峰命名法(Camel Case)
- 变量和方法:首字母小写,后续单词首字母大写。
int myVariable = 42;
void calculateSum() {}
1.2.2、帕斯卡命名法(Pascal Case)
- 类、枚举、类型别名:每个单词首字母大写。
class MyClass {}
enum Color { Red, Green, Blue }
1.2.3、全小写加下划线
- 常量和全局变量:全部小写字母,单词之间用下划线连接。
const int max_value = 100;
final String app_name = "My App";
1.2.4、私有成员
- 以下划线开头:表示该成员是私有的,仅在定义它的库中可见。
int _privateVariable = 42;
void _privateMethod() {}
1.2.5、特殊标识符
- 下划线(_):单个下划线 _ 可以用作占位符,表示不需要使用的变量或参数。
void ignoreValue(_) {
// 忽略传入的值
}
// 调用时忽略返回值
ignoreValue(42);
1.2.6、内置标识符
Dart
有一些内置的标识符,它们具有特殊
的含义或用途:
this
:引用当前实例。super
:引用父类实例。new
:创建对象实例(Dart 2.0 之后可选)。null
:表示空值。true
和false
:布尔常量。
示例代码:
// 使用不同的命名约定
int myVariable = 42;
String _privateVariable = "This is private";
void calculateSum(int a, int b) => print(a + b);
class MyClass {
String name;
MyClass(this.name);
void sayHello() {
print("Hello, my name is $name.");
}
// 私有方法
void _privateMethod() {
print("This is a private method.");
}
}
// 常量和全局变量
const int MAX_VALUE = 100;
final String APP_NAME = "My App";
// 枚举
enum Color { Red, Green, Blue }
void main() {
MyClass myObject = MyClass("Alice");
myObject.sayHello();
// 使用枚举
Color favoriteColor = Color.Red;
print(favoriteColor);
// 忽略值
ignoreValue(42);
}
void ignoreValue(_) {
// 忽略传入的值
}
二、关键字
2.1、基本类型关键字
用于定义基本的数据类型
。
num
:数值类型。int
:整数类型。double
:浮点数类型。String
:字符串类型。bool
:布尔类型(true
或false
)。dynamic
:动态类型,表示可以是任何类型。void
:无返回值类型。
2.2、变量声明关键字
用于声明变量
和常量
。
var
:声明一个类型推断的变量。final
:声明一个只能赋值一次的变量(编译时常量或运行时常量)。const
:声明一个编译时常量,其值在编译时确定且不可改变。
2.3、控制流关键字
用于控制程序的执行流程。
if
和else
:条件语句。switch
和case
:多分支选择语句。for
和while
:循环语句。do
:先执行后判断的循环语句。break
:跳出当前循环或switch
语句。ontinue
:跳过当前循环的剩余部分,继续下一次循环。return
:从函数中返回值并结束函数执行。
2.4、函数和方法关键字
用于定义函数
、方法
和匿名函数
。
function
:定义函数(通常省略不写)。=>
:箭头函数语法,用于单行表达式函数体。async
和await
:用于异步编程。sync
和async
:用于生成同步和异步流(Stream
)。
2.5、类和对象关键字
用于定义类
、接口
、枚举
和扩展类
。
class
:定义一个类。extends
:用于继承父类。implements
:实现接口。with
:混入(mixin
)其他类的功能。enum
:定义枚举类型。typedef
:定义类型别名。external
:声明外部实现的方法或变量。abstract
:定义抽象类或方法。factory
:定义工厂构造函数。get
和set
:定义属性的getter
和setter
方法。operator
:重载操作符。
2.6、异常处理关键字
用于处理程序中的异常。
try
:尝试执行可能抛出异常的代码块。catch
:捕获异常。finally
:无论是否抛出异常都会执行的代码块。throw
:抛出异常。
2.7、库和导入关键字
用于管理库
和导入模块
。
library
:定义一个库。import
:导入其他库或模块。export
:导出库中的成员供其他库使用。part
和part of
:用于分拆大型库为多个文件。
2.8、元数据关键字
用于为声明附加额外信息。
@
:用于元数据注释,如@override
、@deprecated
等。metadata
:定义元数据。
2.9、其他关键字
用于特定用途。
covariant
:用于参数协变,允许子类覆盖父类方法时使用更具体的参数类型。late
:延迟初始化变量,在首次访问时才进行初始化。rethrow
:重新抛出捕获到的异常。
示例代码:
// 基本类型
int age = 30;
double height = 1.75;
String name = "Alice";
bool isStudent = true;
// 变量声明
var message = "Hello, World!";
final pi = 3.14;
const gravity = 9.8;
// 控制流
if (age >= 18) {
print("Adult");
} else {
print("Minor");
}
// 函数和方法
void greet(String name) => print("Hello, $name");
// 类和对象
class Person {
String name;
int age;
Person(this.name, this.age);
void sayHello() {
print("Hello, my name is $name and I am $age years old.");
}
}
// 异常处理
try {
// 可能抛出异常的代码
} catch (e) {
// 捕获异常
} finally {
// 总是执行的代码
}
// 库和导入
import 'dart:math';
// 元数据
class Calculator {
@override
String toString() => '这是一个计算器';
}
三、总结
理解 Dart
的标识符规则
和命名约定
对于编写清晰、一致且易于维护的代码至关重要。通过遵循这些规则和约定,可以确保代码的可读性
和可靠性
。
通过分类整理 Dart
的关键字
,可以更好地理解每个关键字的作用
和适用场景
。合理使用这些关键字可以编写出更加清晰
、简洁
和高效
的代码。
码字不易,记得 关注 + 点赞 + 收藏 + 评论