初识Kotlin
一.Kotlin的第一次见面
1.Kotlin的HelloWorld
新建一个Kotlin的class,然后一个 main方法就好
class Test {
}
fun main(){
println("hello world")
}
疑问:这里可以脱离类的结构运行,比如,我上面新建的是Test.kt,但是我的代码里面却没有类似Java的类结构,Java的结构应该是:
public class Test {
public static void main(String []args){
System.out.println("hello world");
}
}
但是,模仿上面java的结构,到Test.kt中时,main方法去无法执行了:
class Test {
fun main(){
println("hello world")
}
}
2.方法定义:
fun sum(a: Int, b: Int): Int {
return (a + b)
}
解释:两个Int类型的参数a,b,一个Int类型的返回值
fun sum(a: Int, b: Int) = (a + b)
解释:将表达式作为函数体,可以省略返回值类型,由程序自动推断
fun sum1(a:Int,b:Int):Unit{
println("sum of $a and $b is ${a+b}")
}
解释:$居然可以在“”里面拿到变量的值!
3.变量定义
1.Java中的new关键字不再用了!
2.关键字
2.1 val相当于Java里面的 final ,不允许二次赋值
val a=5//自动推断变量类型
val a:Int//延迟赋值,需要指定变量类型
2.2 var //可变类型,适用于全局变量&局部变量
4.字符串模板
fun changeValue() {
var a: Int = 1;
val s1 = "a is $a"
a += 2
val s2 = "${s1.replace("is", "was")},now the value is $a"
println(s2)
}
5.条件表达式
fun ifStatment1(a: Int, b: Int): Int {
if (a>b){
return a
}else{
return b
}
}
//省略版
fun ifStatment(a:Int,b:Int):Int=if (a>b) a else b
6.空值与null检测
Kotlin是空安全的,那是怎么保证的呢?
1.当某个变量可以为null的时候,必须再声明的后面加?来表示该引用可以为空
fun parseInt(string: String): Int? {
try {
return string.toInt()
} catch (e: Exception) {
return null
}
}
解释:如果上面的返回值后没有?,则不可以返回null,否则会提示:Null can not be a value of non-null type Int
### 2.if not null
fun testIfNotNull() {
var item = "123"
var toList = item.toList()
println(toList?.size)
}
与上面等价的Java代码是:
public static void testIfNotNull() {
String item = "123";
char[] toList = item.toCharArray();
if (toList != null) {
System.out.println(toList.length);
}
}
###3.if not null and else
fun testIfNotNullAndElse() {
var item = "123"
var toList = item.toList()
println(toList?.size ?: "toList 对象为空")
}
与上面等价的Java代码是:
public static void testIfNotNullAndElse() {
String item = "123";
char[] toList = item.toCharArray();
if (toList != null) {
System.out.println(toList.length);
} else {
System.out.println("toList 对象为空");
}
}
7.for 循环
fun forLoop() {
val list: List<String> = listOf<String>("1", "2", "3")//只读list
for (item in list) {
//打印item
println(item)
}
for (index in list.indices){
//打印index
println(index)
//打印item
println(list.get(index))
}
}
8.while 循环
fun testWhile() {
val items = listOf("apple", "banana", "kiwifruit")
var index = 0
while (index < items.size) {
println("item at $index is ${items[index]}")
index++
}
}
9.map 遍历
fun testMap() {
var map = mapOf("a" to 1, "b" to 2)
println(map.keys)
println(map.values)
println("-----")
for (key in map.keys) {
println("key $key")
println("value " + map[key])
println("key is $key and value is ${map[key]}")
}
println("-----")
for ((key, value) in map) {
println("key $key")
println("value $value")
}
println("-----")
map.forEach {
println(it.key)
println(it.value)
}
}
10.与Java不一样的几个小例子(java代码就不提供了)
###1.交换两个数值
fun changeTwoValue() {
var a = 1
var b = 2
a = b.also { b = a }
println("a =$a and b=$b")
}
###2. 单表达式函数
fun theAnswer() = 10
与上面等价的Kotlin代码是:
fun testSingleExpression(): Int {
return 10
}
二.Kotlin的编码规范
1.命名规范
1)文件命名(类与对象的名称):使用首字母大写的驼峰⻛格:FirstKotlinDemo.kt
2)类结构内部的代码块的顺序:
属性/初始化代码-》次构造函数-》方法-》伴生对象
不要按字母顺序排列方法,而是按照代码的相关性排列方法
如果由内部类,则将内部类至于紧跟使用该内部类代码的后面,如果没有代码使用,则放到类结构的最末尾
3)包名:小写并且不使用下划线
4)函数名,属性名,方法名,局部变量:首字母小写的驼峰而且不使用下划线
5)常量:全大写
2.与Java最大的不同:尽可能的省略;
三.疑问
1.Kotlin中文件名与类名是什么关系?好像可以不一样
网友评论