Kotlin初体验

0?wx_fmt=jpeg

今天多个群都炸了锅,原因很简单: Google "招安"了Kotlin , 成为Android 平台的first-class 开发语言。

据说在发布会上,这个消息的宣布获得台下最热烈的欢呼声。 这是为什么? 难道是因为Android开发者一直羡慕iOS有简单好用的Swift, 但是自己只能用“傻大笨粗” 的Java, 现在终于可以翻身了,Kotlin救世主降临了!

作为热爱技术的码农, 肯定第一时间要去折腾一下。 不要在百度浪费时间, 直奔官网(https://kotlinlang.org)就好。

嗯,官网还算大气, 不过作为开源的语言,应该用个动物做Logo 啊 :-)   参见《这个动物园,两年也逛不完

1Hello world 的秘密

Hello world很快就映入眼帘:

0?wx_fmt=png

别看代码很短,里边藏着很多秘密:

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 程序想调用这些函数怎么办? 没有类怎么调用?

0?wx_fmt=png

稍微想一想就会明白, 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 了:

0?wx_fmt=png

这个语法糖还是挺方便的, 要想定义一个真正的变量该怎么办?还有一个关键字: var

0?wx_fmt=png

至于那些流程控制语句  if, else, for ,while 实在是没什么新奇的,跳过。

这个when 是很不错的, 比java中的switch 不知道要高到哪里去了, 简直让人爱死了。

0?wx_fmt=png

3

0?wx_fmt=png

感觉不错吧?  

声明了一个类, 构造函数中的参数是name和age , 然后就可以当做属性来使用了,不用getter/setter 方法。

唉, 对我这个有分号强迫症的人, 语句之间不写分号还是挺痛苦的, 慢慢适应吧。

4继承和多态

0?wx_fmt=png

一个类想被继承, 必须标注为open 才行!

一个方法想被override , 展示出多态, 父类的方法也得open , 子类需要声明override!

这个规定要求真是严格啊!

5Data class

在Java中我们经常创建一些只保持数据,而没有啥实际行为的类, 再来点语法糖:

0?wx_fmt=png

hashCode, equals方法自动生成

toString自动生成

getter/setter自动生成

很贴心吧?

6集合

写程序,基本的数据结构是必备, kotlin也有语法糖前来助阵:

0?wx_fmt=png

正如你能想到的, 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 后端程序员, 我觉得可以初步了解, 观望一下。

你看到的只是冰山一角, 更多精彩文章,请移步《码农翻身文章精华

有心得想和大家分享? 欢迎投稿 ! 我的联系方式:微信:liuxinlehan  QQ: 3340792577


码农翻身

用故事给技术加点料

0?wx_fmt=jpeg

微信号:coderising
采用PyQt5框架与Python编程语言构建图书信息管理平台 本项目基于Python编程环境,结合PyQt5图形界面开发库,设计实现了一套完整的图书信息管理解决方案。该系统主要面向图书馆、书店等机构的日常运营需求,通过模块化设计实现了图书信息的标准化管理流程。 系统架构采用典型的三层设计模式,包含数据存储层、业务逻辑层和用户界面层。数据持久化方案支持SQLite轻量级数据库与MySQL企业级数据库的双重配置选项,通过统一的数据库操作接口实现数据存取隔离。在数据建模方面,设计了包含图书基本信息、读者档案、借阅记录等核心数据实体,各实体间通过主外键约束建立关联关系。 核心功能模块包含六大子系统: 1. 图书编目管理:支持国际标准书号、中国图书馆分类法等专业元数据的规范化著录,提供批量导入与单条录入两种数据采集方式 2. 库存动态监控:实时追踪在架数量、借出状态、预约队列等流通指标,设置库存预警阈值自动提醒补货 3. 读者服务管理:建立完整的读者信用评价体系,记录借阅历史与违规行为,实施差异化借阅权限管理 4. 流通业务处理:涵盖借书登记、归还处理、续借申请、逾期计算等标准业务流程,支持射频识别技术设备集成 5. 统计报表生成:按日/月/年周期自动生成流通统计、热门图书排行、读者活跃度等多维度分析图表 6. 系统维护配置:提供用户权限分级管理、数据备份恢复、操作日志审计等管理功能 在技术实现层面,界面设计遵循Material Design设计规范,采用QSS样式表实现视觉定制化。通过信号槽机制实现前后端数据双向绑定,运用多线程处理技术保障界面响应流畅度。数据验证机制包含前端格式校验与后端业务规则双重保障,关键操作均设有二次确认流程。 该系统适用于中小型图书管理场景,通过可扩展的插件架构支持功能模块的灵活组合。开发过程中特别注重代码的可维护性,采用面向对象编程范式实现高内聚低耦合的组件设计,为后续功能迭代奠定技术基础。 资源来源于网络分享,仅用于学习交流使用,请勿用于商业,如有侵权请联系我删除!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值