基于官网的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. 游戏(bzoj 1854)

    Description lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性 ...

  2. SqlServer不允许更改字段类型(表中已有数据)

    工具-选项-设计器-阻止保存要求重新创建表的更改,√去掉.

  3. 前端知识点总结——CSS

    1.CSS的概述 1.什么是CSS? CSS:Cascading Style Sheets层叠样式表,级联样式表(简称:样式表) 2.作用 设置HTML网页元素的样式 3.HTML与CSS的关系 HT ...

  4. 安装glibc错误链接导致系统崩溃,u盘启动紧急救援模式下修复系统。

    Sln 命令  创建动态符号链接 用法 sln source  dest 故障案例:一个误操作 导致了一个不小的故障,输入所有命令都无效,直接系统无法启动. 故障描述 sln /usr/lib64/l ...

  5. LeetCode OJ-- Sudoku Solver ***

    https://oj.leetcode.com/problems/sudoku-solver/ 九宫格数独问题. 一行上为1 2 3 到9 一列上为1 2 3 到9 每个小的3*3格子为 1 2 3 ...

  6. Codeforces 898 C.Phone Numbers-STL(map+set+vector)

    C. Phone Numbers   time limit per test 2 seconds memory limit per test 256 megabytes input standard ...

  7. 对动态规划(Dynamic Programming)的理解:从穷举开始(转)

    转自:http://janfan.cn/chinese/2015/01/21/dynamic-programming.html 动态规划(Dynamic Programming,以下简称dp)是算法设 ...

  8. 80端口被屏蔽解决方法,80端口穿透之NAT端口映射技术

    介绍一种NAT端口映射技术应用,达到80端口穿透目的,解决80端口被屏蔽的问题,也是80端口被屏蔽解决方法中经常用到的. 80端口穿透类似80端口转发,因为80端口被屏蔽,在数据层面来说是不能直接访问 ...

  9. js 日期计算星座 根据生日的月份和日期,一行代码计算星座的js小函数(转)

    本博客根据 开源中国作者清风徐不来 的文章 根据生日的月份和日期,一行代码计算星座的js小函数(转) 原文出自CSDN 无心的专栏 的文章,知识产权归原文作者所有! 点击查看原文:js 日期计算星座

  10. Zookeeper协调分布式节点demo

    多台服务器和客户端通过第三方组件Zookeeper管理 public class DistributedServer { private static final String connectStri ...