sclass Best { A best; double score; transient O onChange; bool isNewBest(double score) { ret best == null || score > this.score; } double bestScore() { ret best == null ? Double.NaN : score; } double score() { ret bestScore(); } bool put(A a, double score) { if (a != null && isNewBest(score)) { best = a; this.score = score; pcallF(onChange); ret true; } ret false; } A get() { ret best; } bool has() { ret best != null; } Pair pair() { ret main.pair(best, bestScore()); } }