Kotlin详尽语法分析(未完待续)
待续
一、Kotlin友好的语法
Kotlin不是诞生于学术界的一些不可思议难以理解的语法,它的语法类似于很多面向对象的语法,并且非常易于理解。
但是它又与传统的面向对象的Java有些区别,例如kotlin的val、var变量的声明。
例如:
二、相似友好的语法
/*** @author:wangdong* @description:Foo demo*/
class Foo {//val 声明的变量是不可以改变的val b: String = "b"//var 声明是可以改变的var i: Int = 0//可以根据等号右边的类型,自动判断赋予左边变量的类型fun hello(){val str = "hello"print("$str world")}//根据传入的变量,求和fun sum(x: Int,y: Int): Int{return x + y;}//根据传人的变量,求最大值//如果a大于b,则返回a,否则返回bfun maxOf(a: Float, b: Float) = if(a > b) a else b}
三、字符串的插入和计算
在字符串的插入和计算方面,类似于Java的String.format()。
例如:
fun stringDemo(){val x = 4;val y = 7;print("sum of $x and $y is ${x + y}")//会输出"sum of 4 and 7 is 11"}
四、
Kotlin will infer your types wherever you feel it will improve readability:
如果没有指定变量的类型的话,Kotlin可以根据改善阅读,自动赋予变量的类型
fun inferenceDemo() {val a = "abc" //会自动推测为String类型var b = 4 //会自动推测为String类型val c: Double = 0.7 //明确的c的类型为Doubleval d: List<String> = ArrayList() //明确d的类型为List<String>}
五、
更灵活的类型转化
/*** @author:wangdong* @description:第一个kotlin项目*/
fun main(args: Array<String>) {var obj = "Hello";//会将小写字母转化成大写输出if (obj is String) {print(obj.toUpperCase()) // obj is now known to be a String}
}
输出结果
六、更直观的相等比较
//因为两个对象属性完全一样
val john1 = Person("John")
val john2 = Person("John")
//判断结构相等用==
john1 == john2 // true (structural equality)
//判断引用相等用===
john1 === john2 // false (referential equality)
七、灵活变化的参数和方法运用
可以通过类,调用方法传入指定类型的参数
fun build(title: String, width: Int = 800, height: Int = 600) {Frame(title, width, height)
}
八、更多样化的方法调用方式
下面来模拟调用第七步中的build方法,三种方式都是一样的
build("PacMan", 400, 300) // equivalent
build(title = "PacMan", width = 400, height = 300) // equivalent
//参数顺序如果颠倒了,则需要指定前缀
build(width = 400, height = 300, title = "PacMan") // equivalent
九、更灵活的表达在When判断语句
/*** @author:wangdong* @description:第一个kotlin项目*/
fun main(args: Array<String>) {var x = 2//根据x的值走对应的一行,下面走x is 2when (x) {1 -> print("x is 1")2 -> print("x is 2")3, 4 -> print("x is 3 or 4")in 5..10 -> print("x is 5, 6, 7, 8, 9, or 10")else -> print("x is out of range")}
}
它在一个表达式或者一个声明中都是有用的
例如:
fun main(args: Array<String>) {var obj = "20"val res: Boolean = when {obj == null -> false//走这一层obj is String -> trueelse -> throw IllegalStateException()}print(res)
}
最终输出的结构true
十、更灵活的Bean实体类中的set和get方法
class Frame {var width: Int = 800var height: Int = 600val pixels: Intget() = width * height
}
调用类Frame中的get方法,得到的结果就是480000
十一、更灵活的对象创建和复制
It’s a POJO complete with toString(), equals(), hashCode(), and copy(), and unlike in Java it won’t take up 100 lines of code:
比Java的创建和赋值方便太多了
/*** @author:wangdong* @description:第一个kotlin项目*/
fun main(args: Array<String>) {data class Person(val name: String,var email: String,var age: Int)val john = Person("John","John@gmail.com",121)print(john)
}
输出结果:
Person(name=John, email=John@gmail.com, age=121)
十二、更灵活的预先重载的方法
A predefined set of operators can be overloaded to improve readability:
例如:
/*** @author:wangdong* @description:第一个kotlin项目*/
fun main(args: Array<String>) {data class Vec(val x: Float,val y: Float){operator fun plus(v: Vec) = Vec(x + v.x, y + v.y)}val v = Vec(2.5f,3f) + Vec(4f, 1f)print(v)
}
输出的结果是Vec(x=6.5, y=4.0)
具体咱们来debug看一下
可以简单理解为x+x,y+y
本次暂时分享到这里了。
Kotlin详尽语法分析(未完待续)相关推荐
- 《今日简史》读书笔记(未完待续)
<今日简史>读书笔记(未完待续) 这本书是尤瓦尔·赫拉利的简史三部曲的最后一本,前2本书是<未来简史>和<人类简史>.根据豆瓣上网友的评价,这本书是尤瓦尔·赫拉利写 ...
- linux引数列项目过长,Linux 命令个人总结====== 未完待续 个人认为比较重要
Linux 命令个人总结====== 未完待续 man [功能说明]: 查看帮助 [语法格式]: man [123456789]命令.文件. [选项参数]: 数字"1"表示用户命令 ...
- CC2530学习路线-基础实验-串口通讯发送字符串(4 未完待续)
目录 1. 前期预备知识 1.1 串口通讯电路图 1.2 实验相关寄存器 1.2 常用波特率设置 本章未完待续..... 原来写的文章已经丢失了,只能找到这一小部分,看什么时候有时间再补上. 1. 前 ...
- Paper之BigGAN:ICLR 2019最新论文《LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS》(未完待续)
Paper之BigGAN:ICLR 2019最新论文<LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS> ...
- Windows x64内核学习笔记(五)—— KPTI(未完待续)
Windows x64内核学习笔记(五)-- KPTI(未完待续) KPTI 实验一:构造IDT后门并读取Cr3 参考资料 KPTI 描述:KPTI(Kernel page-table isolati ...
- javascript有用小功能总结(未完待续)
1)javascript让页面标题滚动效果 代码如下: <title>您好,欢迎访问我的博客</title> <script type="text/javasc ...
- Ubuntu1804和2004高版本,右键无法创建TXT文档的解决办法【未完待续】
Ubuntu1804和2004高版本,右键无法创建TXT文档的解决办法[未完待续] 问题: Ubuntu1804和2004高版本,右键无法创建TXT文档 解决办法1:[常用] 1.打开终端 2.输入: ...
- 《图解 HTTP》读书笔记(未完待续)
ARP 协议(Address Resolution Protocol)一种以解析地址的协议,根据通信双方的 IP 地址就可以查出对应的 MAC 地址. MAC( Media Access Contro ...
- pythonb超分辨成像_Papers | 超分辨 + 深度学习(未完待续)
1. SRCNN 1.1. Contribution end-to-end深度学习应用在超分辨领域的开山之作(非 end-to-end 见 Story.3 ). 指出了超分辨方向上传统方法( spar ...
- 性能测试调优篇---未完待续
性能测试调优一: 1.首先,看下选测交易的整个走向 纯系统内部交易: 选测交易如果是系统内的交易,每一步请求都和系统交互几次,访问了几个数据库,访问了数据库的那几张表?? 该交易走了那几台机器,这几台 ...
最新文章
- 游戏开发中的图像生成
- python ftp文件传输服务端
- 《SAS编程与数据挖掘商业案例》学习笔记之十七
- 给定一个投资组合的收益序列,以沪深300作为参照,分解该投资组合的α和β
- 2.Android 学习之虚拟机安装
- php debug 打印变量_PHP_Debug显示所有变量
- 轻量化卷积神经网络:SqueezeNet、MobileNet、ShuffleNet、Xception
- 运行MonkeyRunner时使用Genymotion模拟器
- django-dynamic-scraper(DDS)配置中的一些问题
- [转载]配置路由让MSN可传文件(2003-9-17)
- C语言基础专题 - 数据类型与强制类型转换(编辑中)
- 不要随意设置随机数种子
- Linux新手入门教程
- DuKBitmapImages 图片压缩处理技术
- Android Glide加载网络图片不显示,但浏览器能打开图片
- 区块链将成为引导第四次工业革命的重要力量
- 怎样才能在网上卖东西,手把手教你闲鱼卖货!
- 程序设计思维与实践 CSP-M4 补题
- 北邮计算机学硕读博,博士生考试_考博经验——说说我北邮北航考博经历_沪江英语...
- 2007年,7月1日
热门文章
- 「开源资讯」Apache Storm 2.2.0 发布,分布式实时计算
- Do not use built-in or reserved HTML elements as component id: animate
- ASP.NET Core中返回 json 数据首字母大小写问题
- ThinkPhp报错:thinkphp\library\think\Template.php Line(1243) template not exists:...test\...\index.html
- @pathvariable参数_SpringMVC 五种注解参数绑定
- 打包deb时,实际上是两层包名目录的结构
- static library libs/libvpx/libvpx.a is not portable!
- VirtualBox安装debian无法启动,正确的解决办法
- 腾达无线路由器如何开启无线中继功能
- 宽屏系统上播放幻灯片的设想