對於一種語言來講,變量和函數(方法)是最重要的兩類語法。因爲Kotlin語法糖的存在,讓本不支持函數語法的JVM支持將函數放到代碼的最頂層。本篇文章主要是介紹變量的定義和函數的基本使用方法。編程
絕大多數編程語言都有變量和常量的概念,Kotlin和Java相似,儘管沒有常量語法,但可使用final定義一個不可修改的變量,其實就至關於常量。數組
在Java中是這樣定義變量的:bash
int a=10;
final double b=1.0;
String s="Hello";
int ok;
複製代碼
在Kotlin中,定義變量和Java有幾點不一樣之處:微信
看一下示例代碼:編程語言
var a=10
var b:Double=2.0
val c="hello"
var d:Int
d=a
c="hi" // 編譯器報錯,由於c是常量
複製代碼
不管什麼語言,函數的定義必定有如下幾個部分:函數
Kotlin代碼:優化
fun add(a: Int, b: Int): Int {
return a + b
}
複製代碼
能夠看到,定義Kotlin函數時,函數頭除了包含函數名外,還須要有fun關鍵字。至於參數,與定義Kotlin變量的方式相同。若是函數有返回值,那麼返回值類型在函數定義部分末尾指定,與函數定義部分用冒號(:)分隔。若是函數沒有返回值,則能夠返回Unit,或者什麼都不反回,如:ui
fun add(a: Int, b: Int) {
a + b
}
複製代碼
Kotlin中的註釋與Java中的註釋同樣,也有單行註釋和塊註釋。編碼
// 表示大那行註釋 /* */ 表示塊註釋spa
Kotlin塊註釋還支持嵌套:
/* hello /* world */ */
在Kotlin中,一切都是對象。任何變量都有相應的方法和屬性。爲了提升效率,Kotlin對部分數據類型進行了優化,變成了內置的數據類型。不過這些類型的變量用起來就像普通的類,也有本身的方法和屬性。
經常使用的數據類型有數值、字符、布爾值和數組。
Kotlin提供的內置數據類型:
數據類型 | 字節數 |
---|---|
Double | 8 |
Float | 4 |
Long | 8 |
Int | 4 |
Short | 2 |
Byte | 1 |
Kotlin代碼:
var a: Int = 10
var b: Double = 2.0
val c: Boolean = true
var d: Short = 0
複製代碼
Kotlin和Java同樣,也有默認類型,整數默認類型是Int,浮點數默認類型是Double。
不過在Java中佔字節數少的變量轉爲佔字節數多的變量時,會自動進行轉換。而Kotlin不能夠,Kotlin提供了一系列的方法用來進行類型轉換:
Kotlin和Java同樣,也提供了一些特殊的表示法,用於表示Double和Float類型的值,以及十六進制和二進制
Kotlin還提供數值分隔符,使用下劃線(_)分隔,能夠根據具體狀況進行分隔,舉個例子,1000000表示一百萬,爲了方便讀取,能夠寫成1_000_000。
Kotlin語言中,字符類型用Char表示,不過和Java不一樣的是,Kotlin中不能將字符直接看做是數字。
與Java同樣,字符用單引號,Kotlin也支持反斜槓轉義符,如常見的\n,\t,\b 等等。
雖然字符不能直接做爲數值使用,可是可使用toInt()方法將字符轉成相應的ASCII碼值。
Kotlin中布爾類型用Booleann描述,該類型有兩個值:true和false。Boolean類型有3中操做:邏輯或(||),邏輯與(&&)和邏輯非(!)。
看如下代碼示例:
var flag1 : Boolean =true
val flag2:Boolean= false
if(flag1 && flag2){
println("true")
}
if(flag1 || flag2){
println("false")
}
複製代碼
在Kotlin中,用Array描述數組,該類中包含了get和set方法,size屬性及其餘成員方法。
在Kotlin中定義數組的方法有不少,使用arrayOf()函數定義能夠存儲任意值的數組;使用arrayOfNulls函數定義指定長度的空數組(數組元素中沒有值);使用Array類的構造器指定數組長度和初始化數據的方式定義數組;使用intArrayOf、shortArrayOf等函數定義指定類型的數組,並初始化。請看示例:
val arr1= arrayOf(1,2,3)
println(arr1[2])
arr1[2]=10
println(arr1[2])
var arr2= arrayOfNulls<Double>(10)
println(arr2.size)
var arr3= intArrayOf(1,2,3,4,5)
println(arr3[0])
複製代碼
Kotlin中使用String表示字符串,有如下兩種字符串:
val s1="Hello\n"
val s2="World"
val s3="""Hello World"""
複製代碼
Kotlin中海油一個很重要的功能,就是字符串模板。所謂字符串模板,就是在字符串中添加若干佔位符,內容在後期指定,也就是說,用模板能夠設置字符串動態的部分。
模板使用美圓符號 i」,其中
後面的i是變量,還能夠用${表達式}來做佔位符。
val s1="Hello $arr1[0]"
val s2="World ${a+b}"
複製代碼
Kotlin中也有包的概念,包在表達方式上與Java徹底同樣,不過Kotlin中的包和目錄沒有關係,Kotlin的包僅僅是爲了引用文件中的資源而設計的,先看段代碼:
package com.example.kotlin
fun adtion() {}
class MyClass {}
複製代碼
上面代碼中,定義了一個函數和一個類,實際上,完整的函數名和類名分別是com.example.kotlin.adtion和com.example.kotlin.MyClass。
那麼在其餘的Kotlin文件中,若想使用adtion方法或者MyClass類,直接調用com.example.kotlin.adtion和com.example.kotlin.MyClass。
固然,爲了方便,也能夠相似Java同樣,使用import先導入該文件
import com.example.kotlin.adtion
import com.example.kotlin.MyClass
複製代碼
或者
import com.example.kotlin.*
複製代碼
Kotlin還支持給導入的資源起一個別名:
import com.example.kotlin.adtion as a
import com.example.kotlin.MyClass as m
複製代碼
Kotlin的控制流與Java基本相同,只是使用了when替代了switch。固然,在Kotlin中,if和when不只能夠做爲語句使用,還能夠看成表達式使用。
Kotlin中,if語句自己就是表達式,有返回值,所以Kotlin中不會有如Java那樣的三木運算符。下面是條件語句的基本使用:
if(a<b){
println(a)
}else{
println(b)
}
複製代碼
若是將if語句看成表達式來使用的話,知足條件的最後一條執行語句就是返回值:
var min=if(a<b){
println(a)
a
}else{
println(b)
b
}
複製代碼
Kotlin中,使用when替換了switch語句,標準使用以下:
when (a) {
1 -> {
println(1)
}
2 -> {
println(2)
}
else -> {
println("else")
}
}
複製代碼
使用when語句時,應該注意:
固然,when語句也能夠做爲表達式來使用,第一個知足條件的最後一條語句做爲when語句的返回值:
var m=when (a) {
1 -> {
println(1)
}
2 -> {
println(2)
}
else -> {
println("else")
}
}
複製代碼
若是多個分支執行的代碼都同樣,能夠在一個分支用逗號(,)分隔多個條件,如:
when (a) {
1, 3, 5 -> {
println(1)
}
2, 4, 6 -> {
println(2)
}
else -> {
println("else")
}
}
複製代碼
when中的分支條件不只能夠是常量,還能夠是表達式,如:
when (a) {
in 1..5 -> {
println(1)
}
in 6..8 -> {
println(2)
}
else -> {
println("else")
}
}
複製代碼
在Kotlin中,for循環能夠直接枚舉集合中的元素,也能夠按集合索引來枚舉元素。
for(item in collection) println(item)
複製代碼
var arr= arrayOf(2,4,6,8)
for(item: Int in arr){
println(item)
}
複製代碼
for(i in arr.indices){
print(arr[i])
}
複製代碼
Kotlin中的while和Java中的while循環是同樣的,也分while和do..while,代碼以下:
var i:Int=0
while(i<10){
println(i)
i++
}
複製代碼
在循環中,使用continue和break,continue是結束這次循環,執行下次循環,break是跳出循環,執行循環以後的步驟,這點和Java同樣。
儘管Kotlin和Java是無縫銜接的,但在語法上仍是有許多不一樣的,最重要的是編碼習慣和觀念的改變,所以若想充分掌握Kotlin語言,還須要下一番功夫。
後續內容,請關注個人微信公衆號——Android機動車