基于官网的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 语言入门指南(二)--代码风格

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

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

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

  3. kotlin 语言入门指南(一)--基础语法

    基于官网的Getting Start的基础语法教程部分,一共三节,这篇是第一节,翻译如下: 基础语法 定义一个包 包的声明必须放在文件头部: package my.demo import java.u ...

  4. 浙工大C语言入门指南 (仅供参考)

    C语言书籍推荐 浙工大图书馆中,计算机的书都集中在三楼TP区.我个人推荐下面这么几本书. <Head First C>.Head First系列的书质量基本都很高.该书有很多插图,总体上就 ...

  5. Kotlin 语言高级安卓开发入门

    过去一年,使用 Kotlin 来为安卓开发的人越来越多.即使那些现在还没有使用这个语言的开发者,也会对这个语言的精髓产生共鸣,它给现在 Java 开发增加了简单并且强大的范式.Jake Wharton ...

  6. Webpack 入门指南 - 2.模块

    这一次我们谈谈模块问题. 通常我们希望这个项目可以分为多个独立的模块,比如,上一次提高的 hello 函数,如果我们定义为一个模块,其它模块引用之后,直接调用就好了.在前端怎么使用模块呢?这可说来话长 ...

  7. [go语言学习指南]

    内部分享,根据自己的经验,收集汇总的go语言学习指南. 适合新手入门. 可以通过这里进行下载.

  8. Microsoft Orleans 之 入门指南

    Microsoft Orleans 在.net用简单方法构建高并发.分布式的大型应用程序框架. 原文:http://dotnet.github.io/orleans/ 在线文档:http://dotn ...

  9. AngularJS快速入门指南02:介绍

    AngularJS是一个JavaScript框架.它可以通过<script>标记被添加到HTML页面中. AngularJS通过指令对HTML属性进行了扩展,然后通过表达式将数据绑定到HT ...

随机推荐

  1. Unix环境编程基础下

    Unix出错处理 当UNIX系统的函数出错时,通常会返回一个负值.我们判断函数的返回值小于0表示出错了,注意我们并不知道为什么出错.例如我们open一个文件,返回值-1表示打开失败,但是为什么打开失败 ...

  2. 持续集成:TestNG中case之间的关系

    持续集成:TestNG中case之间的关系   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq: ...

  3. mavne的创建

    一.maven的前期准备 1.建议使用myeclipse2013的版本的因为在你创建web项目是它把你的目录结构给你创建好,myeclipse也自带maven插件 2.jdk1.6以上 3.maven ...

  4. Sql server DATEADD日期函数的使用

    DATEADD日期函数 DATEADD() 函数在日期中添加或减去指定的时间间隔. 日:在当前日期上加两天 , ,'2014-12-30') 月:在当前日期上加两个月 , , 年:在当前日期上加两年 ...

  5. 迁移 SQL Server 到 Azure SQL 实战

    最近有个维护的项目需要把 SQL Server 2012 的数据库迁移到 Azure SQL 上去.主要是因为租用的主机到期,而运营商停止了主机租赁业务,看来向云端的迁移是大势所趋啊!经过一番折腾最终 ...

  6. Java多线程中的单例模式

    一.在多线程环境下创建单例 方式一: package com.ietree.multithread.sync; public class Singletion { private static cla ...

  7. [内存管理]linux X86_64处理器的内存布局图

    linux X86 64位内存布局图

  8. 实体框架(Entity Framework)

    实体框架(Entity Framework) 实体框架(Entity Framework)简介 ADO.NET Entity Framework 是微软以 ADO.NET 为基础所发展出来的对象关系对 ...

  9. MongoDB大数据高并发读写性能测试报告

    服务器大小: 单节点部署,磁盘1T,内存128G 并发导入规模: 1,多线程并发导入csv文件 2,csv文件分1万.10万.100万.200万行记录4种大小 3,每个csv对应一个collectio ...

  10. Play学习 - 体验网页模板

    在经过无数个尝试后,最终用sbt把play所依赖的所有包都下载下来了,现在可以非常快速编译运行了.今天体验了下网页模板,觉得非常不错,在这里做个简单的介绍. 原文说明: A Play Scala te ...