Kotlin 进度记录

撸了一遍 Kotlin in Action。把一些重要的点记录一下。

目前进度:205/334

基本知识点:

  1. 基本语法
  2. 流程控制
    1. when
    2. for
    3. elvis 表达式
  3. 类型系统
    1. 可空类型
  4. 泛型
    1. 泛型形变
    2. 上下界关键字
    3. 泛型形变通配符
  5. Lambda
    1. 几种缩略方式
    2. 带接收者的 Lambda 参数
  6. 委托
    1. 接口委托对象实现
    2. 委托属性
  7. Coroutines *

*:没有熟练掌握的点

hashCode & 31

public int hashCode() {
    int h = hash;
    if (h == 0 && value.length > 0) {
        char val[] = value;

        for (int i = 0; i < value.length; i++) {
            h = 31 * h + val[i];
        }
        hash = h;
    }
    return h;
}

The value 31 was chosen because it is an odd prime. If it were even and the multiplication overflowed, information would be lost, as multiplication by 2 is equivalent to shifting. The advantage of using a prime is less clear, but it is traditional. A nice property of 31 is that the multiplication can be replaced by a shift and a subtraction for better performance: 31 * i == (i << 5) - i. Modern VMs do this sort of optimization automatically.

1990年,旅行者1号于距地球64亿公里处最后一次回望母星,拍摄下这张照片。

“我们成功地拍摄了这张照片,当你看它,会看到一个小点。那就是这里,那就是家园,那就是我们。你所爱的每个人,认识的每个人,听说过的每个人,历史上的每个人,都在它上面活过了一生。我们物种历史上的所有欢乐和痛苦,千万种言之凿凿的宗教、意识形态和经济思想,所有狩猎者和采集者,所有英雄和懦夫,所有文明的创造者和毁灭者,所有的皇帝和农夫,所有热恋中的年轻人,所有的父母、满怀希望的孩子、发明者和探索者,所有道德导师,所有腐败的政客,所有 ‘超级明星’,所有 ‘最高领袖’,所有圣徒和罪人——都发生在这颗悬浮在太阳光中的尘埃上。”

——卡尔 · 萨根,1994