不会真的学不会kotlin吧?(一)基本类型

本文是根据慕课网kotlin相关课程本人笔记和个人理解所作
代码部分参考慕课网新kotlin入门课程

本章简介

本来已经学习过好几次kotlin了,因为自己没有总结,工作中也没有用。所以决定总结一下,发一篇文章,后续会一直更新的,一起学习和进步!后面的demo是非常有意思的,函数是可以传递和保存的,简直不要太牛逼!!!

结构导图

在这里插入图片描述

基本类型

KotlinJava
字节Bytebyte/Byte
整型Int&Longint/Integer&long/Long
浮点型Float&Doublefloat/Float&double/Double
字符Charchar/Character
字符串StringString
变量声明对比

java

int a = 2;
final String b = "hello";

kotlin

var a:Int = 2
val b:String = "hello"

var a = 2
val b = "hello"
易混淆的Long

java

long c = 12345678910l;
long d = 12345678910L;

以上两种都可以但不推荐第一种

kotlin

var c = 12345678910l //compile error
var d = 12345678910L //ok
数值转换

java

int e = 10;
long f = e;

上述代码正常运行

kotlin

var e:Int = 10
var f: Long = e //error
//正确写法
var e:Int = 10
var f: Long = e.toLong()

kotlin中所有的数值赋值都需要使用方法转换,不能直接赋值

字符串模板

java

String str = "kotlin";
System.out.print("I love " + str) ; 
System.out.print("I love " + str.length()) ; 

String n = "12345\n" +
    "67890";

kotlin

var str = "kotlin"
print("I love $str ")
print("I love ${str.length}" )
print("I love %d",str.length )

var n = """
	12345
	67890
	"""

数组

KotlinJava
整型IntArrayint[]
整型装箱ArrayInteger[]
字符CharArraychar[]
字符装箱ArrayCharacter[]
字符串ArrayString[]
数组对比

java

int[] a = new int[5];

int[] a = new int[]{1,2,3,4,5};

List<String> a = new ArrayList<>();

kotlin

var a = IntArray(5)

var a = intArrayOf(1,2,3,4,5)
var a = IntArray(5){it + 1}

var a = ArrayList<String>()
数组遍历

java

for (int i = 0; i < e.length; i++){
    print(e[i]);
}

kotlin

for (element in e){
    print(element)
}
e.forEach(element ->
         print(element))
e.forEach(
         print(it))
数组包含关系

java

for (int i = 0; i < e.length; i++){
    if(e[i] == 1){
   	 	print(e[i]);
        break;
    }
}

kotlin

if (1 in e)
if (2 !in e)

区间

数组包含关系

kotlin

//.. 闭区间
val intRange = 1 .. 10
val charRange = 'a' .. 'z'
val longRange = 1L .. 10L
//until左闭右开
val intRangeE = 1 until 10
val charRangeE = 'a' until 'z'
val longRangeE = 1L until 10L
//downTo 闭区间倒序
val intRangeD = 10 downTo 1
val charRangeD = 'z' downTo 'z'
val longRangeD = 10L downTo 1L
//step
var intRange = 1 .. 10 step 2 //1 3 5 7 9
//for循环曲线救国
for (i in 0 until array.size){}
for (i in array.indices){}

集合框架

KotlinJava
不可变ListListList
可变ListMutableList
不可变MapMap<K,V>Map<K,V>
可变MapMutableMap<K,V>
不可变SetSetSet
可变SetMutableSet
列表创建

java

List<Integer> intList = new ArrayList<>(Arrays.asList(1, 2, 3, 4));

List<String> stringList = new ArrayList<>();

kotlin

val intList: List<Int> = listOf(1, 2, 3, 4)
val intList: MutableList<Int> = mutableListOf(1, 2, 3, 4)

val stringList = ArrayList<String>()

可变和不可变实质都是java的List

Map创建

java

Map<String,Object> map = new HashMap<>();

kotlin

val map: Map<String, Any> = mapOf("name" to "benny", "age" to 20)
val map: Map<String, Any> = mutableMapOf("name" to "benny", "age" to 20)
列表操作

java

for (int i = 0; i < 10; i++) {
            stringList.add("num: " + i);
        }

for (int i = 0; i < 10; i++) {
            stringList.remove("num: " + i);
        }

stringList.set(5, "HelloWorld");
String valueAt5 = stringList.get(5);

kotlin

for (i in 0 .. 10){
        stringList.add("num: $i")
    }

for (i in 0 .. 10){
        stringList += "num: $i"
    }

for (i in 0 .. 10){
        stringList -= "num: $i"
    }

stringList[5] = "HelloWorld"
val valueAt5 = stringList[5]

val hashMap = HashMap<String, Int>()
hashMap["Hello"] = 10
println(hashMap["Hello"])
多值对

kotlin

val pair = "Hello" to "Kotlin"
val pair = Pair("Hello", "Kotlin")

val first = pair.first
val second = pair.second
val (x, y) = pair

val triple = Triple("x", 2, 3.0)
val first = triple.first
val second = triple.second
val third = triple.third
val (x, y, z) = triple

函数

类方法
class Foo {
    fun bar(p0: String, p1: Long): Any{ TODO() }
}
顶级函数
fun foo() { }
fun foo(p0: Int): String { TODO() }

不写在类里

函数引用
val f: ()->Unit = ::foo
val g: (Int) ->String = ::foo
val h: (Foo, String, Long)->Any = Foo::bar

class Foo {
    fun bar(p0: String, p1: Long): Any{ TODO() }
}
val foo = Foo()
val m:(String, Long) -> Any = foo::bar

val x:(Foo, String, Long)->Any = Foo::bar
val x0: Function3<Foo, String, Long, Any> = Foo::bar

函数传递
fun yy(p: (Foo, String, Long) -> Any){
    p(Foo(), "Hello", 3L)
    p.invoke(Foo(), "Hello", 3L)
}
变长参数

java

void print(String... xxx){}

kotlin

fun print(vararg xxx:String){
    xxx[]
}
伪多返回值

kotlin

fun multiReturnValues(): Triple<Int, Long, Double> {
    return Triple(1, 3L, 4.0)
}
默认值

kotlin

fun defaultParameter(x: Int = 5, y: String, z: Long = 0L){
    TODO()
}
具名参数

kotlin

defaultParameter(y = "Hello")

例子

/**
 * input: 3 * 4
 */
fun main(vararg args: String) {
    if(args.size < 3){
        return showHelp()
    }

    val operators = mapOf(
        "+" to ::plus,
        "-" to ::minus,
        "*" to ::times,
        "/" to ::div
    )

    val op = args[1]
    val opFunc = operators[op] ?: return showHelp()

    try {
        println("Input: ${args.joinToString(" ")}")
        println("Output: ${opFunc(args[0].toInt(), args[2].toInt())}")
    } catch (e: Exception) {
        println("Invalid Arguments.")

        showHelp()
    }
}

fun plus(arg0: Int, arg1: Int): Int{
    return arg0 + arg1
}

fun minus(arg0: Int, arg1: Int): Int{
    return arg0 - arg1
}

fun times(arg0: Int, arg1: Int): Int{
    return arg0 * arg1
}

fun div(arg0: Int, arg1: Int): Int{
    return arg0 / arg1
}

fun showHelp(){
    println("""
        
        Simple Calculator:
            Input: 3 * 4
            Output: 12
    """.trimIndent())
}
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值