Car*_*ght 2 functional-programming class dart
想象一个像这样的愚蠢的类:
class ConditionalWorker{
var validityChecker= (inputs)=>true;
ConditionalWorker(this.validityChecker)
...
Run Code Online (Sandbox Code Playgroud)
现在我的问题是,声明有效性检查器字段的正确方法是什么?
本教程建议使用typedefs. 但这不太实用。首先,编写大量只能使用一次的 typedef 是一件苦差事。其次,这些 typedef 的出现会污染我的 IDE 的自动完成功能。
效果var最好,使用自定义设置器/构造函数参数来使其始终保持特定类型,但我知道样式指南不鼓励这样做。
我可以做Function<bool>,但这只是一个更美化的变量,工作量是相同的。
很遗憾,因为拥有这样的函数是完全合法的:
bool every(bool test(E element));
Run Code Online (Sandbox Code Playgroud)
其中参数是一个定义良好的函数,但我不能以相同的方式声明字段:
bool test(E element);
Run Code Online (Sandbox Code Playgroud)
但希望还有一些我没有想到的同样好的事情。对吗?
如果您想要一个比 更具体的函数类型Function,则需要一个typedef.
如果您不喜欢为每个返回类型命名 typedef,您可以自己定义泛型函数类型。
typedef R function0<R>();
typedef R function1<S,R>(S arg1);
typedef R function2<S,T,R>(S arg1. T arg2);
typedef R function3<S,T,U,R>(S arg1, T arg2, U arg3);
Run Code Online (Sandbox Code Playgroud)
然后你可以写:
function1<int,int> curryAdd(int x) => (int y) => x + y;
Run Code Online (Sandbox Code Playgroud)
或者,如果function0您觉得不好,您可以将它们命名为NullaryFunction、UnaryFuncytion、BinaryFunction、TernaryFunction或您喜欢的任何其他名称。