Kotlin學習(一)——函數、常量與變量、數據類型

一、函數

Kotlin中,使用關鍵字fun來申明函數,fun 后面緊跟著的是函數名,函數形式參數,返回值,函數體
例如:
函數名:sun
形參:有a、b兩個,都是Int類型,
返回值:以:申明后面跟著的是具體的返回值類型,如需要返回無意義的值(java的void)時可以不寫或者用Unit<br />

fun sum(a: Int, b: Int): Int {
      return a + b
}

無返回值

fun printSum(a: Int, b: Int):Unit {
println("sum of $a and $b is ${a + b}")
}

或者不寫Unit

fun printSum(a: Int, b: Int):Unit {
println("sum of $a and $b is ${a + b}")
}

<br />

Main函數
fun main(args: Array<String>) {
println("hello world");//在kotlin中,對;結束標識符沒有作嚴格要求,可寫可不寫,println是kotlin種的打印語句相當于java的System.out.println
}

二、常量與變量

kotlin中常量和變量的定義分別用val、var來定義,定義常量和變量分別有以下幾種形式:

常量的定義(使用val關鍵字)

val a: Int = 1  // 立即賦值
val b = 2   // 自動推斷出 `Int` 類型
val c: Int  // 如果沒有初始值類型不能省略
c = 3       // 明確賦值

變量的定義(使用var關鍵字)

var x = 5 // 自動推斷出 `Int` 類型
x += 1

三、數據類型

在 Kotlin 中,所有東西都是對象,在這個意義上講所以我們可以在任何變量上調用成員函數和屬性。有些類型是內置的,因為他們的實現是優化過的。但是用戶看起來他們就像普通的類。本節我們會描述大多數這些類型:數字、字符、布爾和數組。<br />

1.數字類型

Kotlin 提供了6種類型來表示數字(與 Java 很相近):Double、Float、Long、Int、Short、Byte<br />
注意在 Kotlin 中字符不是數字<br />
kotlin中數字類型的字面值有個特性,就是支持下劃線使得數字更有閱讀性(從kotlin以后1.1)<br />
例如:

val oneMillion = 1_000_000
val creditCardNumber = 1234_5678_9012_3456L
val socialSecurityNumber = 999_99_9999L
val hexBytes = 0xFF_EC_DE_5E
val bytes = 0b11010010_01101001_10010100_10010010

值常量字面值有以下幾種:

十進制: 123<br />
Long 類型用大寫 L 標記: 123L<br />
十六進制: 0x0F<br />
二進制: 0b00001011<br />
注意: 不支持八進制<br />
Kotlin 同樣支持浮點數的常規表示方法:<br />
默認 double:123.5、123.5e10<br />
Float 用 f 或者 F 標記: 123.5f<br />

2.類型轉換

  • 隱式轉換,不需要書寫格外代碼,由系統自動實現類型轉換,Kotlin中如果定義變量明確指定了數字類型,那么就不能進行隱式轉換了,如下面的代碼就不被支持

      val a: Int? = 1 // 一個裝箱的 Int (java.lang.Integer)
      val b: Long? = a // 隱式轉換產生一個裝箱的 Long (java.lang.Long) 
    
      正確的轉換代碼:
      val a:Int? = 1
      val b:Long? = a.toLong
    
  • 顯示轉換,需要使用格外的代碼,如需要把一個Int類型轉換成Long類型,需要使用Int.toLong

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

3.布爾

布爾用 Boolean 類型表示,它有兩個值:true 和 false。

若需要可空引用布爾會被裝箱。

內置的布爾運算有:

|| – 短路邏輯或
&& – 短路邏輯與
! - 邏輯非

4.數組

數組在 Kotlin 中使用 Array 類來表示,它定義了 get 和 set 函數(按照運算符重載約定這會轉變為 [])和size 屬性,以及一些其他有用的成員函數:

class Array<T> private constructor() {
val size: Intoperator fun get(index: Int): Toperator fun set(index: Int, value: T): Unitoperator fun iterator(): Iterator<T>// ……
}   

我們可以使用庫函數 arrayOf() 來創建一個數組并傳遞元素值給它,這樣 arrayOf(1, 2, 3) 創建了 array [1, 2, 3]。 或者,庫函數 arrayOfNulls() 可以用于創建一個指定大小、元素都為空的數組。
另一個選項是用接受數組大小和一個函數參數的工廠函數,用作參數的函數能夠返回 給定索引的每個元素初始值:
Kotlin 也有無裝箱開銷的專門的類來表示原生類型數組: ByteArray、 ShortArray、IntArray 等等。這些類和 Array 并沒有繼承關系,但是 它們有同樣的方法屬性集。它們也都有相應的工廠方法:

    val x: IntArray = intArrayOf(1, 2, 3)
    x[0] = x[1] + x[2]

數組的使用Demo

    fun testArray() {
    //數組的定義
    var arrays: Array<Int> = arrayOf(12, 21, 33, 44, 55);//定義一個Int類型數組,直接賦值
    var arrays2: Array<Int?> = arrayOfNulls<Int>(arrays.size)//定義一個長度和arrays一樣的空數組,后賦值
    //遍歷arrays數組,并且給arrays賦值
    for (c in 0..arrays.size-1){
        println("arrays的值遍歷:${arrays[c]}");
        arrays2.set(c,arrays.get(c)+1)
    }
    //遍歷arrays2數組
    for (c in arrays2) {
        println("arrays2:$c   ");
    }
}

5.字符串

字符串用 String 類型表示。字符串是不可變的。 字符串的元素——字符可以使用索引運算符訪問: s[i]。 可以用 for 循環迭代字符串:

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

字符串字面值<br />
Kotlin 有兩種類型的字符串字面值: 轉義字符串可以有轉義字符,以及原生字符串可以包含換行和任意文本。轉義字符串很像 Java 字符串:

val s = "Hello, world!\n";//轉義采用傳統的反斜杠方式

原生字符串 使用三個引號(""")分界符括起來,內部沒有轉義并且可以包含換行和任何其他字符:

val text = """
for (c in "foo")
print(c)"""

也可以類似Java中通過 trimMargin() 函數去除前導空格:

val text = """|Tell me and I forget.|Teach me and I remember.|Involve me and I learn.|(Benjamin Franklin)""".trimMargin()

默認 | 用作邊界前綴,也可以選擇其他字符并作為參數傳入,比如 trimMargin(">")。

6.字符串模板

字符串可以包含模板表達式 ,即一些小段代碼,會求值并把結果合并到字符串中。 模板表達式以美元符($)開頭,由一個簡單的名字構成:

val i = 10
val s = "i = $i" // 求值結果為 "i = 10"
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,283評論 6 530
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 97,947評論 3 413
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,094評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,485評論 1 308
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,268評論 6 405
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,817評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,906評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,039評論 0 285
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,551評論 1 331
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,502評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,662評論 1 366
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,188評論 5 356
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 43,907評論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,304評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,563評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,255評論 3 389
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,637評論 2 370

推薦閱讀更多精彩內容