本文共 7370 字,大约阅读时间需要 24 分钟。
// 这是程序执行的入口。main() {// var number = 42; // 定义并初始化一个变量。// printNumber(number); // 调用一个方法。// }// 定义个方法。printNumber(num aNumber) {// print('The number is $aNumber.'); // 在控制台打印内容。// num m = 10; // 数字类型变量申明// print(m); // 在控制台打印内容。// int n = 10; // 整形类型变量申明// print(n); // 在控制台打印内容。// bool isBool = true; // 布尔类型变量申明// print(isBool); // 在控制台打印内容。// double l = 10.001; // 浮点型类型变量申明// print(l); // 在控制台打印内容。// String lastName = 'bird'; // 字符串类型变量申明,使用 `...` (或者 `"..."`) 表示字面量// print(lastName); // 在控制台打印内容。// // var 一种不指定类型声明变量的方式,建议使用以上强制类型来使用,这样编译器不需要去推导类型// var k = 'animal'; // var类型变量申明// print(k); // 在控制台打印内容。// var o = 10; // var类型变量申明// print(o); // 在控制台打印内容。// } The number is 42.1010true10.001birdanimal10
每个 Dart 程序都需要一个 main() 方法作为程序的入口。这个方法可以返回一个值或没有返回值,但通常用于初始化程序的执行流程。
num m = 10; // 数字类型变量申明int n = 10; // 整数类型变量申明bool isBool = true; // 布尔类型变量申明double l = 10.001; // 浮点类型变量申明String lastName = 'bird'; // 字符串类型变量申明,使用 `...` (或者 `"..."`) 表示字面量// var 一种不指定类型声明变量的方式,建议使用以上强制类型来使用,这样编译器不需要去推导类型var k = 'animal';var o = 10;
赋值语句后面的值即为字面量,比如以上的 10、true、bird 等。
print("要输出的内容......"); 在字符串字面量中引用变量或者表达式,通过 $variableName 或者 ${expression} 形式引用变量。
Dart 是一个真正的面向对象语言,方法也是对象并且具有一种 Function 类型。这意味着,方法可以赋值给变量,也可以当做其他方法的参数。也可以把 Dart 类的实例当做方法来调用。
printNumber(num aNumber) { // 省略内容} 可以选择使用缩写语法来定义:
bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;
通过以上简单的 Dart 程序对变量已经有所了解,下面来对变量具体讲讲。
没有初始化的变量自动获取一个默认值为 null。类型为数字的变量如何没有初始化其值也是 null。
num m; // 未初始化的数字类型变量,默认值为 nullprint(m == null); // 输出 trueint n; // 未初始化的整数类型变量,默认值为 nullprint(n == null); // 输出 truebool isBool; // 未初始化的布尔类型变量,默认值为 nullprint(isBool == null); // 输出 truedouble l; // 未初始化的浮点类型变量,默认值为 nullprint(l == null); // 输出 trueString lastName; // 未初始化的字符串类型变量,默认值为 nullprint(lastName == null); // 输出 true
num - 数字类型int - 整数类型bool - 布尔类型double - 浮点类型String - 字符串类型在声明变量的时候,你可以选择加上具体类型:
String name = 'Bob';
添加类型可以更加清晰地表达你的意图。IDE 编译器等工具有可以使用类型来更好的帮助你,可以提供代码补全、提前发现 bug 等功能。一般使用 var 而不是具体的类型来定义局部变量。
如果你以后不打算修改一个变量,使用 final 或者 const,两者的区别:
相同点,都是修饰一个不可变更的变量。
const lastName = 'postbird';final firstName = 'bird ';lastName = '123'; // 报错firstName = '123'; // 报错
const 只能通过静态数据赋值,否则会报错,给 const 变量赋值非 const 字面量,则报错如下:
const lastName = 'postbird';final firstName = 'bird ';final time = new DateTime.now();const time2 = new DateTime.now(); // 报错
String content = ''' multipart ... string ''';print(content);
除了使用加法,还可以像 JS 的模板字符串直接拼接,语法差不多,只不过不需要反引号,普通引号即可,$v,其中如果只是变量名,可以省略大括号 $v:
String str1 = 'dart1';String str2 = 'darg2';int age = 21;print('$str1 $str2 ${age.toString()}');print('${str1} ${str2} ${age.toString()} ${age} ${age * age}'); int num1 = 123;double price = 123.452323232;print(price * num1);price = 12;print(price * num1);
if 判断只能是 bool 类型的返回值,这点和 JS 这弱类型语言完全不同:
bool flag = true;if(flag) { print('--- true');}int num1 = 1;double num2 = 1.0;String num3 = '1';if(num1 == num2) { print('num1 == num2');} else { print('num1 != num2');}if(num1 == num3) { print('num1 == num3');} else { print('num1 != num3');} 如果 if 使用了非 bool 类型判断会报错:
int a = 1;if(a) { // 报错 print('true');} is 操作符能够判断类型归属,比如 A is B,能够返回 bool 类型,判断 A 是否属于 B 类型。
var value = 123;if(value is String) { print('${value} is string');} else if (value is int) { print('${value} is int');} else if (value is double) { print('${value} is double');} else { print('${value} is other type');} List 类型是使用非常多的类型,与 JS 的 Array 类似,初始赋值可以直接给一个列表,也可以通过 new List() 指定空的列表。
默认列表子项支持的值类型是 dynamic,不限制具体类型,如果需要限制具体类型则需要使用泛型,比如 new List() 限制子项类型。
List 作为对象提供了一些的方法和属性:API 文档地址:https://api.dart.dev/dev/2.4.0-dev.0.0/dart-core/List-class.html
通过 add() 能够添加一个子项,通过 addAll() 能够追加另一个 List:
List l1 = [123, '123', 'postbird'];print(l1);List l2 = new List();l2.add('abc');l2.add(123);l2.addAll(['iterable', '222', '333', 123]);print(l2);List l3 = new List();l3.add('abc');// l3.add(123);print(l3);List l4 = new List();l4.add(123);l4.add(123.12);print(l4);List l5 = new List();l5.add(1);l5.add(3);l5.add(2);l5.add(4);l5.add(6);l5.add(2);print(l5);l5.sort();print(l5); 与 JavaScript 对象类似,在 OC 中称为字典。
可以通过字面量指定,也可以通过声明一个 new Map() 的空 Map。
API 文档地址:https://api.dart.dev/dev/2.4.0-dev.0.0/dart-core/Map-class.html
var person = { 'name': 'ptbird', 'age': 24, 'work': ['it1', 'it2']};print(person);print(person.toString());print(person['name']);print(person['age']);print(person['work']);Map person2 = new Map();person2['name'] = 'name2';person2['age'] = 24;person2['work'] = ['it1', 'it2'];print(person2);print(person2['work']); | 关键字 | 描述 |
|---|---|
| abstract | 用于定义只能在继承类中被访问的方法或属性。 |
| continue | 用于跳过当前循环体并继续执行下一个循环或函数。 |
| false | 关键字,用于布尔值 false。 |
| new | 用于创建对象或调用构造函数。 |
| this | 指代当前对象。 |
| yield | 用于生成值,常用于迭代器。 |
| assert | 用于在运行时检查代码逻辑是否正确。 |
| default | 用于提供默认值,常用于函数参数或构造函数。 |
| final | 用于修饰不能变更的常量或变量。 |
| null | 关键字,表示没有值的变量或对象。 |
| throw | 用于抛出异常。 |
| operator | 用于定义运算符重载。 |
| true | 关键字,用于布尔值 true。 |
| async | 用于定义异步函数或方法。 |
| defer | 异步操作的执行延迟到事件循环之外。 |
| finally | 用于异步操作完成后执行的代码。 |
| for | 用于遍历集合(如 List 或 Map)的元素。 |
| part | 用于代码分割。 |
| try | 用于处理异常,捕获异常并进行处理。 |
| catch | 用于处理异常,捕获异常信息。 |
| throw | 用于抛出异常。 |
| rethrow | 用于重新抛出之前捕获的异常。 |
| dynamic | 表示可以改变类型的变量。 |
| get | 用于定义只读属性。 |
| set | 用于定义属性的设置。 |
| const | 用于修饰只能在初始化时赋值的常量或变量。 |
| factory | 用于定义生成对象的方法。 |
| library | 用于定义 Dart 应用的库。 |
| sync | 用于同步异步函数或方法。 |
| else | 用于 if、else 或 try-catch 的条件判断。 |
| if | 用于条件判断。 |
| return | 用于从函数或方法返回值。 |
| var | 用于不指定类型的变量声明。 |
| while | 用于执行循环。 |
| case | 用于 switch-case 语句中的情况选择。 |
| catch | 用于异常处理。 |
| continue | 用于跳过当前循环体。 |
| default | 用于 switch-case 语句的默认情况选择。 |
| else | 用于 if、else 或 try-catch 的条件判断的其他情况选择。 |
| extends | 用于继承类的扩展。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
| finally | 用于异步操作完成后执行的代码。 |
最后,建议使用 return 语句来终止函数或方法的执行。 |
### 五 . 参考资料- [Dart 官方语言概览](http://dart.goolev.org/guides/language/language-tour)- [Dart 变量和操作](http://www.ptbird.cn/dart-variable-operation.html#menu_index_3)欢迎扫描下列二维码关注“余弦的自留地”公众微信号:
转载地址:http://bzzzz.baihongyu.com/