基礎語法

package jichuyufa
/*
默認導入
kotlin.*
kotlin.annotation.*
kotlin.collections.*
kotlin.comparisons.*
kotlin.io.*
kotlin.ranges.*
kotlin.sequences.*
kotlin.text.*
*/

//-------------------函數定義------------------------
//格式 : fun 函數名 (參數:參數類型...) : 返回值類型{ 執行的語句}
fun sum(a:Int,b:Int):Int{ return a+b}
// 只有一條返回語句的方法,可以由編譯器自己判斷返回的類型。
fun sum2(a:Int,b:Int)=a+b
//public 方法必須明確寫出返回值的類型
public fun sum3(a:Int,b:Int):Int=a+b
//無返回值的函數,需要用Unit類型作為返回值,也可以省略
fun printSum(a:Int,b:Int):Unit{print(a+b)}
//省略
fun printSum2(a:Int,b:Int){print(a+b)}
//測試
/fun main(args: Array<String>) {
sum(1,2)
sum2(1,2)
sum3(1,2)
printSum(1,2)
printSum2(1,2)
}
/

//-----------------可變長參數--------------------------
//多個相同的參數,可以使用可變長參數 使用關鍵字vararg進行標識
fun vars(vararg v:Int){
for(vt in v)
print(vt)
}
//測試
/fun main(args: Array<String>) {
vars(1,2,3,4,5)//輸出12345
}
/

//---------------lambda匿名函數-----------------
/fun main(args: Array<String>) {
val sumLambda:(Int,Int)->Int={x,y->x+y}
println(sumLambda(1,2))//輸出3
}
/

//-------------定義常量與變量-------------------
//可變變量定義var關鍵字 || 格式:var 變量名:類型=初始化的值
//不可變變量類似于java中的final val關鍵字 || 格式:val 變量名:類型=初始化值
//kotlin中常量和變量均可以沒有初始化值,但是在引用前必須初始化,編譯器支持自動類型判斷,可以不指定類型。
/fun main(args: Array<String>) {
val a:Int=1
val b=1 //系統自動推斷變量類型為int
val c:Int //不在聲明時初始化,必須提供變量類型
c=1// 明確賦值
var x=5//系統自動推斷變量的類型為int
x+=1 //變量可修改
println(""+a+","+b+","+c+","+x)
}
/

//------------注釋------------
//與java的注釋一樣,但是kotlin的注釋可以嵌套

//-------------字符串模板----------------
/*
$ 表示一個變量名或者變量值
$varName 表示變量值
${(varName.fun()} 便是變量的方法返回值
*/

/*fun main(args: Array<String>) {
var a=1
//模板中的簡單名稱:
val s1="a is $a"
println(s1)//a is 1

a=2
//模板中的任意表達式
val s2="${s1.replace("is","was")},but now is $a"

println(s2)//a was 1,but now is 2

}*/

//--------------Null檢查機制------------------
/*
Kotlin 的空安全設計對于聲明為空的參數,在使用時要進行空判斷處理,有兩種處理方式
一:字段后加!! 像java一樣拋出空異常
二:字段后加? 可不做處理返回值為null或配合?: 做空判斷處理
*/

/*fun main(args: Array<String>) {
//類型后面加?表示可以為空
var age:String?=null
println(age) //null
//拋出空指針異常
val ages=age!!.toInt()
println(ages) //null異常
//不做處理返回null
val ages1=age?.toInt()
println(ages1)//null
//age為空返回-1
val ages2=age?.toInt()?:true
println(ages2)//若為null 返回true

//當一個引用為null值時,對應的類型聲明必須明確的標識為null
//當str中的字符串內容不是一個整數時,返回null
fun parseInt(str:String):Int?{
    if(str.equals("a"))
        return null
    return Integer.parseInt(str)
}
val x=parseInt("a")
println(x)//返回null
if(x!=null) println(x) //經過null檢查之后會自動轉換成非null類型

}
*/

//--------------類型檢測及自動類型轉換---------------
//我們可以使用is運算符檢測一個表達式時候某類型的一個實例 類似于java中的instanceof關鍵字
fun getStringLength(obj:Any):Int?{
if(obj is String) return obj.length
return null

//還有另一種方法 與 java的 instanceof不同    使用!is
/*if(obj !is String)
    return null*/

}
//或者
fun getStringLength2(obj:Any):Int?{
if(obj !is Int)return null
//在此之前obj仍是Any類型的引用,在這里會被自動轉換成String
return obj
}
//也可以
fun getStringLength3(obj:Any):Int?{
//在&&運算符的右側,obj會被自動轉換成String
if(obj is String && obj.length>0)
return obj.length
return null
}

/*fun main(args: Array<String>) {
println(getStringLength("aaaaa"))
println(getStringLength2(3))
println(getStringLength3("aaaaa"))
}
*/

//-------------區間--------------------
//區間表達式具有操作符形式.. 的rangeTo 函數輔以in和!in 形成
//區間是為任何可以比較類型定義的,但對于整型原生類型,他有一個優化的實現。
fun main(args: Array<String>) {
for(i in 1..4) print(i)//輸出1234 閉區間【】
println()
for(i in 4..1)print(i)//什么都不輸出 a<=i<=b 即 4<=i<=1
println()
for(i in 1..10)print(i)//輸出1-10 等價于 a<=i<=b 即 1<=i<=10
println()

//使用step 指定步長
for(i in 1..4 step 2) print(i) //等價于 a<=(i+=2滯后計算)<=b
println()
//倒序可以使用downTo
for(i in 4 downTo 1 step 2) print(i)

//使用until 排除元素 可變成模仿開區間
println()
for(i in 1 until 10) print(i) //【1,10)

}

fun test(){}

class Runoob{}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,501評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,673評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,610評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,939評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,668評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 56,004評論 1 329
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 44,001評論 3 449
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,173評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,705評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,426評論 3 359
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,656評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,139評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,833評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,247評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,580評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,371評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,621評論 2 380

推薦閱讀更多精彩內容