这个例子再一次阐释了将复杂的代码拆解为小块的方式,而这些小块可以使用函数的方式进行重新装配,并形成完整的功能。本章的目标并不是为Core Image定义一个完整的API,而是想说明在更实际的案例中如何使用高阶函数和复合函数。
为什么要做这么多努力呢?事实上Core Image API已经很成熟并能够提供几乎所有你可能需要的功能。但是尽管如此,我们相信本章所设计的API也有一些优点:
· 安全 ——使用我们构筑的API几乎不可能发生由未定义键或强制类型转换失败导致的运行时错误。
· 模块化 ——使用 >>> 运算符很容易将滤镜进行组合。这样你可以将复杂的滤镜拆解为更小、更简单,并且可复用的组件。此外,组合滤镜与组成它的组件是完全相同的类型,所以你可以交替使用它们。
· 清晰易懂 ——即使你从未使用过Core Image,也应该能够通过我们定义的函数来装配简单的滤镜。要得到结果,你并不需要知道像 kCIOutputImageKey 一样特殊的字典键,也不需要关心对 kCIInputImageKey 或 kCIInputRadiusKey 这样的键进行初始化。单看类型,你几乎就能够知道如何使用API,甚至不需要更多文档。
我们的API提供了一系列能够用来定义和组合滤镜的函数。使用和复用任何自定义的滤镜都是安全的。每个滤镜都能被独立测试和理解。比起原来的Core Image API,我们的设计会更让人偏爱。如果要说理由,则相信上面几点足够让人信服。