Dart基础——语法规范

本文详细介绍了Dart编程的语法规范,包括字符串连接、布尔值转换、集合使用、参数处理、变量初始化、成员创建、构造函数设计、异步操作、标识符命名和代码格式化等方面,旨在提升代码质量和可读性。
摘要由CSDN通过智能技术生成

字符串

两个常量字符串(不是变量,是放在引号中的字符串),你不需要使用 + 来连接它们。

推荐的写法

print(
    'ERROR: Parts of the spaceship are on fire. Other '
    'parts are overrun by martians. Unclear which are which.');

不推荐的写法

print('ERROR: Parts of the spaceship are on fire. Other ' +
    'parts are overrun by martians. Unclear which are which.');
不要在字符串中使用不必要的大括号

如果要插入是一个简单的标识符,并且后面没有紧跟着的字母,则应省略 {}

推荐的写法

'Hi, $name!'
"Wear your wildest $decade's outfit."
//标识符后面有紧跟着的字母了 加上大括号用以区分
'Wear your wildest ${decade}s outfit.'

不推荐的写法

'Hi, ${name}!'
"Wear your wildest ${decade}'s outfit."

布尔值

使用? ?将空值转换为布尔值。

当表达式的值可以为真、假或null,并且您需要将结果传递给不接受null的对象时,此规则适用。一个常见的情况是一个判断空值的方法调用被用作条件:

不推荐的写法

if (optionalThing?.isEnabled) {
  print("Have enabled thing.");
}

如果optionalThing为空,此代码将抛出异常。(if只支持判断bool值,不支持null)要解决这个问题,您需要将null值“转换”为true或false。虽然您可以使用==来完成此操作,但我们建议使用?? :

推荐的写法

//如果你想要optionalThing是空值时返回false
optionalThing?.isEnabled ?? false;

//如果你想要optionalThing是空值时返回true
optionalThing?.isEnabled ?? true;

不推荐的写法

// 如果你想要optionalThing是空值时返回false
optionalThing?.isEnabled == true;

// 如果你想要optionalThing是空值时返回true
optionalThing?.isEnabled != false;

PS:如果这里你有些不理解,可以先阅读一下作者之前的文章Flutter基础——Dart语法,学习一下’?’ ‘??’ ‘??=’ 的使用

两种操作都会产生同样的结果,而且做的都是正确的事情,但首选??操作符,主要有三个原因。

  1. ??运算符清楚地表明,代码与空值有关。

  2. 当左边的布尔表达式不会为空时,==true看起来像是多余的。

  3. ??false 和 ??true 清楚地表明了当表达式为null时将使用什么值。对于true,你必须清楚左边表达式的布尔逻辑,才会明白想要 左边表达式是null时返回false 为什么要用 true。

集合

Dart 集合中原生支持了四种类型:list, map, queue, 和 set。 下面是应用于集合的最佳实践。

尽可能的使用集合字面量。

两种方式来构造一个空的可变 list : []List() 。 同样,有三种方式来构造一个空的Map map:{}Map(), 和 LinkedHashMap()

如果想创建一个固定不变的 list 或者其他自定义集合类型,这种情况下你需要使用构造函数。 否则,使用字面量语法更加优雅。 核心库中暴露这些构造函数易于扩展,但是通常在 Dart 代码中并不使用构造函数。

推荐的写法

var points = [];
var addresses = {};

不推荐的写法

var points = List();
var addresses = Map();

如果需要的话,你可以提供一个泛型。

推荐的写法

var points = <Point>[];
var addresses = <String, Address>{};

不推荐的写法

var points = List<Point>();
var addresses = Map<String, Address>();

注意,对于集合类的 命名 构造函数则不适用上面的规则。 List.from()Map.fromIterable() 都有其使用场景。 如果需要一个固定长度的结合,使用 List() 来创建一个固定长度的 list 也是合理的。

不要使用 .length 来判断一个集合是否为空。

通过调用 .length 来判断集合是否包含内容是非常低效的。相反,Dart 提供了更加高效率和易用的 gette

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值