kotlin一点摸索
关于kotlin
缘起-为什么写这篇博客
之前并未对kotlin这个语言有过了解(毕竟在上刘钦老师的课前没有写过安卓应用),最早看到这个名字,还是5月份知乎的timeline上看到相关问题如何看待 Kotlin 成为 Google 正式支持的 Android 开发一级编程语言?
“在5月17日(北京时间5月18日凌晨)的Google I/O 2017 Keynote上, 谷歌宣布,将Kotlin语言作为安卓开发的一级编程语言……Kotlin由JetBrains公司开发,与Java 100%互通,并具备诸多Java尚不支持的新特性。“
当时匆匆浏览了各路大V的答案,只感觉加州甲骨文律师所招了不少怨(笑),不仅有程序员对java语法颇有微词,也惹得谷歌寻求jetbrain的合作。
而后刘老师便发布了博客作业的DDL,此时不了解kotlin,更待何时?
初探kotlin-与java的对比
作为一个懒人,了解kotlin的第一步并没有去直接看Basic Syntax - Kotlin Programming Language,而是选择From Java to Kotlin。直接复制文档内容过于敷衍,也很无趣,我列举一下自己的感受:
- 没有类型声明,变量统一只用val声明,具体类型由赋值的类型决定,不过,当没有赋值时,就必须声明类型了,这样的设计稍比java复杂,但是减少了码农的一点负担。
相比于java,对null的处理更为优秀。在阅读java与kotlin的对比时,我只是觉得kotlin利用符号?或者!!来进行null检查更为简洁,而在阅读了Kotlin 作为 Android 开发语言相比传统 Java 有什么优势? - 回答作者: 覃超这个答案后,才进一步理解了kotlin为什么这样设计,简单的说,在检查和处理 nullable 变量的时候,Kotlin 更加有效。
由于第二条的原因,在 java中的三元运算d=(a?b:c)在kotlin里只能换一种方式实现,即
val text = if (x > 5)"x > 5"else "x <= 5"
简言之变成了一种特别的条件语句-虽然这就是这种三元运算的原本含义。个人感觉比较啰嗦。
4. 位运算符没有使用传统的&、|或者》,而是英文简写,如and、or或shr,由于我对kotlin的了解还不够深,暂时还不知道省下来的这些符号用在何处。
5. 使用更易理解的语法,比如 is 取代 instanceof,用as取代类型转换
String text = (String) other;//这是java
val text = other as String//这是kotlin
用下面这种方式描述区间
if(x >= 0 && x <= 10 ){}//这是java
if (x in 0..10) { }//这是kotlin
6.相比于java,有更智能的类型转换
if(a instanceof String){final String result = ((String) a).substring(1);
}//这是javaif (a is String) {val result = a.substring(1)
}//这是kotlin
7.效率远超switch的when语句
这是网上找到的代码例子:
fun testWhen(int: Int) {when(int) {in 10 .. Int.MAX_VALUE -> println("${int} 太大了我懒得算")2, 3, 5, 7 -> println("${int} 是质数")else -> println("${int} 不是质数")}
}fun main(args: Array<String>) {(0..10).forEach { testWhen(it) }
}
输出如下:
0 不是质数
1 不是质数
2 是质数
3 是质数
4 不是质数
5 是质数
6 不是质数
7 是质数
8 不是质数
9 不是质数
10 太大了我懒得算
和 JAVA 中死板的 switch-case 语句不同,在 when 中,我们既可以用参数去匹配 10 到 Int.MAX_VALUE 的区间,也可以去匹配 2, 3, 5, 7 这一组值,当然我这里没有列举所有特性。when 的灵活、简洁,使得我们在使用它的时候变得相当轻松(和 JAVA 的 switch 对比的话)
总的来说,kotlin与java相似却又不同的地方还有很多,在此就不赘述了,以免有凑字数嫌疑。
其他零零碎碎的东西
比如,对于kotlin的空值安全,有人认为String 和 String?是两种不同的类型。String 已经确定是不会为空,一定有值;而 String?则是未知的,也许有值,也许是空。在使用对象的属性和方法的时候,String 类型的对象可以毫无顾忌的直接使用,而 String?类型需要你先做非空判断。
“两种不同类型“的认识似乎有点极端,不过暂时没有找到能反驳的理由。
kotlin一点摸索相关推荐
- Entity framewrok (linq to entity)查询优化的一点摸索
对于linq to entity 生成的复杂sql语句相信已经困扰大家很久了,本人也是.从接触实体框架到现在,一直都是边学边用,用啥学啥,没有系统的学习过.同时所接触项目也对性能方面没什么要求,所以本 ...
- 标准情况下的最优方案与魔鬼赛道
➤01 一封来信 尊敬的卓老师: 您好! 我是XYZ智能车团队的成员,在今天刚刚参加了安徽省省赛,我对于比赛场地有很大的质疑,整场比赛不规范,主办方学校队伍多次(三次以上)重新开始比赛就不说了,这一次 ...
- 怎么把代码放图片里面进行注入_【5025Bridge V1.0】(三)连接、选座、准备的代码搭建...
(三)连接.选座.准备的代码搭建 [概览]在这篇文章中,我主要使用信号机制实现了服务器和客户端之间的通信,并自己摸索着做出了选座的界面,初步设计并构建了各种按钮之间逻辑.此文多图,纯文字量约10000 ...
- SQL 注入详解扫盲
实习期间的主要工作还是研究 WEB 安全,编程语言是 Python,常用到正则表达式,对 HTTP 的协议也非常清晰. 刚过来的时候,研究的主要是 SQL 注入,因为之前没有搞过安全,所有费了好长一段 ...
- [原创]Fluent NHibernate之旅
ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibe ...
- 减少C++编译时间的方法
该博文为原创文章,未经博主同意不得转载,如同意转载请注明博文出处 本文章博客地址:https://cplusplus.blog.csdn.net/article/details/105112643 减 ...
- GPU迎来投资热潮 退潮后谁在裸泳
近期,数家GPU设计公司获得资本青睐,摩尔线程完成数轮投资获得数十亿元,无独有偶,壁仞科技宣布完成总额11亿元的A轮融资,沐曦集成电路宣布完成近亿元天使轮融资,登临科技宣布完成A+轮融资.另外,天数智 ...
- Fluent NHibernate之旅
ORM大家都非常熟悉了吧,我相信也有很多朋友正在用自己或者一些公开的框架,而最常用而且强大的,非Hibernate了(Net中为NHibernate),网上的文档非常多,不过在博客园中,介绍NHibe ...
- WPF ComboBox下拉绑定Treeview 功能的实现
因为项目需要,接触到这个功能点,借助网络还有自己的一点摸索,实现了这个功能.相关代码如下: XAML部分的代码: <ComboBox Grid.Row="0" Grid.Co ...
最新文章
- 远程协助软件开发_这是我从事远程软件开发人员工作的主要技巧
- 灰度重心法原理与实现
- 计算机游戏的英文单词,关于游戏的英语词汇
- 成功解决AttributeError: ‘str‘ object has no attribute ‘decode‘
- Kubernetes 与 OpenYurt 无缝转换(命令式)
- 【蓝桥杯】Python自带编辑器IDLE的使用教程
- 直流电机 步进电机 伺服电机
- Java 字符串操作的总结1(转载)
- OMNet++新建工程及运行
- 牛逼!支付宝高级Java三面题目:线程锁+事务+雪崩+Docker等
- 电脑黑屏的原因有哪些
- 大厂面试常问的机器学习,计算机视觉怎么学?详细指南来了!
- 最新出炉程序猿使用说明书
- 小型工厂企业网站究竟该怎么做好SEO优化,从而带来更多订单?
- HTML5 webSQL查看表结构
- 局域网内和局域网间的通信(交换机与路由器)
- SIM卡被猫吃了,1860电话录音
- 00后必看:如何在互联网就业寒冬和疫情的双面夹击下找到心仪工作
- pycharm查找替换快捷键
- Linux 学习目录