Kotlin學習筆記之一:Kotlin基礎
阿新 • • 發佈:2019-01-11
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}"
}