kotlin 语言入门指南一
基于官网的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}")
}
定义变量
定义不可变变量:
val a: Int = 1 // 指定类型的变量
val b = 2 // 推断为`Int`型
val c: Int // 没有初始值时必须指定变量类型
c = 3 // 赋值
定义可变变量:
var x = 5 // 推断为`Int`型
x += 1
注释
同java与javascript,支持单行与块注释:
// This is an end-of-line comment /* This is a block comment
on multiple lines. */
不同于java的是,kotlin的区块注释是可以嵌套的。
字符串模板
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 语言入门指南一的更多相关文章
- kotlin 语言入门指南(二)--代码风格
语言风格 这里整理了 kotlin 惯用的代码风格,如果你有喜爱的代码风格,可以在 github 上给 kotlin 提 pull request . 创建DTOs(POJSs/POCOs) 文件: ...
- kotlin 语言入门指南(三)--编码习惯
这章主要讲当前 kotlin 的一些编码习惯. 命名 如无疑问,kotlin 的命名风格与以下的java风格一样: --驼峰命名法(不要使用下划线) --类名首字母大写 --方法和属性名首字母小写 - ...
- kotlin 语言入门指南(一)--基础语法
基于官网的Getting Start的基础语法教程部分,一共三节,这篇是第一节,翻译如下: 基础语法 定义一个包 包的声明必须放在文件头部: package my.demo import java.u ...
- 浙工大C语言入门指南 (仅供参考)
C语言书籍推荐 浙工大图书馆中,计算机的书都集中在三楼TP区.我个人推荐下面这么几本书. <Head First C>.Head First系列的书质量基本都很高.该书有很多插图,总体上就 ...
- Kotlin 语言高级安卓开发入门
过去一年,使用 Kotlin 来为安卓开发的人越来越多.即使那些现在还没有使用这个语言的开发者,也会对这个语言的精髓产生共鸣,它给现在 Java 开发增加了简单并且强大的范式.Jake Wharton ...
- Webpack 入门指南 - 2.模块
这一次我们谈谈模块问题. 通常我们希望这个项目可以分为多个独立的模块,比如,上一次提高的 hello 函数,如果我们定义为一个模块,其它模块引用之后,直接调用就好了.在前端怎么使用模块呢?这可说来话长 ...
- [go语言学习指南]
内部分享,根据自己的经验,收集汇总的go语言学习指南. 适合新手入门. 可以通过这里进行下载.
- Microsoft Orleans 之 入门指南
Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...
- AngularJS快速入门指南02:介绍
AngularJS是一个JavaScript框架.它可以通过<script>标记被添加到HTML页面中. AngularJS通过指令对HTML属性进行了扩展,然后通过表达式将数据绑定到HT ...
随机推荐
- (转)Java ConcurrentModificationException异常原因和解决方法
转载自:http://www.cnblogs.com/dolphin0520/p/3933551.html 在前面一篇文章中提到,对Vector.ArrayList在迭代的时候如果同时对其进行修改就会 ...
- 查看mac上的隐藏文件
打开终端敲入(最好是复制),这样就可以隐藏隐藏文件: defaults write com.apple.finder AppleShowAllFiles -boolean false ; killal ...
- 635B. Bear and Compressing
B. Bear and Compressing time limit per test 2 seconds memory limit per test 256 megabytes input stan ...
- Oracle的基本学习(二)—基本查询
一.基本查询语句 (1)查看当前用户 show user; (2)查看当前用户下的表 select * from tab; (3)查看员工表的结构 desc emp; (4)选择全部列 S ...
- python类与对象基本语法
面向对象编程的2个非常重要的概念:类和对象. 对象是面向对象编程的核心,在使用对象的过程中,为了将具有共同特征和行为的一组对象抽象定义,提出了另外一个新的概念--类. 类就相当于制造飞机时的图纸,用它 ...
- redis intset(整数集合)
redis intset (整数集合) 概述 intset 是集合的底层实现结构之一 intset 集合只包含整数 intset 自升级 intset 整数集合是有序的 intset 结构 结构 // ...
- 玩转SSH端口转发
SSH有三种端口转发模式,本地端口转发(Local Port Forwarding),**远程端口转发(Local Port Forwarding)**以及**动态端口转发(Dynamic Port ...
- com.alibaba.dubbo.rpc.RpcException: Failed to invoke the method findUserByUserNo in the service wusc.edu.facade.user.service.PmsUserFacade.
017-04-25 10:55:30,505 INFO [AbstractRegistry.java:302] : [DUBBO] Register: consumer://192.168.1.101 ...
- 八种创建等高列布局【出自w3c】
高度相等列在Web页面设计中永远是一个网页设计师的需求.如果所有列都有相同的背景色,高度相等还是不相等都无关紧要,因为你只要在这些列的父元素中设置一个背景色就可以了.但是,如果一个或多个列需要单独设置 ...
- (函数封装)获取class名称
使用原生JavaScript,获取类操作符时:即使使用getElementByClassName,在Firefox和IE9以下是不兼容的.Firefox下是可以用它获取的到元素而IE不行,一般框架都会 ...