6 dart
几天前,我注意到Dart的List类有single属性.然后,我阅读了官方API文档,并了解了此属性的工作原理.这意味着我知道其List.single工作原理如下:
print(['a'].single); // outputs 'a'
print(['a', 'b'].single) // throws StateError
Run Code Online (Sandbox Code Playgroud)
但我找不到该single物业的任何实际用例.当然,上面显示的幼稚代码在实际编程中毫无意义.
该物业的目的是什么?如果List包含两个或更多元素,为什么此属性会抛出异常?为什么它不是一个布尔属性,它代表List是否只有一个元素?Dart语言开发人员如何认为包含List.single在核心API中是有用的?
如果您对此有任何了解,如果您帮助我,我将非常感激.
您可以使用single以防万一只Iterable包含一个元素.这是一个真实世界的例子:我们有数据库连接,它具有query执行SQL查询的方法.该方法返回受查询影响的行.现在考虑一个查询,您只希望影响一行:
var row = databaseConnection.query('SELECT * FROM xyz WHERE id=5').single;
Run Code Online (Sandbox Code Playgroud)
如果没有或多于一行受到影响,这会给出一种简短的失败方式.当然,还可以写:
var rows = databaseConnection.query('SELECT * FROM xyz WHERE id=5');
if (rows.length != 1) {
throw new StateError('Something is wrong');
}
var row = rows.first;
Run Code Online (Sandbox Code Playgroud)
但这要长得多.或者你可能想要assert.
作为List工具Iterable,它也包含single.该single吸气剂也是有用的数据流,如果你希望一个元素.考虑与Stream行相同的示例:
databaseConnection.query('SELECT * FROM xyz WHERE id=5').single.then((row) {
print('Process the row');
});
Run Code Online (Sandbox Code Playgroud)