Kotlin入门简单教程

Hello Kotlin

  • IDE我选择的是idea (不要问我为什么)

  • 新建工程选择Kotlin就可以了


    新建向导
  • 创建完成的目录结构


    工程结构
  • 新建一个Kotlin文件(文件名不用跟 .kt


     
  • Hello Kotlin代码

    fun main(args: Array<String>) {
      println("Hello Kotlin.")
    }
  • 点击左侧的Kotlin图标运行


     
  • Hello Kotlin就算是走完了~~ 这里还有一些东西要提出来

    • println这个究竟是个什么函数(Ctrl + 鼠标左键

      println源码

$%%%%%%%%%%%%%%%%%%%%%%%%%%%
下面高能预警~~ 各种官网语法例子在路上
======================> 传送门
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$%


入门

1.包名
  • 这里的包名可以不用和文件的路径对应(包名可以随意而不用管这个源文件的路径)
  • Kotlin里面的包名(这个和java的语法一样)
    package my.demo
    import java.util.*
  • 这里修改上面的Hello Kotlin代码(加入包名的定义 )

    package com..dapi
    fun main(args: Array<String>) {
      println("Hello Kotlin.")
    }
  • 我们去看看 out文件夹(可以看到编译之后的class文件其实是和文件夹对应起来了的)


     
  • 我们修改刚才那个文件的包名再试试


    修改包名

    编译之后class的路径
  • 默认导入的包
    kotlin.
    kotlin.annotation.

    kotlin.collections.
    kotlin.comparisons.
    (since 1.1)
    kotlin.io.
    kotlin.ranges.

    kotlin.sequences.
    kotlin.text.

    java.lang.*
    kotlin.jvm.*
2.基本数据类型(这里需要注意哈~~ kotlin中所有的都是对象包括int之类的基本类型,so这里说的基本类型其实也是对象哈)
  • Double类型 (64位)
  • Float 类型(32位)
  • Long类型(64位)
  • Int(32位)
  • Short类型(16位)
  • Byte类型(8位)
package com.suse.dapi.demo

fun main(args: Array<String>) {

    println("Hello Kotlin.")

    val mDouble: Double = 12345.0
    val mFloat: Float = 12323f
    var mLong: Long = 123
    var mInt: Int = 1232

    var mInt2 = 123213 //省略了变量类型

    mDouble = 123.0  //尝试修改 val 申明的变量
    mLong = 12323

    mInt = mDouble.toInt() // double ==> int
    mLong = mInt.toLong() // int ==> long

}
  • 这里引入了变量的定义

    • 变量使用var 或者 val来申明(区别是val是只读变量,var是可变变量)
    • 变量使用来申明类型,类型申明也可以省略~ 这就由系统来推断是什么类型
    • 变量还有好些需要注意的地方后面遇到了在提哈
  • 这里还有一个类型转换的方法(每个类型都有,只要是Number类的子类都可以使用,上面提到的基本类型都是Number的子类哈)


    Number源码
  • 字符(字符不能直接和数据比较,但是Char也有 toInt之类的方法)

    var mChar: Char = 'P'
      mChar == 1 // 错误
      mChar == 'a'
      mChar.toByte()
      mChar.toInt()
  • 虽然字符也有toInt方法,但是字符并不是Number的子类哈


    Char的部分源码
  • Boolean 布尔类型 ,这个的值有两个 true false

  • 数组类型 Array(系统库提供了一个arrayOf的方法可以创建 Array数组)

      var intArray = arrayOf(1,2,3)  //这里返回的实际上是Array对象
      println(intArray[0])
    
      var intArray: Array<Int> = arrayOf(1,2,3)
      println(intArray[0])

arrayOf源码
  • 系统还提供了一个函数 arrayListOf(实际上就是返回的java里面的ArrayList)


     
  • 字符串类型String

      var name: String = "dapi"
      var number = "123345666"
  • 字符串还有两个有趣的语法(和PHP的字符串类似 ,直接看例子吧)
    var content = """

            这里面可以写各种东西
            var name = ""  .....
            这个就类似 html 里面的 <pre></pre>标签
            $name   ====>    ${'$'} // 这个是在字符串里面输出 $
    """

    var templ = "i am $name, my number is ${ name + number}" //字符串模板
  • 模板里面的 ${} 或者 $变量名 这个就是一个表达式,${}里面还可以调用函数
3.流程控制
  • 条件语句 if(if可以是一个表��式,也可以有返回值)
    var number1 = 0x0033
    var number2 = 0x0022
    var flag: Boolean = false
    // 一般的 if
    if(number1 > number2){
        flag = true
    }else{
        flag = false
    }


    // 有返回值的 if
    flag = if (number1 > number2){
        println(".....")
        true // 吧返回值放到最后就可以了
    }else{
        println("-----")
        false
    }

    // 表达式的 if
    flag = if (number1 > number2) true else false
  • 循环语句 for while do..while
  • for

    /**
       *
       * 以前的 for (int i = 0;i < 10;i++) 循环已经不行了
       * for 专门用来迭代 有 iterator 方法的集合
       *
       */
      var numbers = arrayOf(1,2,3,4,5)
      for (item in numbers){
          //..
      }
      for (item in numbers.iterator()){
          //..
      }
      /**
       *
       * 这里是的index 是下标  0 ,1 ,2, 3, 4,...
       * 查看源码发现 indices 其实返回的就是一个数组 Array 实际上也是使用的 iterator
       *
       */
      for (index in numbers.indices){
          // ..
      }
    
      /**
       * 这里 (index,value) 其实就是下标 和 对应的值
       * 查看源码发现 withIndex 其实返回的就是一个数组 Array 实际上也是使用的 iterator
       *
       */
      for((index,value) in  numbers.withIndex()){
          // ...
      }
    • 所以for循环就是专门用来迭代 iterator 的 ,只要 in 的右边返回的是一个包含iterator(): Iterator<T>方法的对象(或者是直接是一个Iterator对象)就可以了
  • while(偷哈懒 ~~)

while (x > 0) {
    x--
}

do {
    val y = retrieveData()
} while (y != null) // y is visible here!
  • when语句(这个就和以前的 switch类似 , switch 和 if 的结合)
    var number3 = 100

    when(number3){
        in 1..101 -> println("1")
        in 10..102 -> println("2")
        else -> println("3")
    }
    // 结果是 3

    when{
        number3 in 1..102 -> {
            //...
        }
        number3 == 100 -> {
            //...
        }
        else -> {
            //...
        }
    }
  • breakcontinue (这个就是多了一个标签的情况)
    while(number3 < 200){
        if(number3 % 2 == 0){
            continue
        }
        if(number3 == 150){
            break
        }
        number3++
    }

    //添加标签的情况
    tagert@
    while(number3 < 200){
        while(number3 < 150){
            break@tagert
        }
        number3++
    }

猜你喜欢

转载自www.linuxidc.com/Linux/2017-05/144062.htm