学习Kotlin(二)基本语法
推荐阅读:
学习Kotlin(一)为什么使用Kotlin
学习Kotlin(二)基本语法
学习Kotlin(三)类和接口
学习Kotlin(四)对象与泛型
学习Kotlin(五)函数与Lambda表达式
学习Kotlin(六)扩展与委托
学习Kotlin(七)反射和注解
学习Kotlin(八)其他技术
Kotlin学习资料总汇
目录
一、分号;
二、定义变量、常量
三、字符串模板与字符串面值
四、自动类型转换
五、定义函数
六、注释
七、控制流
八、集合
一、分号;
在Java中,使用分号;
标志一句完整代码的结束。在Kotlin中,一句代码结束后不用添加分号。
二、定义变量、常量
Java定义变量时把数据类型放在前面,变量名放在后面。
int a = 1;
int b;
b = 2;
Kotlin用var
定义变量,把数据类型放在后面,并用冒号:
隔开。
var a: Int = 1
var b: Int
b = 2
Java用final
定义常量,把final
放在数据类型前面。
final int a = 1;
final int b;
b = 2;
Kotlin用val
定义常量,把数据类型放在后面,并用冒号:
隔开。
val a: Int = 1
val b: Int
b = 2
三、字符串模板与字符串面值
1.字符串模板在Kotlin中,字符串可以包含模板表达式 ,即一些小段代码,会求值并把结果合并到字符串中。 模板表达式以美元符($)开头,由一个简单的名字构成,如:
var a: String = "a"
var b: String = "b"
var c: String = "$a$b"
上面几行代码在Java中就等于
String a = "a";
String b = "b"
String c = a + b
2.字符串字面值Kotlin有两种字符串面值,转义字符串和原生字符串。
- 转义字符串转义字符串跟java字符串一样,转义采用反斜杠方式,如:
var a: String = "a"
var b: String = "b"
Toast.makeText(this, "$a\n$b", Toast.LENGTH_SHORT).show()
运行代码:
- 原生字符串原生字符串可以用三个"""作为分隔符括起来,内部没有转义并且可以包含换行和任何其他字符:
var a: String = "a"
var b: String = "b"
var c: String = """$a$b"""
Toast.makeText(this, c, Toast.LENGTH_SHORT).show()
运行代码:
可以看到前面有一段空格,这个时候可以通过trimMargin() 函数去除前导空格:
var a: String = "a"
var b: String = "b"
var c: String = """|$a$b""".trimMargin()
Toast.makeText(this, c, Toast.LENGTH_SHORT).show()
运行代码:
如上面例子所示,在需要去掉前导空格的那一行前面加上竖杠"|",再调用trimMargin()方法,就可以去掉前导空格。
四、自动类型转换
Kotlin在定义变量或者常量时给他赋值,可以不指定他的类型,如:
var a = "aaa" //这里的a是String类型
val b = 1 //这里的b是Int类型
五、定义函数
- 无返回值无参数
Java定义无返回值无参数方法,返回类型是void
void abc() {}
Kotlin定义无返回值无参数函数,返回Unit
fun abc(): Unit{}
也可以什么都不返回
fun abc(){}
可以看到Kotlin返回值的类型在函数末尾指定,并用冒号:
分隔。
- 无返回值有参数
Java定义无返回值有参数方法,返回类型是void
void abc(String str) {}
Kotlin定义无返回值有参数函数,返回Unit(或不返回)
fun abc(str: String) {}
括号里的参数跟定义变量常量一样,先指定参数名,再指定参数类型,并用冒号:
分隔。
- 有返回值有参数
Java定义有返回值有参数方法,返回类型是String
String abc(String str) {return "";
}
Kotlin定义有返回值有参数函数,返回类型是String
fun abc(str: String): String {return ""
}
返回值的类型在函数末尾指定,并用冒号":"分隔。
六、注释
单行注释Java跟Kotlin一样
//单行注释
多行的块注释
Java跟Kotlin都可以这样
/* 这是一个多行的块注释。 */
Kotlin块注释支持嵌套,代码如下:
/*
这是一个多行的
块注释。/*再嵌套一个块注释 */
*/
而Java不支持块注释嵌套
七、控制流
1.if表达式与三元运算符
Kotlin和Java中的条件语句用法大致相同,其中不同的是Kotlin中的if语句本身就是表达式,有返回值,类似于Java的三元表达式,如下所示:Java三元表达式
c = a > b ? 3 : 4;//如果a>b,c=3,否则c=4
对应的Kotlin中的if表达式
var c = if (a > b) 3 else 4
如果 if 或 else 后面是代码块的话
var c = if (a > b) {3
} else {4
}
2.when与switch
Kotlin中没有Java的switch语句,取而代之的是更强大的when语句,如下所示:Java中的switch语句
int a = 0;
switch (a) {case 0:break;case 1:break;default:break;
}
Kotlin中对应的when语句
var a = 0
when (a) {0 -> {}1 -> {}else -> {}
}
注意:when语句在满足条件的分支执行后,会终止when语句执行,所以不用像switch语句那样每一个case都加上break。如果很多分支需要用相同的方式处理,when语句可以把多个分支条件放在一起,用逗号,
分隔,如下所示:
var a = 0
when (a) {0 -> {}1,2 -> {//如果a=1或a=2,执行该代码块}else -> {}
}
when语句还能像if语句那样作为表达式:
var a = 1
var b = when (a) {0 -> 0 //如果a=0,则b=01 -> 1 //如果a=1,则b=1else -> 2 //如果a=其他,则b=2
}
3.关键字in
当我们要判断5是否在1-10里面,在Java中可以这么写
int a = 5;
for (int i = 0; i < 10; i++) {if (i == a) {return true;} else {return false;}
}
如果同样的判断用Kotlin来写,可以用关键字in
来判断
if (5 in 1..10){//1..10代表1-10的意思return true
}else{return false
}
4.关键字is
在Kotlin中可以用关键字is
判断对象的类型,如下所示:
fun hasPrefix(x: Any) = when(x) {//kotlin中所有类都有一个共同的父类: Anyis String -> {//如果x是String类型,执行该代码块}is Int -> {//如果x是Int类型,执行该代码块}else -> false
}
注意上面出现了Any
,Any
是Kotlin中所有类都有一个共同的父类,有点像Java中的Object
,但这个类不是java.lang.Object,这个类只有equals()、 hashCode()、toString()方法。
5.for循环
如果你想要通过索引遍历一个数组或者一个list,可以使用for循环,如下所示:Java代码
for (int i = 0; i < array.size(); i++) {System.out.println(i);
}
Kotlin代码
for (i in array.indices) {println(array[i])
}
除了普通的用法之外,Kotlin的for循环还可以这样:
for ((index, value) in array.withIndex()) {println("the element at $index is $value")//index是索引,value是值
}
6.while 循环
Java跟Kotlin的while循环是一样的,分为while和do...while:
var i = 0
while(i++ < 10){
}do{}while(i++<10){
}
八、集合
Java中的List,Set,Map:
List<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
integers.remove(1);
integers.get(2);
integers.clear();Map<String, Integer> map = new HashMap<>();
map.put("1", 1);
map.put("2", 2);
map.put("3", 3);
map.remove("1");
map.get("2");
map.clear();Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.remove(1);
set.contains(2);
set.clear();
Kotlin也有List,Set,Map,但Kotlin中的List,Set,Map都是不可修改的
上图红色代表编译错误。就是说Kotlin的List,Set,Map中没有可以修改集合的方法,是只读的。当然Kotlin还提供了可以读写的集合,分别是MutableList,MutableSet,MutableMap,这些集合有可以修改集合的方法。
下面介绍一些Kotlin常用创建集合对象的函数:listOf:用于创建List对象
var list: List<Int> = listOf<Int>()
setOf:用于创建Set对象
var set: Set<Int> = setOf<Int>()
mapOf:用于创建Map对象
var map: Map<String, Int> = mapOf<String, Int>()
mutableListOf:用于创建MutableListOf对象
var mutableList: MutableList<Int> = mutableListOf()
mutableList.add(1)
mutableList.add(2)
mutableList.add(3)
mutableList.remove(1)
mutableList.get(2)
mutableList.clear()
mutableSetOf:用于创建MutableSetOf对象
var mutableSet: MutableSet<Int> = mutableSetOf()
mutableSet.add(1)
mutableSet.add(2)
mutableSet.add(3)
mutableSet.remove(1)
mutableSet.contains(2)
mutableSet.clear()
mutableMapOf:用于创建MutableMapOf对象
var mutableMap: MutableMap<String, Int> = mutableMapOf()
mutableMap.put("1", 1)
mutableMap.put("2", 2)
mutableMap.put("3", 3)
mutableMap.remove("1")
mutableMap.get("2")
mutableMap.clear()
总结
本篇文章主要对比了Java跟Kotlin的基本语法在写法上的区别。会了基本语法,就等于踏出了从Java转到Kotlin的第一步。
原文链接:https://juejin.im/post/5a7ba5066fb9a063563106ef
学习Kotlin(二)基本语法相关推荐
- Vue2.0学习笔记二 基础语法
1. Mustache语法 Mustache语法也叫插值表达式,Mustache语法式通过{{}}渲染到页面,并且数据是响应式的. 数据的响应式:数据的变化导致页面的内容随之变化 效果图: 2. 指令 ...
- WPF学习日记(二)——XAML语法
XAML语法 1.XAML文档的树形结构 XAML使用标签来定义UI元素,每个标签对应.NET Framework类库中的一个控件类.通过设置标签的Attribute,不但可以对标签所对应控件对象 ...
- vue3学习日记二 setup语法糖
1.基本语法 <script setup> console.log('hello script setup') </script> 2.顶层的绑定会暴露给模板,即在顶层声明的变 ...
- 学习Kotlin(八)其他技术
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- 学习Kotlin(七)反射和注解
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- 学习Kotlin(六)扩展与委托
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- 学习Kotlin(五)函数与Lambda表达式
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- 学习Kotlin(四)对象与泛型
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
- 学习Kotlin(三)类和接口
推荐阅读: 学习Kotlin(一)为什么使用Kotlin 学习Kotlin(二)基本语法 学习Kotlin(三)类和接口 学习Kotlin(四)对象与泛型 学习Kotlin(五)函数与Lambda表达 ...
最新文章
- Datawhale组队学习周报(第040周)
- (五) openwrt打包过程
- Sylius不需要缓存使用默认地址
- 跨平台 获取系统信息的python库 http://support.hyperic.com/disp
- Linux 设备驱动的并发控制
- PhpSpreadsheet 电子表格(excel) PHP处理笔记
- zabbix替代smokeping的解决方案
- 对于开发 0 bug 代码的思考——Design by Contract 契约设计
- 智慧交通前瞻:如何解决城市发展“心病”?
- MATLAB 2018a 安装
- Vue项目demo汇总
- Android 界面设计 简约个人求职简历表格
- Ansys模态计算结果图片批量导出命令流
- android平板怎么快速截屏,平板怎样截图(iPad截屏的3种方式)
- Ubuntu 16.04 系统装机、编译环境配置及代码编译过程小结
- python环境安装 (win7)
- Nodejs pm2 使用
- 锁定计算机过久电脑自动关机,如何设置电脑在某个或一段时间后自动关机
- 关于XDR的这些问题你都了解吗?
- 2048AI设计与实现
热门文章
- 二叉树 二度节点和叶子节点之间的数量关系
- 深度学习核心技术精讲100篇(四十九)-半监督学习在金融文本分类上的探索和实践
- 运筹学最优化理论系列概念-单纯形法原理解析
- Flink从入门到精通100篇(七)-如何基于 Flink 搭建一个实用有效的在线实时反欺诈平台?
- Flink从入门到精通100篇(八)-美团点评是如何在 Flink平台建立 实时数仓的?
- java messagebox 关闭_wince/WinForm下实现一个自动关闭的MessageBox
- hc05与单片机连接图_单片机科普:单片机的IO口不够用了怎么办?如何扩展单片机的IO口...
- tf_geometric的安装
- python type函数
- Ospaf项目-commits词频统计模块