我們寫的代碼片段可以在這里運行測試 測試代碼地址
Kotlin中var和val的區(qū)別
在Kotlin中的 var 和 val 是屬于關(guān)鍵字翻翩,乍看它倆很相似饲漾,因為只是差一個字母而已福荸,可是區(qū)別卻很大。
var是作為可變變量搜锰,這是一個可以通過重新分配來更改為另一個值的變量缭乘。這種聲明變量的方式和Java中聲明變量的方式一樣司蔬。
先來看下這段用var作為可變變量的代碼
fun main(args: Array<String>) {
var name = "hongfa"
println(name)
name = "==hongfa=="
println(name)
}
運行后的結(jié)果邑茄,運行正常,說明var確實是作為可變變量俊啼。
image.png
val是一個只讀變量肺缕,這種聲明變量的方式相當于Java中的final變量。一個val創(chuàng)建的時候必須初始化。
fun main(args: Array<String>) {
val finalValue = "我是不可改變的"
finalValue = "我就是要改變你";
println(finalValue)
}
運行后的結(jié)果搓谆,看到?jīng)]有,運行的時候報錯了豪墅,提示cannot be reassigned(不能重新分配),通過這么個例子泉手,我們可以很快的就了解并記住了他們的區(qū)別。
image.png
認識了 var 和 val 變量后偶器,接下來就開始我們的第一個函數(shù)吧斩萌,廢話不多說,上來就是干屏轰,直接上代碼颊郎。
函數(shù)表達式
先來看下一個函數(shù)的返回值與無返回值是什么樣的寫法,kotlin中定義一個函數(shù)是使用fun作為關(guān)鍵字去聲明函數(shù)
無返回值的函數(shù)
//默認無返回的函數(shù)
fun method(){
println("沒有返回值");
}
帶返回值的函數(shù)霎苗,下面來一個String類型和Int類型的函數(shù)
//String類型
fun method() :String{
return "我是有返回值的";
}
//Int類型,這里有個區(qū)別姆吭,Java中int都是小寫的,而Kotlin里面的Int首字母是大寫的唁盏。
fun method() :Int{
return 0;
}
接下來看下無參和有參的函數(shù)是怎么定義的
無參的函數(shù)
//測試函數(shù)
fun test(){
println("無參的函數(shù)");
}
有參函數(shù)内狸,默認是無返回值的
fun add(var a: Int,var b: Int){
println("有參的函數(shù)");
}
帶返回值的有參函數(shù)
fun add(a: Int, b: Int): Int{
return a + b;
}
單表達式 函數(shù)
fun result() =1;
//等價于
fun result(): Int {
return 1;
}
//如果是這樣子的話厘擂,可以和when結(jié)合在一起昆淡,when的作用在文章的后半部分有說到
fun main(args: Array<String>) {
println(result("Red"));
}
//獲取返回值
fun result(color: String): Int = when (color) {
"Red" -> 0
"Green" -> 1
"Blue" -> 2
else -> throw IllegalArgumentException("Invalid color param value")
}
in關(guān)鍵字的使用
可以看到kotlin的if else,條件判斷語句或者是使用for循環(huán)語句其實和Java都沒有什么區(qū)別
if語句判斷示例
//使用 in
fun main(args: Array<String>) {
var x: Int =1;//如果x的值為0,則輸出not
var y: Int =3;
//如果存在于區(qū)間(1,y-1)刽严,則打印yes
if (x in 1..y-1) {
print("yes");
}else {
print("not");
}
}
//使用 !in
fun main(args: Array<String>) {
var x: Int =0;//如果x的值為1昂灵,則輸出not
var y: Int =3;
//如果x不存在與區(qū)間(1,y-1),則打印yes
if (x !in 1..y-1) {
print("yes");
}else {
print("not");
}
}
//你也可以這樣子寫if語句,但是它打印的內(nèi)容卻是這樣子的“kotlin.Unit”
fun foo(param: Int) {
val result = if (param == 1) {
"one"
} else if (param == 2) {
"two"
} else {
"three"
}
}
for循環(huán)語句使用示例
fun main(args: Array<String>) {
var v: Int;
for(x in 1..5){
println(x);
}
}
//遍歷集合(類似于Java中的for(String name : names))
fun main(args: Array<String>) {
val lists = listOf("a", "b", "c")
for(list in lists){
println(list);
}
}
直接使用in在lists里面判斷是否存在某個對象舞萄,這個就和我們Java里面的List的contains作用一樣
fun main(args: Array<String>) {
var a: String = "a";
val lists = listOf("a", "b", "c")
//如果lists集合中包含a對象則打印yes
if (a in lists){
print("yes");
}
}
when 語句
Kotlin用when眨补、->及else組合來替代原先的switch、case及default
fun test(value: Int){
when(value){
10 -> println("數(shù)字10");
20 -> println("數(shù)字20");
30 -> println("數(shù)字30");
else ->{
println("未知數(shù)");
}
}
}
智能類型推測 -- is and !is
判斷一個對象是否為一個類的實例倒脓,我們可以使用is關(guān)鍵字
這個與Java中的instanceof關(guān)鍵字類似渤涌,但在Kotlin中如果已經(jīng)確定了一個對象的類型,可以在接下來的代碼塊中直接作為這個確定類型使用把还。
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// 做過類型判斷以后实蓬,obj會被系統(tǒng)自動轉(zhuǎn)換為String類型
return obj.length;
}
//同時還可以使用!is,來取反
if (obj !is String){
}
// 代碼塊外部的obj仍然是Any類型的引用
return null;
}
異常處理 try/catch 表達式
kotlin的異常處理和Java的異常處理并沒有什么不同
fun testTryCatch() {
val result = try {
test();
} catch (e: ArithmeticException) {
throw IllegalStateException(e);
}
// 對result做處理
}
好了吊履,本文內(nèi)容到此結(jié)束安皱,歡迎大家丟磚一起學習,一起進步艇炎,謝謝大家酌伊!