kotlin知識梳理-變量與函數(shù)

前言:17年的時候第一次接觸了kotlin拍嵌,中途斷斷續(xù)續(xù)地用著。今年來到新公司循诉,剛好項目中有大量的kotlin代碼横辆,雖然對kotlin的用法有一定了解,但是要在組內(nèi)進行分享茄猫,所以想借此機會對kotlin的知識點進行整理狈蚤,加深印象,方便后續(xù)查看划纽。

一脆侮、基本類型

1、整數(shù)
??kotlin中共提供了四種整數(shù)類型勇劣,分別為Byte靖避、Short潭枣、Int和Long。

類型 大小 最小值 最大值
Byte 8 -128 127
Short 16 -32768 32767
Int 32 -2,147,483,648 2,147,483,647
Long 64 -9,223,372,036,854,775,808 9,223,372,036,854,775,807

??定義變量時幻捏,如果初始化值沒有超過Int類型的最大值盆犁,則會自動推斷為Int型。如果超過則推斷為Long型篡九,如果要顯式定義為Long型谐岁,則在末尾加上“L”即可。

2榛臼、浮點數(shù)
??kotlin中的浮點數(shù)由Float和Double兩種類型組成伊佃。

類型 大小 有效數(shù)字比特數(shù) 指數(shù)比特數(shù) 十進制位數(shù)
Float 32 24 8 6-7
Double 64 53 11 15-16

??當給一個變量設置初始化值為小數(shù)時,默認是Double類型沛善,如果要使它為Float類型锭魔,則需要在末尾加上“f”或“F”后綴。

3路呜、顯式轉(zhuǎn)換
??在kotlin中是不支持較小的類型不能隱式轉(zhuǎn)換為較大的類型迷捧。

var a: Int = 2
var b: Long = a  //這樣會報錯
var b: Long = a.toLong()  //這樣寫才正確,必須用顯式轉(zhuǎn)換

每個數(shù)字類型支持如下的轉(zhuǎn)換:
toByte(): Byte
toShort(): Short
toInt(): Int
toLong(): Long
toFloat(): Float
toDouble(): Double
toChar(): Char

4胀葱、字符串
??kotlin中字符串用String類型表示漠秋,與java一樣字符串是不可變的。我們可以用索引運算符來訪問:s[i]抵屿,也可以用for循環(huán)對其進行遍歷庆锦。

for (c in str) {
    println(c)
}

??平時我們可以用“+”操作符來連接字符串與其他類型值,但是要求表達式的第一個元素是字符串轧葛,否則就會報錯搂抒。

var str =  1 + "打印"  //報錯
var str = "打印" + 1  //正確

??當然除了上面這種方法外,kotlin還支持字符串模板尿扯,即字符串字面值可以包含模板表達式 求晶,會求值并把結果合并到字符串中。 模板表達式以美元符($)開頭衷笋。

var a: Int = 2
var str = "打印a = $a"  / /輸出結果:“打印a = 2”
或
var str = "打印a = ${a + a}"  / /輸出結果:“打印a = 4”  //用“{}”花括號括起來的表達式

如果想輸出一個原始字符串芳杏,即保留字符串原來格式的,用三個引號(""")括起來

 var str = """
        我是一個粉刷匠
        粉刷能力強
    """
 print(str)  //輸出結果:我是一個粉刷匠
                       粉刷能力強

二辟宗、變量

val : 定義只讀局部變量爵赵,只能進行一次賦值

val a: Int = 3 //直接賦值,不賦值會報錯
或
val a = 3 //賦值后可省略類型泊脐,不賦值會報錯

總結:首次定義必須賦值
???????????參數(shù)類型可以省略
???????????后續(xù)無法再次賦值

var :可多次賦值變量

var a: Int = 1 //必須賦值空幻,參數(shù)類型可省略
a = 5 //可多次賦值

總結:首次定義必須賦值
???????????參數(shù)類型可以省略
???????????后續(xù)可以再次賦值

三、函數(shù)

(1)函數(shù)定義方式

 fun sum(a: Int, b: Int, c: Int): Int {
       return a + b + c
 } //帶返回值的

 fun sum(a: Int, b: Int, c: Int): Unit {
       print(a + b + c)
 } //不帶返回值的,Unit 是一種只有一個值——Unit 的類型,這個值不需要顯式返回,可以省略

(2)帶默認參數(shù)的函數(shù)
??在kotlin中可以在定義函數(shù)時容客,設置默認參數(shù)秕铛,即給參數(shù)賦一個默認值则剃,后續(xù)調(diào)用方法時如果沒有傳這個參數(shù)的值,那么這個參數(shù)的值還是原來設置的默認值如捅。

//例如
fun sum(a: Int, b: Int = 6, c: Int): Int {
       return a + b + c
 } 

fun main(args: Array<String>) {
       print(sum(2, c = 4)) //輸出結果:12棍现,即 2+6+4
}

注意點:當一個函數(shù)調(diào)用混用位置參數(shù)與命名參數(shù)時,所有位置參數(shù)都要放在第一個命名參數(shù)之前镜遣。這里所說的位置參數(shù)指的就是可以直接給值的類似上面的a己肮,命名參數(shù)是”參數(shù)名=值“形式,類似c悲关。舉個栗子:print(sum(2, c = 4))這樣寫是ok的谎僻,2是a的值,b不賦值用默認值寓辱,c賦值4艘绍。如果是print(sum(2, b = 3, 4)),這樣寫就報錯了秫筏,效果如下


報錯信息

錯誤信息:不允許混合名稱和位置參數(shù)诱鞠。也就是說它不能識別你這個4是傳給誰的,如果改為print(sum(2, b = 3, c = 4))就不會有問題了这敬。

(3)單表達式函數(shù)
??如果函數(shù)只返回一個表達式航夺,可以省略花括號”{ }“,直接”=“后返回崔涂。

//例如
fun sum(a: Int): Int = a + 1

(4)可變數(shù)量的參數(shù)
??可變數(shù)量參數(shù)定義方式是在參數(shù)定義前面加上“vararg”即可阳掐。在kotlin中使用可變數(shù)量參數(shù)不像java一樣,需要將可變數(shù)量參數(shù)作為方法里參數(shù)列表的最后一個參數(shù)冷蚂,可以放在任意位置缭保。

   fun method(vararg args: Int){
        for (it in args){
            println("打印:$it")
        }
    }

    fun main(args: Array<String>) {
        method(1,2,3,4,5)  //打印結果為:打域琛:1 打右章睢:2 打印:3 打邮ⅰ:4 打映骨住:5
    }

如果該函數(shù)不止一個可變數(shù)量參數(shù)孕锄,還有其他參數(shù)并且在可變數(shù)量參數(shù)以后的吮廉,就要用命名參數(shù)了。

   fun method(vararg args: Int, a: Int){
        for (it in args){
            println("打踊痢:$it")
        }
    }

    fun main(args: Array<String>) {
        method(1,2,3,4,5,a = 6)  //這里的參數(shù)a傳參時宦芦,必須用“參數(shù)名 = 值”方式傳遞
    }



總結:以上主要介紹了kotlin中數(shù)據(jù)基本類型、變量定義和函數(shù)定義的一些內(nèi)容轴脐,為了避免篇幅過長调卑,后面的內(nèi)容將分幾篇文章來發(fā)布抡砂。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市恬涧,隨后出現(xiàn)的幾起案子注益,更是在濱河造成了極大的恐慌,老刑警劉巖溯捆,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件丑搔,死亡現(xiàn)場離奇詭異,居然都是意外死亡提揍,警方通過查閱死者的電腦和手機啤月,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來劳跃,“玉大人谎仲,你說我怎么就攤上這事∨俾兀” “怎么了郑诺?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長杉武。 經(jīng)常有香客問我间景,道長,這世上最難降的妖魔是什么艺智? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任倘要,我火速辦了婚禮,結果婚禮上十拣,老公的妹妹穿的比我還像新娘封拧。我一直安慰自己,他們只是感情好夭问,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布泽西。 她就那樣靜靜地躺著,像睡著了一般缰趋。 火紅的嫁衣襯著肌膚如雪捧杉。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天秘血,我揣著相機與錄音味抖,去河邊找鬼。 笑死灰粮,一個胖子當著我的面吹牛仔涩,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播粘舟,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼熔脂,長吁一口氣:“原來是場噩夢啊……” “哼佩研!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起霞揉,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旬薯,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后适秩,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體袍暴,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年隶症,在試婚紗的時候發(fā)現(xiàn)自己被綠了政模。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡蚂会,死狀恐怖淋样,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情胁住,我是刑警寧澤趁猴,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站彪见,受9級特大地震影響儡司,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜余指,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一捕犬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧酵镜,春花似錦碉碉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至靠粪,卻和暖如春蜡吧,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背占键。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工昔善, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人捞慌。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓耀鸦,卻偏偏與公主長得像,于是被迫代替她去往敵國和親啸澡。 傳聞我的和親對象是個殘疾皇子袖订,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容