- 大话编程
- 一个故事讲完 https
- C 老头和 Java 小子的硬盘夜话
- 我是一个函数
- 操作系统是个大骗子?
- 90 后 老头儿 和 00 后 Go 小子的硬盘夜话
- 爱炫耀的数据库老头儿
- 浏览器:一个家族的奋斗
- 浏览器家族的安全反击战
- 黑客三兄弟
- 从读写分离到 CQRS,张大胖是如何解决性能问题的?
- 两个程序的爱情故事
- 两个程序的爱情故事(续)
- 烂代码传奇
- 机房夜话
- 干掉状态:从 session 到 token
- 张大胖的 docker 之路
- 从 SOA 到微服务
- XML 的传奇人生
- 从密码到 token, 一个授权的故事
- 编程世界的那把锁
- 加锁还是不加锁,这是一个问题
- 这个动物园, 两年也逛不完
- 张大胖和 CAP 定理
- 一个翻译家族的发家史
- 张大胖和单元测试
- Java 帝国
- 一个著名的日志系统是怎么设计出来的?
- Java 帝国之泛型
- Java 帝国之动态代理
- 从兄弟到父子:动态代理在民间是怎么玩的?
- Java 注解是怎么成功上位的?
- Java EE 要死掉了?
- Java 帝国之宫廷内斗
- Java 帝国之宫廷内斗(2)
- 当世界上只剩下一个 Java 程序员
- 持久化:Java 帝国反击战
- 什么是框架?
- 学习 Java 虚拟机没用? 听听当事人是怎么说的!
- 聊聊 Java 平台上的非 Java 语言
- Java 帝国之消息队列
- Java 帝国之 JMS 的诞生
- Java 帝国之单例设计模式
- 对 Java Inputstream 的一次采访
- ASM: 一个低调成功者的自述
- 序列化: 一个老家伙的咸鱼翻身
- Java IO 的自述
- JDK 先生最近有点烦
- 什么是框架(续)?
- 说 空话,做实事: 谈谈多态
- Kotlin 初体验
- 小白科普
- 小白科普:分布式和集群
- 什么是 Zookeeper?
- 小白科普:悲观锁和乐观锁
- 小白科普:LDAP 有什么用?
- 小白科普:服务那点事儿
- 小白科普:Netty 有什么用?
- 老司机经验
- 后端程序员都做些什么?
- 为什么要学习 HashMap 的底层原理?
- 小心,别被今日头条给困住了!
- 对自己狠一点,开始写作吧
- 开源代码啃不动,不如先定个小目标
- Python 这么简单还用学吗?
- 作为一个有追求的程序员,你应该掌握的七种武器
- 给设计模式说句公道话
- 时间是这么被浪费掉的
- 你真正付出了全部努力了吗?
- 写给初学者:编程的本质
- 在大学期间更应该学习什么?
- 看看 悲催 的码农得学多少东西?
- 学习编程的四兄弟
- 那些年,我后悔没做好的事情
- 我为什么对后端编程情有独钟?
- 当我们在学习编程语言时,我们在学习什么?
- 编程需要多少数学知识?
- 想成为编程高手,一定要学汇编吗?
- 你必须理解的计算机核心概念
- 你的需求是怎么描述的?
- 白话敏捷软件开发
- 人在职场
- 凡事必先骑上虎背,给性格内向的程序员聊几句
- 为什么能力优秀的人当了主管以后反而不行了呢?
- 不想做技术了,还有一条路
- 纪念我最有效率的一次加班
- 书写「简历」时,需要规避的错误。
- 上天还是入地?
- 工作 6 年,半路出家到 CTO
- 只是 Work 还不够,更重要的是 Think
- 我所尊敬的三位女程序员
- 我们向印度人学习什么?
- 你去下家面试,怎么评价你在这家公司做的工作?
Kotlin 初体验
今天多个群都炸了锅,原因很简单: Google "招安"了 Kotlin , 成为 Android 平台的 first-class 开发语言。
据说在发布会上,这个消息的宣布获得台下最热烈的欢呼声。 这是为什么? 难道是因为 Android 开发者一直羡慕 iOS 有简单好用的 Swift, 但是自己只能用“傻大笨粗” 的 Java, 现在终于可以翻身了,Kotlin 救世主降临了!
作为热爱技术的码农, 肯定第一时间要去折腾一下。 不要在百度浪费时间, 直奔官网(https://kotlinlang.org) 就好。
嗯,官网还算大气, 不过作为开源的语言,应该用个动物做 Logo 啊。
1Hello world 的秘密
Hello world 很快就映入眼帘:
别看代码很短,里边藏着很多秘密:
1. 这是一个强类型语言, 变量的类型确定以后,就不能改了
没有声明类型的 msg 怎么办? 肯定是自动推导出来的, 是个字符串。此外 msg 类型已经确定为字符串, 你要是想把 msg 改成整数: msg = 5 ,肯定是要报错的。
强类型有个巨大的优势,就是可以在编译期自动做类型检查, 帮助程序员发现很多错误。
2. 怎么和 Go, Scala 一样, 把类型放到了变量名的后边, 让人有真气逆行的感觉, 不调整下还真容易走火入魔。为什么要这样?
Kotlin 的 FAQ 上说: We believe it makes the code more readable. Besides, it enables some nice syntactic features, for instance, it is easy to leave type annotations out. Scala has also proven pretty well this is not a problem.
嗯,更有可读性,漂亮的语法特征, 似乎有点道理, 到底是不是这样还得再研究, 既然人家已经确定这样了,就慢慢适应吧。
3. 为了输出 hello world 终于不用写一个无用的类了!
但是等等, 这个 Kotlin 不是号称可以和 Java 100%互操作 吗, 那 java 程序想调用这些函数怎么办? 没有类怎么调用?
稍微想一想就会明白, Kotlin 背后肯定需要生成一个类, 在这里类中有个静态方法 sum, 这样才能让别人使用嘛。
4. 我”热爱 ”的 public static void 去哪里了? System.out 去哪儿了
对不起, kotlin 需要的是精简的语法, 已经把细节给你隐藏起来了, 如果你用 javap 看看背后生成的类,就会看到 public static void main() 老老实实的在那里待着呢!
至于 System.out, 肯定是自动导入了, 你要是不嫌麻烦,写成 java.lang.System.out.println("hello world") 应该也可以运行。
2 基本语法
Kotlin 支持定义一个只能赋值一次的变量, 其实就是 final 了:
这个语法糖还是挺方便的, 要想定义一个真正的变量该怎么办?还有一个关键字: var
至于那些流程控制语句 if, else, for ,while 实在是没什么新奇的,跳过。
这个 when 是很不错的, 比 java 中的 switch 不知道要高到哪里去了, 简直让人爱死了。
3 类
感觉不错吧?
声明了一个类, 构造函数中的参数是 name 和 age , 然后就可以当做属性来使用了,不用 getter/setter 方法。
唉, 对我这个有分号强迫症的人, 语句之间不写分号还是挺痛苦的, 慢慢适应吧。
4 继承和多态
一个类想被继承, 必须标注为 open 才行!
一个方法想被 override , 展示出多态, 父类的方法也得 open , 子类需要声明 override!
这个规定要求真是严格啊!
5 Data class
在 Java 中我们经常创建一些只保持数据,而没有啥实际行为的类, 再来点语法糖:
hashCode, equals 方法自动生成
toString 自动生成
getter/setter 自动生成
很贴心吧?
6 集合
写程序,基本的数据结构是必备, kotlin 也有语法糖前来助阵:
正如你能想到的, Kotlin 可以轻松地调用 Java 的集合来做事情。
7 总结
Kotlin 的特性有很多,没法在这里一一展示, 就体验到这里吧。
总的来说, Kotlin 这门语言简化了 Java , 完全是从一个是实用派的角度,而不是学院派的角度。
我在写代码的时候,总是有一种写 Javascript 的感觉。
相比于 JRuby , Jython 这些一移植到 JVM 上的语言, Kotlin 和 Java 和互操作感觉更加自然,但可能也是受限于 Java 平台,写出的代码还是没有 Ruby 那么优雅。
每个语言的流行都需要一个引爆点,就像 Ruby on Rails 引爆了 Ruby 一样, Android 也许是之前不那么流行的 Kotlin 的引爆点。
如果你是 Android 开发者, 可以马上学习下 Kotlin ,毕竟有 Google 的支持,相比 Java, Kotlin 能极大的减少代码量,代码看起来也清晰易懂, 值得投入。如果是 Java 后端程序员, 我觉得可以初步了解, 观望一下。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论