gpt4 book ai didi

dart - dart 中的可选类型有什么特别之处

转载 作者:行者123 更新时间:2023-12-03 03:28:55 25 4
gpt4 key购买 nike

“可选类型”有什么特别之处?

人们非常热衷于 Dart 支持“可选类型”,但是一旦一种语言支持鸭子类型(duck typing)——我就不能认为可选类型是理所当然的吗?不是很明显的特点吗?

最佳答案

当您指定类型注释时,您将信息传递给其他开发人员和工具。

考虑这个(相当长的)两个函数的例子——第一个没有类型信息,第二个有类型信息:

createConnection(details) {
var foo = details.host; // assume details has a host property
// do stuff
return connection;
}

相对

Connection createConnection(ConnectionParams details) {
var foo = details.host; // tools can validate that details has a host property
// do stuff
return connection;
}

当您调用第一个函数时,您需要知道(通过阅读 API 文档或源代码)该函数采用具有 host 的内容。 field 。您还需要知道该函数返回 Connection对象,而不是字符串或其他东西。

调用第二个函数,就知道可以传入任何符合 ConnectionParams定义的接口(interface)的对象。 , 你知道 Connection返回对象。

假设你有两个类:

class MySqlConn {
String host;
}

class PostgreSqlConn {
String host;
}


// elsewhere
var conn = new MySqlConn()..host = '127.0.0.1';
createConnection(conn);

尽管它是有效的鸭子类型(duck typing),但在第一个函数和这些类之间的代码中没有任何联系,除了它们都有一个同名的字段: host .

查看这两个类,我不知道它们的一种用途是将它们的实例传递给 createConnection()。功能(工具也很难理解这一点)。我无法为 createConnection 创建 API 文档链接回这两个类的函数。

当您添加更多类型信息时, 沟通意图 ,突然间,一切都走到了一起。

// define an interface
abstract class ConnectionParams {
String host;
}

// inform tools and humans that MySqlConn implements the interface
class MySqlConn implements ConnectionParams {
String host;
}

class PostgreSqlConn implements ConnectionParams {
String host;
}

现在工具和人都可以从第二个 createConnection 开始在静态代码中形成链接。函数返回到类,最终返回到接口(interface)。对于第一个示例,该链接仅在运行时创建。

关于dart - dart 中的可选类型有什么特别之处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17604180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com