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 ...
随机推荐
- 传输层TCP协议
目录 首部格式数据单位特定注意自动重传请求ARQ具体实现发送缓存接收缓存滑动窗口确认丢失和确认迟到超时重传时间选择报文段的发送时机运输连接发送TCP请求客户端拥塞处理相关概念避免拥塞具体实现TCP 的 ...
- 存储linux RAID6被重建成RAID5的数据恢复解决方案
数据恢复故障描述:原存储为12块2T硬盘组成的Linux RAID6,文件系统均为EXT3,此存储上划有3个LUN,每个均为6TB大小,某天在RAID失效后,维护人员为了抢救数据,对此失效的存储重进行 ...
- JavaScript编码解码以及C#中的编码解码
JS: 编码 解码 escape unescape encodeURI decodeURI encodeURIComponent decodeURIComponent C#: HttpUtilit ...
- 23(java/io/data_io)
package test_ppt;import java.io.*;public class test_ppt{ public static void main(String args[]) thro ...
- C/C++常考面试题(一)
这算是一个系列吧,记录一下在准备秋招期间,所准备的C++面试题,望秋招顺利.所有的面试题均来源于各大论坛,网络. C/C++常考面试题(一) 常用的C++数据结构有哪些? vector,序列式容器,相 ...
- LeetCode 327. Count of Range Sum
无意看到的LeetCode新题,不算太简单,大意是给一个数组,询问多少区间和在某个[L,R]之内.首先做出前缀和,将问题转为数组中多少A[j]-A[i] (j>i)在范围内. 有一种基于归并排序 ...
- 简单的后台数据和前台数据交互.net
最近忙着做POS项目,心血来来潮写了点小项目. 更具要求是随机显示数据并且产生的数据是可以控制的.前台交互显示能够倒叙,切每次只显示一条,页面不能超过20条超过的部分做删除. 我先展示一下前台的代码, ...
- 【原】Unity Shader VS UDK Material Editor
UDK 的材质编辑器十分好用,毕竟是所见即所得的.虽然unity也有类似第三方插件,但易用性还是差很多,下面主要是,把一些常见表达式概念对应起来. 1. UDK CameraVector (相机位向量 ...
- JS中字符串与数组的一些常用方法
真是恨透了这些类似于substring substr slice 要么长得像,要么就功能相近的方法... 1⃣️string 1.substring(start开始位置的索引,end结束位置索引) 截 ...
- .net软件反编译笔记
在软件的破解及源码获取及重新编译的道路上会遇到一些问题,书此备查. 大名鼎鼎的Reflector以及开源的ILSPY都是.NET程序集的反编译利器,但是它们不能为你做全部的工作. 0x01: 遇到反编 ...