Kotlin 核心编程:送书,速来[已结束]


#1

Kotlin 核心编程 福利 送书

论坛看到有小伙伴咨询入门书籍,我们又争取到了送书的福利!

自拿到了《Kotlin 核心编程》(以下简称『核心编程』)这本书,即便是通读了一遍之后,我到现在也是没事儿就翻一翻,特别是函数式编程这块儿,时不时还会有新的收获。

『核心编程』的作者在更早的时候是经验丰富的 Scala 开发者,这一点从书中多处拿 Kotlin 跟 Scala 做对比来升华知识点的讲解就可见一斑。Scala 是一门集大成的语言,我们都知道它很难,原因嘛,高手秀肌肉设计出来的语言当然是你能想到的特性它支持,你想不到的特性它也支持,你既能用它写出一目了然的白话文,也能写出晦涩难懂的黑魔法。它太灵活了,我虽然没有在生产环境中用过 Scala,但为了学好 Kotlin,理解 Kotlin 语法设计的初衷,也花过一些时间来认真了解这门语言,通读了《快学 Scala》之后,我发现 Kotlin 当中可能有 80% 的特性或多或少『抄袭』『借鉴』或者『规避』了 Scala 的语法。

Kotlin 的设计者在设计之初也许就是想要将 Kotlin 设计成一个精炼实用易上手的 Scala 和一个简洁灵活现代化的 Java。

这样看来,Java 开发者转 Kotlin 需要接触非常多陌生的概念,例如属性、object、companion object、泛型型变、高阶函数等等,而这些 Scala 本身就有,Scala 开发者的视角看 Kotlin 的感觉处处很熟悉。『核心编程』这本书相比你看到的其他国内出版的 Kotlin 书籍有一个很大的特点就是视角丰满了很多,国内的书籍普遍存在抄官方文档的毛病在这本书里面根本见不到,这本书也许是你在阅读官方文档产生疑惑时最好的补充材料之一。

大家都在讲高阶函数,我们知道高阶函数就是参数或返回值类型是函数类型的函数,那么为什么它就是高阶函数了呢?书中给出了解释:

一阶值构造器:通过传入一个具体的值,来得到另一个具体的值。

那么二阶值构造器呢?那就是传入一个具体的值或者传入一个一阶值构造器 来得到一个具体的值或者另一个 一阶值构造器。这样高阶函数的概念就很清楚了。

说到这儿我倒是想起数学里面,二次函数求一阶导数的结果是一次函数,求二阶导数的结果就相当于一次函数求一阶导数,结果就是常数。

当然,书里面其实是对比高阶函数介绍高阶类型的,尽管 Kotlin 不支持高阶类型,但了解这个概念是有意义的,且不说也许哪天 Kotlin 为了进一步支持函数式编程中 typeclass 的定义引入高阶类型。

这样讲是不是『核心编程』不适合入门呢?

其实也不是,前几章的内容还是非常基础的,这也是 Kotlin 对 Java 友好的地方,你可以在 Kotlin 当中找到至少一半儿与 Java 接近的概念,Java 开发者能够轻松驾驭这部分内容。即便是这样基础的内容,『核心编程』除了讲清楚知识之外,也有细致的思考,例如: AnyAny? 的继承关系究竟是怎样的?

这样的问题我在读到这本书之前没有真正想过,甚至不觉得这是个问题,但细细想来,如果我们对这二者的关系的理解总是含混不清,对于不少类型相关的概念将会难以深入理解和掌握。

好啦,说了这么多,不就是为了推荐这本书吗?我们不仅推荐,而且还专门联系华章出版社的老师再搞一次送书活动,活动的规则如下:

  • 活动形式:在论坛本帖回复大家学习 Kotlin 的经历和感悟,回复中赞数最多的前五名将有机会获得赠书。
  • 活动时间:即日起至 2019年11月5日上午6点整

补充说明:并列情况则按发帖时间排序

当然,如果有小伙伴等不及,可以立刻马上猛戳下方京东双11活动页购买,有满减活动哦~

京东双11 - 华章科技大促
image


欢迎关注 Kotlin 中文社区!

中文官网:www.kotlincn.net/

中文官方博客:www.kotliner.cn/

公众号:Kotlin

知乎专栏:Kotlin

CSDN:Kotlin中文社区

掘金:Kotlin中文社区

简书:Kotlin中文社区


#2

#3

以目前各种语言的发展历程来看,Kotlin 的未来的 Java,Scala 是未来的 Kotlin。不过区别是 Java 包袱太重,甩不掉。Scala 踩坑太多,也有包袱。只有 Kotlin 在吸收前辈的经验教训前进。不过 Kotlin 还是太年轻,满足不了我无穷无尽的欲望,现在用着 Scala,虽然很多实现很烂,但就是有那么几个高级语法,让我欲罢不能。期待什么时候 Kotlin 超过 Scala


#4

消灭零回复~ (结果因为太长,没抢到沙发。。。)

这个回复不占赠书名额~

我的经历是。。。14年的夏天,杭州的天气很热。。。我用我的小破笔记本(那会儿还没用上 Mac)下载了 IntelliJ 社区版的源码,想要搞一个插件装装X,结果,编译的时候就给我报错了,说不认识一个叫 xxx.kt 的文件。。我当时心里一凉,尼玛 Groovy 和 Scala 劳资还没整明白,咋又来一个!想了想,算了,还是干活去吧,当时痴迷于 Apache 的各种开源框架,也没多想,也顾不上,于是放弃了。。。

14年的秋天,回到了北京,又一次想要弄一个插件装装 X,又一次下载了全薪的 IntelliJ 社区版的源码,又一次报错说有一个 xxx.kt 的文件不认识,我。。搜了下,原来是 JB 搞得语言啊,还是 0.7 还是几来着忘了,然后就装了个 Kt 的插件,勉强编过了 IJ 的源码。那时候发现 IJ 源码里面已经有了很多 Kt 写的 Test Case 了。

当时也出于好奇,随便写了个 Hello World试了试,不过感觉没有 Scala 好玩,就扔了。。。

15年,又一次。。。我为什么每隔一段时间就要编一下 IJ 源码?因为我一直没有成功写出一个插件,还一直有一颗想写的心。。。。不过这会儿 Kt 已经相对成熟了,还有一本国外大佬写的 Kotlin for Anroid Developers,看到 KAE 的时候,被 findViewById 折磨良久,自己写了个反射注解框架又换了 BufferKnife 的我,瞬间像是找到了亲人,正好要帮一个朋友做毕设(是个搞设计的朋友,但想要在毕设里面有个 App,厉不厉害!所以我不是帮他作弊),就试了一下 Kt,嗯很香。当时写了几篇文章在 Bugly 公众号赚了点儿书钱,公众号的老哥 kevin 对我后续持续输出文章给予了莫大的帮助。

于是又在 16年2月 Kotlin 1.0 发布的时候,写了一篇 Android开发必备知识:为什么说Kotlin值得一试

这一年,我们单独起了个项目,我和另一名同事一起开发,我想都不想就用 Kotlin 写了,那是我写的第一个生产环境的 Kotlin 项目,后来我去做别的项目,这个项目的后续维护估计也是坑了不少同事,有一次在组内做分享就直接用 Kotlin 代码做了 PPT,结果被导师修理了一顿:你怎么讲东西也不考虑下听众的实际情况呢!

16年9月,为了让更多的同事了解 Kotlin,开始自己录视频教程 Kotlin 从入门到放弃,当然没过多久发现他们估计也没啥兴趣,就发到了网上,同时创建 微信公众号 『Kotlin』,开始发布视频和文章。

17年3月,公众号的小伙伴团子提议建个 QQ 群,于是现在的 『Kotlin 大』这个 QQ 群诞生了,直到当年 Google IO 宣布 Kotlin 作为 Android 一级开发语言的前一天晚上,这个群才 400 人,结果第二天就直接爆了,我还因为这个在知春路地铁站出站的时候紧急给自己开了个 QQ 超级会员,把群升级为 2000 人大群。当然后面的故事就有点儿麻烦了,因为一个东西火了之后,它就不再纯粹,群里干什么的都有,让小伙伴们一时手足无措。公众号也一夜涨粉 1700,随后逐步过万。

几乎同一时期,开始折腾官方的博客翻译,论坛,还认识了翻译官网的贾哥,自己用 Kotlin 从零开发论坛的鹏志等小伙伴。

公众号文章的更新我坚持每周一更大概持续了两年多,今年6月左右因为公司的一些事情开始断更,后来恢复成现在的月更。。虽然更新频率慢了但大多数时间还是花在 Kotlin 身上了,每天几次打开冷清的论坛看看有没有新问题出现,或者刷刷 Kotlin 的 Slack 之类,更新下被吐槽看不懂的 《破解 Kotlin 协程系列》。

当然之前还有在 17年11月 Android 技术大会做了一次三个小时的分享,不巧的是那次感冒还没好,于是讲的过程中一直担心体力不支,当然讲完的时候吃了好几块红烧肉才缓过来,也有幸结识了一些以前在我常读的书的封面才能看到的朋友。

更巧的是,18年11月的同一天 JetBrains 跑到北京搞了个开发者大会,我去讲了一段儿数据类,结果因为是下午第一个,PPT 放早了,导致时间看错,一度很尴尬。

有时候回过头来想想,这几年我究竟在干什么,能想起来的就是一个字:累。因为事情总是一个接一个,不过看着Kotlin 被越来越多开发者接纳,还是感到很开心的。


#5

Kotlin 跟 微信一样克制,让我这种喜欢炫技的人很难受呀~ 所以我喜欢用 QQ,哈哈,话说最近 Linux版 QQ 更新了,也是神奇


#6

你把Q群号给我交了 :rage::triumph::crazy_face:


#7

Kotlin 中文社区①群:603441485


#8

今天是我学习Kotlin的第二天,作为萌新应该是没啥机会的获得太多赞的,不过还是要来说下。

前几天因为看了篇介绍Kotlin协程的文章而入的坑,昨天去图书馆借了本书就开始学了(很凑巧,借的就是《核心编程》),一晚上看了前两章。这本书确实还不错,能比直接看菜鸟文档和刷入门视频多了解到一点Kotlin的“哲学”。所以我也推荐其他和我一样刚入坑的萌新看看这本书。(PS:可以和我一样看看当地的图书馆有没有)


#9

恰饭恰饭


#10

别给我, 给也不要


#11

。。。


#12

资瓷资瓷,万一中奖了呢


#13

我来凑凑人气:smiley:


#14

先拿到书,看不看再说。


#15

我喜欢你这个态度~ 哈哈


#16

群主棒棒哒!!赞一个!!


#17

凑热闹


#18

也学了不久 Kotlin 了,说一说对 Kotlin 的看法吧:
还行

首先对 Java 的 100% 兼容是一个优点,可以让许多 Java 玩家无缝衔接到 Kotlin 上。
不过某些深度 Kotlin 玩家或许就不这么认为了,Java 的许多缺点限制了 Kotlin,比如泛型擦除(至少我认为这是一个不太好的特性)。

下面来说说 Kotlin 的优点吧

  • Null 安全:虽然是编译时的空安全,但对比起 Java 的默认 Nullable 还是好多了。
  • 函数式:函数式也开始变成主流的 编程方式 了,虽然我这种深度函数式玩家用起来不太舒服。
  • 便利:比如 data class,sealed class,object,还有对 lambda 的特殊优化(inline,最后一个参数的函数可以放在括号外)

缺点也是不少的(其实就只是吐槽而已)

  • 编译时空安全:这导致你不能运行时拿到一个类型是否为 Nullable,而且因为 Nullable 和 Notnull 的标签是字节码等级的(没记错的话),所以也无法通过反射拿到。
  • 不完全的运算符重载:比如 (?.) 运算符就没有提供重载,这可是函数式中很重要的 fmap 啊!
  • 超级垃圾的 gradle.build.kts 解析:能不能不要动不动就爆红?

如果你对 Kotlin 中的函数式很感兴趣的话,我推荐你可以接触一下 Haskell,比垃圾 Kotlin 有趣多了(就像某冰给我强行安利 Haskell 一样)

算了,只是要一本书而已,干嘛写的这么正经。
最后我遵守三个从不:从不缺席,从不中奖,从不放弃。


#19

垃圾 Kotlin?你竟然说垃圾 Kotlin ?

二营长!你他娘的 意大利。。。。

面呢!是友军!


#20

:hugs:


京ICP备16022265号-2 Kotlin China 2017 - 2018