DanLevy.net

高阶编程

探索基于数组和集合的流水线技术

Hero image for 高阶编程

探索基于数组和集合的流水线技术

一种反模式?

这是一次关于将所有内容编码为数组所能获得优势的探索。(借鉴SmallTalk的数组中心概念)

以下是一些指导原则:

  1. 所有输入都应视为类数组结构。即使数组长度为1。

  2. 高阶函数通常应同时接受并返回数组。(循环的回调方法除外:map/reduce/each/filter)

  3. 99%的开发者代码都患有我称之为急性模式过剩综合症的疾病。

  4. 警惕臃肿的类支撑模型——伴随着所有可预测的特征:脆弱的实例状态,有太多可调节的参数和开关,数据库事务、SQL锁、异步/互斥(总能第一次就完美运行),使用惯用的属性获取器/设置器,而你的public/private/final/等使用方式绝对正确,对吧?

  5. 让我用一个常见问题来演示,并添加一些基于集合的思考。

  6. 一个假设的博客网站有许多文章,还有更多的帖子(评论)。

  7. 我们添加一个delete方法(如下)——同时支持单个或数组输入。

package net.danlevy.why.java___why.you.got.all.the.dots____it.must.be.all.the.factories;
public class Post {
public String title;
public Date created;
public String message;
public Post(String title, String message) {
this.title = title;
this.message = message;
this.created = new Date();
}
public Date isArchived() {
return this.created < new Date(2015, 0, 1);
}
// `Post.delete` 可以接受单个Post或Post[]数组调用
public static int delete(Post post) {
List<Post> posts = new List<Post>(post);
return delete(posts)
}
public static int delete(List<Post> posts) {
return posts.map(Dao.remove);
}
}

如果我的Java有些生疏,请见谅。