英文文檔翻譯--Kotlin(一、基礎(chǔ)語(yǔ)法)

基礎(chǔ)語(yǔ)法

定義包
包說明需要定義在源文件的最頂部

package my.demo
import java.util.*
// ...

文件路徑與包不需要完全匹配:源文件可以放在文件系統(tǒng)的任意位置

定義函數(shù)
函數(shù)有兩個(gè) Int 型參數(shù)吹泡,返回類型也為 Int 型

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

函數(shù)主體為表達(dá)式匾效,返回類型為被推斷的類型

fun sum(a: Int, b: Int) = a + b

函數(shù)無返回值

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

無返回值的函數(shù) Unit 可以省略

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

定義變量
定義常量

val a: Int = 1  // 立即賦值

val b = 2   // 被推測(cè)為 Int 類型

val c: Int  // 無初始化值時(shí),必須注明類型
c = 3       // 延遲賦值

定義變量

var x = 5 // 被推測(cè)為 Int 類型
x += 1

注釋
就像 java 和 JavaScript 一樣,kotlin 也支持單行筐乳、多行注釋

// 單行注釋
/*  多行
    注釋塊 */

與 java 不同的是歌殃,kotlin 的注釋塊可以嵌套
java:


img

kotlin:


img

使用字符串模板

var a = 1
// 普通變量在模板中:
val s1 = "a is $a" 

a = 2
// 表達(dá)式在模板中:
val s2 = "${s1.replace("is", "was")}, but now is $a"

使用條件表達(dá)式

fun maxOf(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}

使用 if 作為單一表達(dá)式

fun maxOf(a: Int, b: Int) = if (a > b) a else b

使用可空變量和判斷空值
如果變量可空,需要明確注明該變量是可空的蝙云。
如果字符串不能轉(zhuǎn)化為 Int 類型氓皱,則返回空

fun parseInt(str: String): Int? {
    // ...
}

可能返回為空的函數(shù)

fun printProduct(arg1: String, arg2: String) {
    val x = parseInt(arg1)
    val y = parseInt(arg2)

    // x、y 可能為空,會(huì)導(dǎo)致 x * y 出錯(cuò)
    if (x != null && y != null) {
        // 空值檢查后波材,x 和 y 均非空
        println(x * y)
    }
    else {
        println("either '$arg1' or '$arg2' is not a number")
    }    
}

或者

// ...
if (x == null) {
    println("Wrong number format in arg1: '${arg1}'")
    return
}
if (y == null) {
    println("Wrong number format in arg2: '${arg2}'")
    return
}

// 空值檢查后股淡,x 和 y 均非空
println(x * y)

使用類型判斷和類型自動(dòng)轉(zhuǎn)換
is 操作符可以判斷變量類型。已經(jīng)被確定類型的本地常量或者屬性廷区,不需要顯示類型轉(zhuǎn)換:

fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // `obj` 在這個(gè)分支里自動(dòng)轉(zhuǎn)換成了 `String` 類型
        return obj.length
    }

    // `obj` 在類型判斷的分之外還是 `Any` 類型
    return null
}

或者

fun getStringLength(obj: Any): Int? {
    if (obj !is String) return null

    // `obj` 在這個(gè)分支里自動(dòng)轉(zhuǎn)換成了 `String` 類型
    return obj.length
}

甚至是

fun getStringLength(obj: Any): Int? {
    // `obj` 在`&&`右邊自動(dòng)轉(zhuǎn)換成了 `String` 類型
    if (obj is String && obj.length > 0) {
        return obj.length
    }

    return null
}

使用循環(huán)

val items = listOf("apple", "banana", "kiwi")
for (item in items) {
    println(item)
}

或者

val items = listOf("apple", "banana", "kiwi")
for (index in items.indices) {
    println("item at $index is ${items[index]}")
}

使用while 循環(huán)

val items = listOf("apple", "banana", "kiwi")
var index = 0
while (index < items.size) {
    println("item at $index is ${items[index]}")
    index++
}

使用表達(dá)式 when

fun describe(obj: Any): String =
when (obj) {
    1          -> "One"
    "Hello"    -> "Greeting"
    is Long    -> "Long"
    !is String -> "Not a string"
    else       -> "Unknown"
}

使用范圍
判斷一個(gè)數(shù)字是否在某個(gè)范圍內(nèi)用 in 操作符

val x = 10
val y = 9
if (x in 1..y+1) {
    println("fits in range")
}

判斷數(shù)字是否超出范圍

val list = listOf("a", "b", "c")

if (-1 !in 0..list.lastIndex) {
    println("-1 is out of range")
}
if (list.size !in list.indices) {
    println("list size is out of valid list indices range too")
}

在范圍內(nèi)循環(huán)

for (x in 1..5) {
    print(x)
}

或者按步長(zhǎng)循環(huán)

for (x in 1..10 step 2) {
    print(x)
}
for (x in 9 downTo 0 step 3) {
    print(x)
}

使用集合
在集合內(nèi)循環(huán)

for (item in items) {
    println(item)
}

判斷集合內(nèi)是否包含某個(gè)對(duì)象用 in 操作符

when {
    "orange" in items -> println("juicy")
    "apple" in items -> println("apple is fine too")
}

使用 lambda 表達(dá)式過濾(filter)或者映射(map)集合

fruits
.filter { it.startsWith("a") }
.sortedBy { it }
.map { it.toUpperCase() }
.forEach { println(it) }

生詞表

單詞 含義
syntax n. 語(yǔ)法唯灵;句法;有秩序的排列
specification n. 規(guī)格隙轻;說明書埠帕;詳述
arbitrarily adv. 武斷地;反復(fù)無常地玖绿;專橫地
arbitrary adj.任意(性)的敛瓷,隨意的;(個(gè)人)主觀武斷的斑匪,隨心所欲的呐籽;反復(fù)無常的,任性多變的蚀瘸,無定見的狡蝶,變幻莫測(cè)的;專制的苍姜,專斷的牢酵,專橫的
omitted adj. 省略了的;省去的 v. 遺漏衙猪,省略(omit的過去分詞)
mutable adj. 易變的馍乙,不定的;性情不定的
nested adj. 嵌套的垫释,內(nèi)裝的 v. 筑巢丝格;嵌入(nest的過去分詞)
progression n. 前進(jìn);連續(xù)

原文鏈接

http://kotlinlang.org/docs/reference/basic-syntax.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末棵譬,一起剝皮案震驚了整個(gè)濱河市显蝌,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌订咸,老刑警劉巖曼尊,帶你破解...
    沈念sama閱讀 211,496評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異脏嚷,居然都是意外死亡骆撇,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,187評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門父叙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來神郊,“玉大人肴裙,你說我怎么就攤上這事∮咳椋” “怎么了蜻懦?”我有些...
    開封第一講書人閱讀 157,091評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)夕晓。 經(jīng)常有香客問我宛乃,道長(zhǎng),這世上最難降的妖魔是什么运授? 我笑而不...
    開封第一講書人閱讀 56,458評(píng)論 1 283
  • 正文 為了忘掉前任烤惊,我火速辦了婚禮,結(jié)果婚禮上吁朦,老公的妹妹穿的比我還像新娘柒室。我一直安慰自己,他們只是感情好逗宜,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,542評(píng)論 6 385
  • 文/花漫 我一把揭開白布雄右。 她就那樣靜靜地躺著,像睡著了一般纺讲。 火紅的嫁衣襯著肌膚如雪擂仍。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,802評(píng)論 1 290
  • 那天熬甚,我揣著相機(jī)與錄音逢渔,去河邊找鬼。 笑死乡括,一個(gè)胖子當(dāng)著我的面吹牛肃廓,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播诲泌,決...
    沈念sama閱讀 38,945評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼盲赊,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了敷扫?” 一聲冷哼從身側(cè)響起哀蘑,我...
    開封第一講書人閱讀 37,709評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎葵第,沒想到半個(gè)月后绘迁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,158評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡卒密,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,502評(píng)論 2 327
  • 正文 我和宋清朗相戀三年缀台,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片栅受。...
    茶點(diǎn)故事閱讀 38,637評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡将硝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出屏镊,到底是詐尸還是另有隱情依疼,我是刑警寧澤,帶...
    沈念sama閱讀 34,300評(píng)論 4 329
  • 正文 年R本政府宣布而芥,位于F島的核電站律罢,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏棍丐。R本人自食惡果不足惜误辑,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,911評(píng)論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望歌逢。 院中可真熱鬧巾钉,春花似錦、人聲如沸秘案。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,744評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)阱高。三九已至赚导,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間赤惊,已是汗流浹背吼旧。 一陣腳步聲響...
    開封第一講書人閱讀 31,982評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留未舟,地道東北人圈暗。 一個(gè)月前我還...
    沈念sama閱讀 46,344評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像处面,于是被迫代替她去往敵國(guó)和親厂置。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,500評(píng)論 2 348

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