基础语法

类型推导

在java中我们定义变量格式为
类型 变量 = 值,需要声明类型
例如:

String str = "hello world"
int i =2;


Kotlin
var/val 变量 = 值
val str = "hello world"
val i = 2

函数返回值视情况声明返回值类型
一般情况建议声明,使用单行表达式与等号可以省略声明

fun sum(x : Int,y : Int) = x + y

总结需要声明的情况:
1.如果变量是一个函数的参数,则必须使用
2.如果它是一个递归函数,则必须使用
3.如果他是一个非表达式函数,则除了返回Unit,其他情况必须使用

Unit:相当于Java的void,也是一种数据类型

表达式:可以返回值得语句,例如:"kotlin".length //返回值为6

变量声明

var 可以声明变量
val 为常量,为var + final
由于变量存在被修改的可能,很多副作用的产生都是与可变数据及共享状态有关,所以我们在开发过程中尽量使用val和不可变对象来减少这种情况,在定义局部变量时使用var更加适合,它占用的内存更少,如得到集合中值的和,用var很简洁,用val得用递归

函数声明

1.高阶函数
使用函数作为参数

 data class Country(val name: String,val continient : String,val population : Int)


    fun fileterCountries(contries : List,test : (Country)->Boolean) : List{
        val res = mutableListOf()
        for (c in contries){
            if(test(c)){
                res.add(c)
            }
        }
        return res
    }

 class Book(var name : String){
        fun printName(){
//            Log.e(TAG,this.name)
        }

        fun isBigEuropeanCountry(contry : Country) : Boolean{
            return contry.continient == "亚洲" && contry.population >= 1000
        }
    }

 val countrys = listOf(Country("中国","亚洲",12121),Country("日本","亚洲",232))
        fileterCountries(countrys,book::isBigEuropeanCountry)

上面的函数的参数为条件函数,其中 ::实现了类的方法进行引用

Lambda

条件:
1.一个lambda表达式必须通过{}来包裹
2.如果Lambda声明了参数部分的类型,且返回值类型支持类型推导,那么lambda变量就可以省略函数类型声明
3.如果lambda变量声明了函数类型,那么lambda的参数部分的类型就可以省略

val foo = {x : Int->
    val y = x+1
}
Enum、When、For用法

Enum

enum class Day{
       MON,
       TUE,
       WEN,
       THU,
       FRI,
       SAT,
       SUN
   }

When

fun schedule(sunny : Boolean,day : Day) = when(day){
        Day.SAT -> Log.e(TAG,"sat")
        Day.SUN -> Log.e(TAG,"finish")
        Day.FRI -> Log.e(TAG,"appointment")
        else -> when{
            sunny -> Log.e(TAG,"library")
            else -> Log.e(TAG,"study")
        }
    }

for

for (i in 1..4) print(i) // 打印结果为: "1234"

for (i in 4 downTo 1) print(i) // 打印结果为: "4321"

for (i in 1..4 step 2) print(i) // 打印结果为: "13"

for (i in 4 downTo 1 step 2) print(i) // 打印结果为: "42"

for (i in 1 until 10) { // i in [1, 10), 不包含 10
     println(i)
}

String

字符串拼接

fun  message(name: String,lang:String) = "Hi${name},welcome to${lang}!"

 val str = message("Shaw","Kotlin")
        Log.e(TAG,str)//结果 : HiShaw,welcome toKotlin!

字符串 ==判断两个对象内容是否相等,===是判断两个对象引用是否相等

你可能感兴趣的:(基础语法)