博客
关于我
Dart:2.通过一个简单程序来理解Dart基础语法
阅读量:388 次
发布时间:2019-03-05

本文共 7370 字,大约阅读时间需要 24 分钟。

一 . 一个简单的 Dart 程序

// 这是程序执行的入口。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

2 . Dart 程序执行入口

每个 Dart 程序都需要一个 main() 方法作为程序的入口。这个方法可以返回一个值或没有返回值,但通常用于初始化程序的执行流程。

3 . 基础数据类型变量申明

num m = 10;	// 数字类型变量申明int n = 10;	// 整数类型变量申明bool isBool = true;	// 布尔类型变量申明double l = 10.001;	// 浮点类型变量申明String lastName = 'bird';	// 字符串类型变量申明,使用 `...` (或者 `"..."`) 表示字面量// var 一种不指定类型声明变量的方式,建议使用以上强制类型来使用,这样编译器不需要去推导类型var k = 'animal';var o = 10;

4 . 字面量

赋值语句后面的值即为字面量,比如以上的 10、true、bird 等。

5 . 打印内容

print("要输出的内容......");

6 . 字符串插值

在字符串字面量中引用变量或者表达式,通过 $variableName 或者 ${expression} 形式引用变量。

7 . Functions 方法简单介绍

Dart 是一个真正的面向对象语言,方法也是对象并且具有一种 Function 类型。这意味着,方法可以赋值给变量,也可以当做其他方法的参数。也可以把 Dart 类的实例当做方法来调用。

A . 定义方法的示例

printNumber(num aNumber) {    // 省略内容}

B . 只有一个表达式的方法

可以选择使用缩写语法来定义:

bool isNoble(int atomicNumber) => _nobleGases[atomicNumber] != null;

二 . 变量

1 . 变量

通过以上简单的 Dart 程序对变量已经有所了解,下面来对变量具体讲讲。

2 . 变量默认值

没有初始化的变量自动获取一个默认值为 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

3 . Dart 常用数据类型

  • num - 数字类型
  • int - 整数类型
  • bool - 布尔类型
  • double - 浮点类型
  • String - 字符串类型

4 . 可选的类型

在声明变量的时候,你可以选择加上具体类型:

String name = 'Bob';

添加类型可以更加清晰地表达你的意图。IDE 编译器等工具有可以使用类型来更好的帮助你,可以提供代码补全、提前发现 bug 等功能。一般使用 var 而不是具体的类型来定义局部变量。

5 . const 变量和 final 变量声明

如果你以后不打算修改一个变量,使用 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(); // 报错

三 . 常见数据类型的操作

1 . String 字符串换行和字符串拼接

A . 换行
String content = '''    multipart    ...    string  ''';print(content);
B . 字符串拼接

除了使用加法,还可以像 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}');

2 . int 和 double 数字 整形和浮点型

int num1 = 123;double price = 123.452323232;print(price * num1);price = 12;print(price * num1);

3 . bool 类型和 if 判断

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');}

4 . 类型判断

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');}

5 . List(列表)

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);

6 . Map 类型

与 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']);

四 . Dart 关键字

表格 1:常用 Dart 关键字及其用途

关键字 描述
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)欢迎扫描下列二维码关注“余弦的自留地”公众微信号:![二维码图片](https://img-blog.csdnimg.cn/20191012090912457.jpg?x-oss-process=image/watermark&type=ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3NzbWFyaw==,size_16,color_FFFFFF,t_70)

转载地址:http://bzzzz.baihongyu.com/

你可能感兴趣的文章
nodejs-mime类型
查看>>
nodejs中Express 路由统一设置缓存的小技巧
查看>>
NodeJs学习笔记001--npm换源
查看>>
Node入门之创建第一个HelloNode
查看>>
NOIp2005 过河
查看>>
NOPI读取Excel
查看>>
NoSQL&MongoDB
查看>>
NotImplementedError: Cannot copy out of meta tensor; no data! Please use torch.nn.Module.to_empty()
查看>>
npm install报错,证书验证失败unable to get local issuer certificate
查看>>
npm run build 失败Compiler server unexpectedly exited with code: null and signal: SIGBUS
查看>>
npm run build部署到云服务器中的Nginx(图文配置)
查看>>
npm WARN deprecated core-js@2.6.12 core-js@<3.3 is no longer maintained and not recommended for usa
查看>>
npm切换到淘宝源
查看>>
npm前端包管理工具简介---npm工作笔记001
查看>>
npm和yarn清理缓存命令
查看>>
npm和yarn的使用对比
查看>>
npm报错unable to access ‘https://github.com/sohee-lee7/Squire.git/‘
查看>>
npm的问题:config global `--global`, `--local` are deprecated. Use `--location=global` instead 的解决办法
查看>>
NPOI之Excel——合并单元格、设置样式、输入公式
查看>>
NPOI利用多任务模式分批写入多个Excel
查看>>