基于官网的Getting Start的基础语法教程部分,一共三节,这篇是第一节,翻译如下:

基础语法

定义一个包

包的声明必须放在文件头部:

package my.demo

import java.util.*

// ...

不需要加上package的路径,kotlin可以自动定位package的位置。

查看更多packages

定义函数

参数是两个int型,并且返回值也是int型的函数:

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

没有指定返回值的函数表达式,编辑器会自动推断返回类型:

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

无返回值的函数(Unit,相当于java的Void):

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

Unit声明可以省略:

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

查看Functions

定义变量

定义不可变变量:

val a: Int = 1  // 指定类型的变量
val b = 2 // 推断为`Int`型
val c: Int // 没有初始值时必须指定变量类型
c = 3 // 赋值

定义可变变量:

var x = 5 // 推断为`Int`型
x += 1

查看更多 Properties And Fields

注释 

同java与javascript,支持单行与块注释:

// This is an end-of-line comment

/* This is a block comment
on multiple lines. */

不同于java的是,kotlin的区块注释是可以嵌套的。

查看更多Documenting Kotlin Code

字符串模板

var a = 1
// 字符变量:
val s1 = "a is $a" a = 2
// 任意表达式:
val s2 = "${s1.replace("is", "was")}, but now is $a"

查看更多String templates

If语句

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

if的表达式写法:

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

查看更多 if-expressions

Null的用法

引用的参数可能为null时,应该标记为null。

例:str 不能被转换为 Int 型时会返回null:

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

函数中使用null:

fun printProduct(arg1: String, arg2: String) {
val x = parseInt(arg1)
val y = parseInt(arg2) // Using `x * y` yields error because they may hold nulls.
if (x != null && y != null) {
// x and y are automatically cast to non-nullable after null check
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 and y are automatically cast to non-nullable after null check
println(x * y)

查看更多 Null-safety

类型检查与自动转换

用 is 操作符来判断对象是否属于某一类型,如果不可变变量或者属性是被检查的类型的实例,就不需要再为变量指定类型,在作用域内可以直接当成被检查的类型使用:

fun getStringLength(obj: Any): Int? {
if (obj is String) {
// 在此作用域里`obj` 自动被当成 `String` 类型使用
return obj.length
} // `obj` 在外层仍然是 `Any` 类型
return null
}

fun getStringLength(obj: Any): Int? {
if (obj !is String) return null // `obj` 自动转为 `string` 类型
return obj.length
}

亦或

fun getStringLength(obj: Any): Int? {
// `&&` 操作符右边的 `obj` 自动转为 `String` 类型
if (obj is String && obj.length > 0) {
return obj.length
} return null
}

查看更多Classes and Type casts

for循环

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

or

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

查看更多 for loop

while

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

查看更多See while loop

when语句

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

查看更多when expression

 Range

判断数字是否在范围内:

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

判断数字是否超出范围:

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")
}

范围遍历:

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

过程遍历:

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

查看更多Ranges

使用Collections

遍历collections:

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

使用 in 关键字判断集合(collection)里是否包含某个对象(object):

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

使用lambda表达式来过滤(filter)或映射(map)集合(collections):

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

转载请注明原文地址:http://www.cnblogs.com/joejs/p/6875128.html

kotlin 语言入门指南(一)--基础语法的更多相关文章

  1. kotlin 语言入门指南一

    基于官网的Getting Start部分,翻译如下: 基础语法 定义一个包 包的声明必须放在文件头部: package my.demo import java.util.* // ... 不需要加上p ...

  2. kotlin 语言入门指南(二)--代码风格

    语言风格 这里整理了 kotlin 惯用的代码风格,如果你有喜爱的代码风格,可以在 github 上给 kotlin 提 pull request . 创建DTOs(POJSs/POCOs) 文件: ...

  3. kotlin 语言入门指南(三)--编码习惯

    这章主要讲当前 kotlin 的一些编码习惯. 命名 如无疑问,kotlin 的命名风格与以下的java风格一样: --驼峰命名法(不要使用下划线) --类名首字母大写 --方法和属性名首字母小写 - ...

  4. 055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念

    055 01 Android 零基础入门 01 Java基础语法 06 Java一维数组 02 数组的概念 本文知识点:数组的概念 数组的声明创建.初始化 在学习数组的声明创建.初始化前,我们可以和之 ...

  5. 016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值

    016 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 10 布尔类型和字符串的字面值 本文知识点:字面值 关于字面值的概念,需要注意:很多地方,我们可能就把字面值 ...

  6. 015 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 09 Unicode编码

    015 01 Android 零基础入门 01 Java基础语法 02 Java常量与变量 09 Unicode编码 本文知识点:Unicode编码以及字符如何表示? ASCII码是美国提出的标准信息 ...

  7. 002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介

    002 01 Android 零基础入门 01 Java基础语法 01 Java初识 02 Java简介 学习Java的基础语法 Java是一门编程语言,学习的逻辑其实和现实世界的语言是一样的,需要了 ...

  8. 001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学

    001 01 Android 零基础入门 01 Java基础语法 01 Java初识 01 导学 welcome to Java World 欢迎来到Java世界 一起领略Java编程世界的奥秘与奥妙 ...

  9. C#快速入门笔记(1)——基础语法

    C#快速入门笔记(1)——基础语法 总体框架:

随机推荐

  1. JavaScript文本收缩展开 showdetail

    原文发布时间为:2009-11-15 -- 来源于本人的百度文章 [由搬家工具导入] <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Tran ...

  2. [LeetCode] Reorder List 反向插入链表

    Given a singly linked list L: L0→L1→…→Ln-1→Ln,reorder it to: L0→Ln→L1→Ln-1→L2→Ln-2→… You must do thi ...

  3. 关于Xcode6 的自定义模板位置

    自定义模板放置位置: Xode6 -> 打开App 后, /Contents/Developer/Platforms/iPhoneOS.platform/Developer/Library/Xc ...

  4. [Oracle] Lock&Latch梳理

    Oracle lock&latch 1. 概述 4种锁机制 lock latch pin mutex 保证资源在并发访问和修改时不被破坏 锁类型 行为 持有时间 级别 保护类型 lock 队列 ...

  5. hdu 1005(找循环节)

    Number Sequence Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)T ...

  6. AC日记——石子归并 51nod 1021

    石子归并 思路: 经典动态规划——归并类问题: 我们把状态划为n个,即1-n的n个长度为n个状态: 那么,每个长度为i的状态都可以由i-1个长度为i-1的状态推出: 所以,dp转移方程: dp[i][ ...

  7. 终极CRUD-3-用Jackson解析json

    目录 1 jackson json基本介绍和使用 2 jackson 常用的注解 2.1@JsonProperty 2.2 @JsonIgnore 2.3 @JsonIgnoreProperties ...

  8. Android学习--持久化(一) 文件存储

    持久化之   文件存储 这里把Android持久化全都整理一下,这一篇文章先简单的说一下文件的存储,通过下面一个简单的Demo,理解一下这个文件存储,先说说下面Demo的思路: 1.创建EditTex ...

  9. Akka 和 μJavaActors入门

         Akka和μJavaActorsμJavaActors均是java的Actor库,其中Akka提供了叫为完整的Actor开发框架,较为庞大,学习成本很高,μJavaActors 是一个轻量级 ...

  10. Wordpress笔记:背景音乐

    想要在blog首页加上自动播放的背景音乐,能找到的插件与方法基本上都是讲在文章里添加的.侧边栏里添加文本的方法也总有美观等等这样那样的问题,折腾了几种之后终于搞定了.用的是Audio player插件 ...