1. 程式人生 > >Kotlin學習筆記之一:Kotlin基礎

Kotlin學習筆記之一:Kotlin基礎

1.函式:
/**
 * 關鍵詞fun 申明是函式
 * 引數形式:引數名:型別
 * Kotlin中陣列是一個類
 * 這是一個不帶返回值的函式
 */
fun main(args: Array<String>){
    println("hello world")
}


/**
 1. 這是一個帶返回值的函式
 */
fun sumNumber(a:Int,b:Int):Int{
    return a+b
}
2.語句和表示式函式體:

語句和表示式的區別:表示式有值,語句沒有值。在kotlin中,if是一個表示式,而不是語句。
eg:

/**
 * 這裡用表示式體,去掉了花括號和return 這種函式體
 * 作為表示式函式體的型別,其返回型別是可以省略的
 */
fun max(a:Int,b:Int):Int = if(a>b) a else b
3.變數:
     /***
     * 方式一:
     * 也可以用關鍵詞:val
     * val:不可變引用,類似於final
     * var:可變引用,類似於非final修飾
     */
    var number:Int =123

    /**
     * 方式二:
     */
    val name:String
    name = "hello"


    /**
     * 方式三:
     */
    var doubleNumber =2.3e8
;
4.字串模板:
fun main(args: Array<String>) {
    var content = "hello world"
    println("the content is $content ")
    //如果變數是更復雜的表示式,用{}括起來
    println("the content's length is ${content.length} ")
    //如果要在字串中使用$,需要用轉義符號\
    println("the content's length is \$$content ")//the content's length is $hello world 
}
5.類:
/**
 * java中最常寫的類
 */
public class Dog {

    private String name;

    public Dog(String name) {
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

轉換成Kotlin中的類:

class Dog(var name:String)
6.類的屬性和get/set方法:
/**
 * 預設提供了set和get方法
 * val申明的屬性只有get方法
 * var申明的屬性有get/set方法
 */
class Cat(val name: String, var age: Int) {
    //自定義一個屬性
    val isOld: Boolean
        get() {
            return if (age>=3) true else false
        }
}

fun main(args: Array<String>) {
    val cat = Cat("小貓", 1)
    println(cat.isOld)//false
}
7.列舉:
/**
 * 列舉類:帶屬性和方法
 * enmu和class 關鍵詞
 */
enum class WeekDay(val number:Int) {
    MONDAY(1),TUESDAY(2),WEDNESDAY(3),THURSDAY(4),FRIDAY(5);
    fun totalNum()=number*5
}
8.when:

在kotlin中,when 和if一樣,是一個帶返回值的表示式,因此也可以寫一個直接返回when表示式體函式:

//when中使用列舉類
fun main(args: Array<String>) {
    println(getWeekday(WeekDay.FRIDAY));//星期五
}

fun getWeekday(day:WeekDay)=
    when(day){
        WeekDay.MONDAY->"星期一"
        WeekDay.TUESDAY->"星期二"
        WeekDay.WEDNESDAY->"星期三"
        WeekDay.FRIDAY->"星期五"
        else ->"nothing"
    }

//when中使用任何物件:setof返回一個set集合
fun mixWeekday(day1: WeekDay,day2: WeekDay):String=
        when(setOf<WeekDay>(day1,day2)){
            setOf(WeekDay.MONDAY,WeekDay.TUESDAY)->"BEFORE"
            setOf(WeekDay.WEDNESDAY,WeekDay.THURSDAY)->"MIDDLE"
            setOf(WeekDay.THURSDAY,WeekDay.FRIDAY)->"AFTER"
            else->"nothing"
        }


//when中不帶引數:
fun mixWeek(day1: WeekDay,day2: WeekDay):String=
        when{
            day1==WeekDay.MONDAY&&day2==WeekDay.TUESDAY->"BEFORE"
            day1==WeekDay.WEDNESDAY&&day2==WeekDay.THURSDAY->"MIDDLE"
            day1==WeekDay.THURSDAY&&day2==WeekDay.FRIDAY->"AFTER"
            else->"nothing"
        }
9.迭代:
fun main(args: Array<String>) {
    //遍歷從【1,20】
    for(i in 1..20){
        println(getNumber(i))
    }

    //遍歷從100開始,遞減到1,步長為2
    for(i in 14 downTo 1 step 2){
        println(i)//14,12,10,8,6,4,2
    }

    //迭代list
    val list = arrayListOf<String>("kotlin","java","python")
    for ((index,element) in list.withIndex()){
        println("$index:$element");
    }
}

fun getNumber(num:Int)=when{
    num%3==0->"3的倍數"
    num%5==0->"5的倍數"
    num%15==0->"15的倍數"
    else->"${num}"
}