五分钟学会Kotlin语法

Kotlin-Study:Kotlin语法 Kotlin研究 Kotlin문법 立即下载

为什么使用Kotlin

项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到现在,坚持用来开发的切身感受。因为语法与Java的区别挺大的一开始很想放弃,如果不是因为项目在使用,想必很少人会尝试这样一门小众语言,但是习惯后会发现这些年究竟浪费多少时间在写无用的Java代码了,Kotlin在兼容Java的基础上还能大大提升开发效率。Kotlin有许多特性但对于开发来说,快速适应和学习更为重要,很多时候我们都是在不明白其原因就开始使用的,正如我们不可能把Retrofit原理研究透才使用它。只要它足够稳定成熟,并能有效的提升开发效率都是值得尝试的。鄙人不才,目前使用Kotlin的原因主要是因为它语法简洁,支持lambda表达式,强大的when语法,不用写分号结尾,光是这些就足以让我喜欢Kotlin。至于空安全之类的特性,毕竟服务端数据类型太多null了并没多大感触,这些特性在实际应用中潜移默化的就吸收了,以至于现在遇到几个Java编写的代码,都有些不适应了。

修改说明

突然火了一脸懵逼,Google IO的影响真是不容小觑。避免误人子弟还是修改下比较好,也就把上一篇文章的基础知识也搬迁过来,对条件判断when还有空判断处理进行了修改,添加了lambda说明,移除过期链接。

Kotlin 基本语法

先说个学习Kotlin语法的小窍门,将代码用Java写好,然后Code/Conver Java File to Kotlin File转换成Kotlin代码,或者将Java代码复制到Kotlin文件会提示转换也是挺方便的,比较差异很容易就能理解了,一开始难免不适应习惯后相信你一定会喜欢上Kotlin

1). 定义

忘掉Java的那一套写法不然会很不适应的,Kotlin有自己的特性不该被Java的思维所束缚。在Kotlin中常量用val声明,变了用var声明,关键字在前面,类型以冒号:隔开在后面,也可以省略直接赋值,类型后带问号?表示可为空类型(默认空安全)。
常量val延迟加载by lazy{},默认线程安全关闭线程安全lazy(LazyThreadSafetyMode.NONE){},变量var延迟加载lateinit。

//常量数组int[][][] arrs = new int[3][2][1];
val arrs = Array(3) { Array(2) { IntArray(1) } }
//空安全变量
var str: String = "hello"
var str1 = "word"
//可为空字符串变量
var str2: String? = null

2). 条件

if...else 正常使用,不过移除了switch用更强大的when替代,when子式可以是常量、变量、返回数值的表达式、返回Boolean值的表达式,强大到用来替换if...else if

// 测试值 x = 0, -1, 1, 2, 3, 6, 10
var x = 10
when (x) {
    //常量
    2 -> println("等于2")
    //数值表达式
    if (x > 0) 1 else -1 -> println("大于0并等于1,或小于0并等于-1")
    //Boolean类型表达式
    in 1..5 -> println("范围匹配1-5")
    !in 6..9 -> println("不是6-9")
    is Int -> println("类型判断")
    else -> println("else")
}
// 代替if...else if
when{
    x > 6 && x <= 10  ->  println("大于6小于等于10")
    x < 6 -> println("小于6")
    else -> println("else")
}

3). 循环

while 和 do...while 同Java并无区别,for则有很大改变并多出了几个变种

val list = ArrayList<String>()
//递增for (int i = 0; i < list.size(); i++)
for (i in list.indices) {
   print(list[i])
}
//递增for (int i = 2; i < list.size(); i++)
for (i in 2..list.size-1) {
   print(list[i])
}
//递减for (int i = list.size(); i >= 0; i--)
for (i in list.size downTo 0) {
    print(list[i])
}
//操作列表内的对象
for (item in list) {
    print(item)
}
//加强版
for((i, item) in list.witnIndex()) {
    print(list[i])
    print(item)
}
//变种版
list.forEach {
    print(it)
}

list.forEach {
    print(it)
}

list.forEachIndexed { i, s ->
    print(list[i])
    print(s)
}

list.forEachIndexed(object :(Int,String) -> Unit{
    override fun invoke(i: Int, s: String) {
        print(list[i])
        print(s)
    }
})

万能的冒号

在Kotlin中冒号:用万能来称呼绝不为过。常量变量的类型声明,函数的返回值,类的继承都需要它

//val表示常量var表示变量声明
val name: String = "tutu" 
//省略类型说明
var age = "23"
//fun表示函数
fun getName(): String{
   return "tutu"
}
//类继承
class UserList<E>(): ArrayList<E>() {
    //...
}

除此之外还有一个特别的地方也需要它,使用Java类的时候。Kotlin最终会还是编译成Java字节码,使用到Java类是必然的,在Kotlin语法如下

val intent = Intent(this, MainActivity::class.java)

类名::class.java没有为什么就这么写记着就是

我是谁的@

除了冒号另一个重要符号@,想必用到内部类和匿名内部类的地方一定很多,再加上支持lambda语法,没有它谁告诉你this和return指的是哪一个

class User {
    inner class State{
        fun getUser(): User{
            //返回User
            return this@User
        }
        fun getState(): State{
            //返回State
            return this@State
        }
    }
}

偷懒的方法

1). Kotlin特色
Java的getter/setter方法自动转换成属性,对应到Kotlin属性的调用

public class User {
    private String name;
    private String age;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getAge() {
        return age;
    }

    public void setAge(String age) {
        this.age = age;
    }
}

反之Kotlin的属性自动生成Java的getter/setter方法,方便在Java中调用,同样的定义在Kotlin中

class User {
    var name: String? = null
    var age: String? = null
}

这样一个Java类在Kotlin中只需这样调用

val user = User()
//赋值
user.name = "tutu"
user.age = "23"
//取值
val name = user.name
val age = user.age

我们的getter/setter方法有时不会这么简单,这就需要自定义getter/setter了,另起一行设置get()/set(value)方法,实现一个Java中常用的单例,这里只为了展示,单例在Kotlin有更简单的方法实现,只要在 package 级别创建一个 object 即可

class User {
    companion object {
        @Volatile var instance: User? = null
            get() {
                if (field == null) {
                    synchronized(User::class.java) {
                        if (field == null)
                            field = User()
                    }
                }
                return field
            }
    }

    var name: String? = null
    var age: String? = null
}

自定义getter/setter重点在field,跟我们熟悉所Java的this指代当前类一样,field指代当前参数,直接使用参数名instance代替不会报错但单例就没效果了

2). 字符串模板
在Java中拼接字符串的代码可读性都很差,在Kotlin字符串拼接变得非常简洁,只需用$后面加上参数名,复杂的参数要加上{}

val user = User()
//赋值
user.name = "tutu"
user.age = "23"
//取值
val name = user.name
val age = user.age
var userInfo = "name:${user.name},  age:$age"
//输出结果:name:tutu, age:23

3). lambda
一开始觉得lambda很高级完全看不懂,其实很简单的就是把接口名、方法名和参数类型省掉不写再加个->罢了,明白这点了很好理解。

// 无参数无返回值
Thread(Runnable {
    sleep(1000)
}).start()
// 单参数不带返回值
view.setOnClickListener { v ->
    Log.e("tag", "${v.tag}")
}
// 多参数带返回值
view.setOnKeyListener(View.OnKeyListener { v, keyCode, event ->
    Log.e("tag", "keyCode$keyCode, ${event.keyCode}")
    if (event.keyCode == KeyEvent.KEYCODE_BACK)
        return@OnKeyListener true
    false
})

新面孔

1). 延迟加载
2). 流程控制
内容上一篇写过参考 Android Kotlin 学习笔记,不重复介绍

空判断

Kotlin的空安全设计对于声明可为空的参数,在使用时要进行空判断处理,有两种处理方式,字段后加!!像Java一样抛出空异常,另一种字段后加?可不做处理返回值为 null或配合?:做空判断处理

//类型后面加?表示可为空
var age: String? = "23" 
//抛出空指针异常
val ages = age!!.toInt()
//不做处理返回 null
val ages1 = age?.toInt()
//age为空返回-1
val ages2 = age?.toInt() ?: -1

更多空处理NullPointException 利器 Kotlin 可选型

注意事项

内部类和参数默认为public,而在Java中为private
类默认为不可继承(final),想要可被继承要声明为open或abstract
取消了static关键字,静态方法和参数统一写在companion object块
internal模块内可见,inner内部类

以上仅是对使用频率较高的语法总结,学会基本可以阅读Kotlin代码,遇到点问题Google速查一下,至于智能转换、类型推导之类的不用说使用后喜欢自然就会了。当然这只是kotlin的基本语法,方便Java快速熟悉kotlin,深入学习还请阅读相关资料。

相关链接

在线学习
Kotlin 官方文档
翻译出处kotlin-web-site-cn
中文站(更新到 1.1):https://www.kotlincn.net/
网址(更新到 1.0.3):http://tanfujun.com/kotlin-web-site-cn/
Kotlin 中文论坛:https://www.kotliner.cn/

MathType公式使用技巧汇总——Mathtype怎么在word中编辑公式?论文中公式有哪技巧?有哪些注意事项?论文中的公式怎么写? 如果word中到公式编号(2-1)中间的符号如下图........ .......类似与省略号的,这是手动打的空格,公式和编号的位置都是手动敲空格操作的,这种就只是使用MathType写了公式而已,格式上还是很不方便的。**如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。如果要修改公示,直接双击文档中的公式,就会自动弹出MathType公式编辑窗口,进行修改。而第二种,是公式里面带的括号符号,他是可以随着公式结构自适应变化的。这时需要将公式插入到一行文字的某处, 阅读详情

相关推荐

新手小白如何学习编程

学习目标推荐第一门语言优势网站 / APP 开发(前端)JavaScript浏览器原生支持,能快速做出可视化效果后端 / 服务器 / 数据分析Python语法简洁像英语,库多、应用广(入门友好)游戏开发先用电竞入门,再转专业引擎硬件 / 嵌入式(比如单片机)C 语言贴近硬件,行业标准办公自动化(Excel / 文档处理)Python快速解决重复工作(比如批量改文件)👉新手首选推荐。

2501_94331842的博客 2232

kotlin入门笔记

为什么使用Kotlin         网上关于kotlin的讨论已经热了一个多月了,究竟怎么看待这门语言在Android开发中的应用前景,我觉得还是要留给时间去验证。“我思故我在”,自己的思考在学习的过程中非常重要,尤其是面对新事物。下面说说我的看法,以它主要的优势入手:         Kotlin是门类型安全语言,但同时保持了类型推测,会自动根据常量或变量的具体数字来推测相关的类型,从而

Wang_WY的博客 1952

2.数字芯片时序正确的前提—Max-transition

芯片物理设计中最基本的Max-transition检查

weixin_43868998的博客 5419

五分钟学会 Kotlin 语法

为什么使用Kotlin 项目一期在收尾了终于有时间折腾了,一个多月以来Kotlin从入门到现在,坚持用来开发的切身感受。因为语法与Java的区别挺大的一开始很想放弃,如果不是因为项目在使用,想必很少人会尝试这样一门小众语言,但是习惯后会发现这些年究竟浪费多少时间在写无用的Java代码了,Kotlin在兼容Java的基础上还能大大提升开发效率。Kotlin有许多特性但对于开发来说,快速适应和学习更...

weixin_33753845的博客 404

Android开发- (2)MediaProjection API实战:构建高效屏幕共享与远程控制方案

本文深入探讨了Android开发中利用MediaProjection API实现高效屏幕共享与远程控制方案的实战方法。文章从权限申请、虚拟屏幕创建讲起,详细解析了图像捕获、编码压缩、Socket网络传输的核心流程,并进一步介绍了如何构建双向控制通道及关键的性能优化与避坑指南,为开发者构建稳定可用的远程协作应用提供了完整路径。

weixin_29207533的博客 450

QComboBox设置最大显示数量多余的用滑动条,以及QComboBox::setMaxVisibleItems()不起作用的问题

QComoboBox是Qt封装的一个选择框的东西,但是我在使用过程中有一点感觉很不好,如图: 不论你往里面添加多少个它都会给你显示全部,甚至给你铺满全屏,后来看了官方文档发现有个setMaxVisibleItems()的方法,我欣喜若狂啊,终于特么的能解决了,但是,很遗憾,不知为啥,我设置上之后并没有起作用,依然会显示全部,后来搜了百度发现有个人是这样解决的 QComboBox *box = ne...

Aboveground的博客 4918

[Kotlin] setOnClickListener点击不响应

记录一次。

iOSTianNan的博客 795

SDM660电源部分配置:

SDM660电源部分配置: Panel power supplies 1、Reference power supplies Description Name Regulator Voltage (V) Panel power supply 0 vddio PMIC 660/L11 1.8 Panel power supply 1 Lab PMIC 660/lab 4.6 Panel power s...

weixin_41811215的博客 4728

Kotlin

所有函数类型都有一个圆括号括起来的参数类型列表以及一个返回类型:(A, B) -> C 表示接受类型分别为 A 与 B 两个参数并返回一个 C 类型值的函数类型。因为这其实是个假的调用,它是 Kotlin 的语法糖,实际上你对一个函数类型的对象加括号、加参数,它真正调用的是这个对象的 invoke() 函数。我们可以很容易地直接调用它(isOdd(5)),但是我们也可以将其作为一个函数类型的值,例如将其传给另一个函数。高阶函数是将函数用作参数或返回值的函数,还可以把函数赋值给一个变量。

精选资讯文章 2224

树莓派 5 AI 套件(Hailo)示例

该用户自定义类作为输入传递给回调函数,该函数在管道输出上运行。它用于主程序与回调函数之间的通信。它对 hailo_rpi_common::app_callback_class 进行了扩展,并可根据应用程序的具体情况定制附加变量和方法。

机器人控制与仿真应用 4115

9篇3章7节:基于 R 语言的 FAERS 数据提取与合并

本文主要探讨了 FAERS 数据提取与合并的操作流程。首先,通过程序化方法从本地存储的 FAERS ASCII 文件中提取指定季度或范围内的单药报告数据,并可通过参数设置控制数据存储位置、处理方式、计算资源分配以及报告者职业类别等。随后,通过批量读取的方式对多个季度的 DRUG 文件进行循环处理,并将其合并为一个综合数据框。

MD Code 1262

三天学会 Kotlin 笔记

第一天 Kotlin 基础 常量变量 if表达式 when表达式 ranges 范围 懒属性延迟加载 函数 字符串模板 集合类型 Lambda 第二天 面向对象 面向对象 数据类 枚举类 空判断 错误处理 类型检查与转换 第三天 接口泛型扩展 接口interface 泛型Generics 扩展 Kotlin 与 Swift 很像,接口、扩展、泛型写法相似,面向...

hust_twj的专栏 3115

[AI8051U入门第一步]环境安装和按键控制流水灯

本文介绍了AI8051U单片机的开发环境搭建及GPIO应用。主要内容包括:1)通过ISP软件完成Keil开发环境配置;2)AI8051U特性介绍,包括32位8051内核、浮点运算单元及丰富外设;3)GPIO输入输出模式解析,并附流水灯控制代码;4)提供完整的系统初始化、延时函数及LED控制代码实现。文章配套资源包含完整工程代码,适用于智能硬件及物联网开发。

sinat_58149788的博客 669

【转载】五分钟学会 Kotlin 语法

【转载】五分钟学会 Kotlin 语法 【荐读】在Google.IO最新的发布会中,Google宣布kotlin成为Android官方编程语言,kotlin必然是大势所趋,且它语法简洁,支持lambda表达式,强大的when语法,不用写分号结尾,不能再findViewById 光是这些特性就足够优秀,少年快来学习它吧。 原文链接 http://www.jianshu.com/p/1ea73

qq_36005519的博客 430

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Hello Kotlin! Kotlin学习资料

今天谷歌搞了条大新闻。宣布Kotlin成为android开发的一级(One Class)语言,这说明谷歌是被甲骨文恶心坏了,打算一步步脱离掉java或者说是甲骨文公司的束缚了。原先网上大家还琢磨着会不会是golang,想想也不会,谷歌的android就是靠开源和众多“廉价”的java开发者支撑起来的,要是用golang那就有可能出现重大的断档。好彩谷歌等呀等,终于等到了kotlin的出现,现在终于...

weixin_30632089的博客 94

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

看例子代码,学Kotlin语法(1.1)(认识kotlin)

首先推荐一篇适合初学者看的学习网页:五分钟学会 Kotlin 语法适合对于kotlin有一些基础的初学者看。总结的相对简洁。 本人喜欢学习一门语言,有一定了解之后,从他们的简单demo开始,一边学习,一边敲代码。每个人都有适合自己的一套学习方法,取其精华,去其糟粕。 相关链接 在线学习 Kotlin 官方文档 中文站(更新到 1.1):https://www.kotlincn.net/ 网址(更新到 1.0.3):http://tanfujun.com/kotlin-web-site-cn/ Kotlin

黎明的博客 178

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Android Kotlin基础学习

在线学习 Kotlin 官方文档 翻译出处kotlin-web-site-cn 中文站(更新到 1.1):https://www.kotlincn.net/ 网址(更新到 1.0.3):http://tanfujun.com/kotlin-web-site-cn/ Kotlin 中文论坛:https://www.kotliner.cn/ 《Kotlin for android developers》中文版翻译 作者:玉兔是我啊 链接:https://www.jianshu.com/p/1ea733ea197

特立独行的博客 3320

Kotlin安装配置与入门

前几天谷歌在I/O大会上宣布了新决定——Kotlin语言正式成为安卓开发的一级编程语言。在有了Android这个“大靠山”下,Kotlin今日成功挤进编程语言Top50.势必未来会得到更多的关注。另外在下一版本的Android studio(3.0)中将提供对Kotlin的全面支持。 据悉,Kotlin 是一个基于 JVM 的新的编程语言,由 JetBrains 开发。

m0_37779028的博客 1224

kotlin学习--基本语法

1、变量与常量的声明 kotlin采用var声明变量,采用val声明常量,声明方式如下     var str:string?="hello world";//声明一个可为空的字符串变量变量     var str1:String="str";声明一个类型为String的字符串     println(str)//输出变量str的值     var a=0;     val b=12/

神隐 414

Android Kotlin学习之路(一) —— 配置Kotlin

楼主个人的学习Kotlin之路,想学习的可已上Github上搜Kotlin   Kotlin现已经被Google正式定义为Android官方编程语言了,学习Kotlin已经成为每一个Android开发人员的必然,但我个人不认为必须立即学习该语言,因为一种语言的普及,必定要一个适应的过程,所以早学会与晚些学会的差别并不大   那么,Kotlin既然能成为Android最新的官方编

然而我还是渣渣 470

Kotlin使用简单总结

自从看到谷歌在Google I/O2017开发者大会上,将kotlin作为android的官方开发语言后,kotlin的曝光率真的是越来越高了,作为一枚小小的android开发者,真的是已经到了不能忽略kotlin的底部了,于是决定简单的学学kotlin语言,然后就来写android项目了,所以这里的简单总结,真的是很简单。1、kotlin使用知识总结由于kotlin作为一门独立的语言,肯定不是一篇

Yoryky的专栏 1190

Kotlin从入门到放弃

Kotlin从入门到放弃 1.eclipse kotlin安装: http://blog.youkuaiyun.com/u014134488/article/details/50684922 2.Android Studio kotlin安装: http://blog.youkuaiyun.com/kisty_yao/article/details/53386808 ...

sina:崔逸的博客 346
上一篇: Android性能优化大全
下一篇: java &与&& |与||的区别
dwf_学海无涯
博客等级 码龄10年 42粉丝 14原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值