Kotlin 学习(1)
本文出自链接:https://www.jianshu.com/p/ef9584a8ebf8
Kotlin的插件安装:
Settings->Plugins->Browse Repositories->搜索Kotlin
Kotlin语法:
1、定义函数:
与Java定义函数的区别在于:Kotlin在定义函数的时候要加fun关键字,函数的返回值前后不同,java的在前面,如
private int getResult(int a, int b) {
return a + b;
}
Kotlin的返回值在后面:
private getResult(a: Int, b: Int): Int {
return a + b
}
如果一个函数只有一个表达式函数体并且是返回类型自动推断的话,可以直接这样写
fun getResult(a: Int, b: Int) = a + b
// 这里的函数没有写返回值,以为Kotlin会自动判断返回值类型
如果函数返回一个无意义的值,相当于Java的void
,则可以这样写
fun getResult(a: Int, b: Int) {
print(a + b)
}
2、定义局部变量
Kotlin声明变量与Java声明变量有些不一样,Java变量类型在前,变量名在后,而Kotlin则相反,变量名在前,变量类型在后,中间加:(冒号),并且Kotlin可以自动判断变量的类型。
声明局部常量(常量使用val
关键字)
val a: Int = 1
val b = 1 // 自动判断出Int类型
val c: Int // 当没有初始化值的时候要声明类型,全局变量不能这样写
c = 1 // 赋值
声明变量(变量使用var
关键字)
var x = 5 // 自动推断出Int类型
x += 1
3、注释和java一样,当行注释和块注释 // 和/** **/
4、使用字符串模板
使用${变量},如变量为args: Array<String>
,使用的时候可以这样写
fun main(args: Array<String>) {
if (args.size == 0) return print("First argument: ${args[0]}")
}
而不用再去用加号加起来,gradle
里面也是支持的
fun main(args: Array<String>) {
if (args.size == 0) return print("First argument: " + args[0])
}
5、使用可空变量和空置检查(Using nullable values and checking for null)
当一个变量、函数可能出现空值的时候,应该指出该引用可空,如
fun getResult(a: Int, b: Int): Int? { // 设置函数返回类型可空
print(a + b)
return null
}
6、使用类型检查和自动转换(Using type checks and automatic casts)
is
运算符是检查一个表达式是否是某个类型的实例,如果为不可变局部变量或属性进行类型检查,则无需显式转换
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj`在这个分支中自动转换为`String`类型
return obj.length
} // `obj`仍然是`Any`类型
return null
}
7、使用for
循环
fun main(args: Array<String>) {
for (arg in args) { // in操作符可以判断是否arg是否在args里面
print(arg)
}
}
或者
for (i in args.indices) {
print(args[i])
}
8、使用when
表达式
when
表达式就相当于Java的switch
表达式,省去了case
和break
,并且支持各种类型。
fun cases(obj: Any) {
when (obj) {
1 -> print("One") //如果obj的值为1
"Hello" -> print("Greeting") // 如果obj的值为hello
is Long -> print("Long") // 如果obj的类型是Long类型
!is String -> print("Not a string") // 如果obj的类型不属于String类型
else -> print("Unknown") // 默认,相当于switch的default
}
}
9、使用ranges
使用in运算符检查数字是否在范围内,使用!in运算符检查数值是否在范围外
if (x in 1..y-1) { //1..y-1表示1到y-1的范围
print("OK")
}
for (i in 1..100) { ... } // 1到100范围
for (i in 1 until 100) { ... } // 半开范围,不包括100,相当于[1,100)
for (x in 2..10 step 2) { ... } // 每次夸2,内容为2,4,6,8,10
for (x in 10 downTo 1) { ... } // 返序
if (x in 1..10) { ... }
10、使用集合
循环输出一个集合里面的值或者判断集合里面是否包含某个变量
for (name in names) { // 将会调用nemes.contains(name)方法
println(name)
}
使用lambda表达式过滤和映射集合
// it表示name
names
.filter { it.startsWith("A") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { print(it) }
Kotlin 学习(1)的更多相关文章
- kotlin 学习感受
目录 kotlin 学习感受 特点 优点 屎一样的缺点 总结 kotlin 学习感受 直白的说..很不好,像屎一样,本来对此抱有很大的期望和好感度,但经过一整天的学习,完全失望了,这门语言中间有各种的 ...
- Kotlin 学习笔记(一)
(Kotlin 学习笔记的文档结构基本按照 Java 核心技术一书的目录排列) 基本程序设计结构 数据类型 数字 类型 宽度 Double 64 Float 32 Long 64 Int 32 Sho ...
- Kotlin学习笔记(9)- 数据类
系列文章全部为本人的学习笔记,若有任何不妥之处,随时欢迎拍砖指正.如果你觉得我的文章对你有用,欢迎关注我,我们一起学习进步! Kotlin学习笔记(1)- 环境配置 Kotlin学习笔记(2)- 空安 ...
- Kotlin学习快速入门(7)——扩展的妙用
原文地址: Kotlin学习快速入门(7)--扩展的妙用 - Stars-One的杂货小窝 之前也模模糊糊地在用这个功能,也是十分方便,可以不用继承,快速给某个类增加新的方法,本篇便是来讲解下Kotl ...
- Kotlin学习第一课:从对比Java开始
1. 介绍 今年初,甲骨文再次对谷歌所谓的安卓侵权使用Java提起诉讼,要求后者赔偿高达90亿美元.随后便传出谷歌因此计划将主力语言切换到苹果主导的Swift,不过这事后来没了跟进. 但谷歌在这两天的 ...
- kotlin学习-初次见面
第一次相识 最近看了很多介绍kotlin的文章.怀着好奇心改造了之前用java写的一个工具jar包.功能不是很复杂,类也只有几个,却足足写3个小时.期间一边看教程,一边写,有一种找回原来第一次写代码的 ...
- kotlin学习笔记-异常好玩的list集合总结
不积跬步无以至千里,不积小流无以成江海 先看看Kotlin中for循环的遍历 fun testList(){ var StringVal = "12_12_13_15_a_b_c_d_yu_ ...
- kotlin学习(二)——类
Kotlin中的类遵循一个简单的结构.尽管与Java有一点细微的差别.你可以使用try.kotlinlang.org在不需要一个真正的项目和不需要部署到机器的前提下来测试一些简单的代码范例. 1. 怎 ...
- kotlin学习三:初步认识kotlin(第二篇)
上一章熟悉了kotlin基本的变量和函数声明,并明白了如何调用函数.本章再来看一些其他有用的东西 包括: 1. kotlin代码组织结构 2. when语法 3. 循环迭代语法 4. try表达式 1 ...
- kotlin学习一:kotlin简介
kotlin是JetBrains公司出品的基于JVM的语言,和其他JVM语言一样,目的在于提供比JAVA更加简介的语法, 同时提供函数式编程,不需要再像JAVA一样所有的一切都要依托于类. kotli ...
随机推荐
- Latex使用CJK包添加字体
最近写论文时有个中文期刊提供的LaTeX模板使用CJK宏包,大致是这样的: \documentclass{article} \usepackage{CJK} \begin{document} \beg ...
- k8s入坑之路(8)kube-proxy详解
kube-proxy 每台机器上都运行一个 kube-proxy 服务,它监听 API server 中 service 和 endpoint 的变化情况,并通过 iptables 等来为服务配置负载 ...
- 性能工具之代码级性能测试工具ContiPerf
前言 做性能的同学一定遇到过这样的场景:应用级别的性能测试发现一个操作的响应时间很长,然后要花费很多时间去逐级排查,最后却发现罪魁祸首是代码中某个实现低效的底层算法.这种自上而下的逐级排查定位的方法, ...
- vue配置请求拦截器和响应拦截器
首先确保我们已经设置的store.js进行值的存取,这时候我们需要配置请求和响应的拦截器设置 main.js import Vue from 'vue' import App from './App' ...
- Swift-Framework Error(一)桥接文件
摘要 Xcode 编译工程代码时,出现编译错误时除了红色图标外,还会附送几句英文文本. 常规操作拷贝英文文本,放到搜索框中找答案,但是读懂这几句话能事半功倍. 项目中如果有 OC 和 Swift 两种 ...
- IDEA中三种注释方式的快捷键
三种注释方式 行注释.块注释.方法或类说明注释. 一.快捷键:Ctrl + / 使用Ctrl+ /, 添加行注释,再次使用,去掉行注释 二.演示代码 if (hallSites != null ...
- Merge into用法总结
简单的说就是,判断表中有没有符合on()条件中的数据,有了就更新数据,没有就插入数据. 有一个表T,有两个字段a.b,我们想在表T中做Insert/Update,如果条件满足,则更新T中b的值,否则在 ...
- Springboot 加载配置文件源码分析
Springboot 加载配置文件源码分析 本文的分析是基于springboot 2.2.0.RELEASE. 本篇文章的相关源码位置:https://github.com/wbo112/blogde ...
- SSM整合小项目
1.文件目录结构 2.MyBatis配置 创建数据库环境 CREATE DATABASE `ssmbuild`; USE `ssmbuild`; DROP TABLE IF EXISTS `books ...
- Python学习手册——第二部分 类型和运算(1)之字符串
Python全景 1.程序由模块构成. 2.模块包含语句. 3.语句包含表达式. 4.表达式建立并处理对象. 在python中数据是以对象的形式出现的!!! 为什么使用内置类型 内置对象使程序更容易编 ...