Kotlin语法(基础)

一、基础语法:

1. 定义包名:

包名应该在源文件的最开头,包名不必和文件夹路径一致:源文件可以放在任意位置。

package my.demo

2. 定义函数:

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

表达式函数体自动推断型的返回值:

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

要想函数在模块外面可见就必须有一个确定的返回值:

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

Unit相当于Java中的void,可省略

3. 定义变量:

  • var a: Int = 1,普通变量
  • val a: Int = 1,只读变量,相当于Java中的final
  • var a = 1,可推导出Int类型

4. 字符串模板

fun main(args: Array<String>) {
    if (args.size() == 0) return
    print("First argument: ${args[0]}")
}

换行:\n

三个引号包(""")裹的,不包含分割符并且可以包含其它字符:

val text = """
    for (c in "foo")
        print(c)
"""

5. if语句

除了类似Java的用法,还可以当作表达式:

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

可直接返回if结果:

fun foo(param: Int){
    val result = if (param == 1) {
        "one"
    } else if (param == 2) {
        "two"
    } else {
        "three"
    }
}

6. 可空变量以及空值检查

声明可空变量:var a:Int? = null
函数返回可空:

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

调用时自动检查null:

val files = File("Test").listFiles()
println(files?.size)

调用时自动检查null(可设置如果为null时的默认值):

val files = File("test").listFiles()
println(files?.size ?: "empty")

如果为空执行某操作:

val data = ...
val email = data["email"] ?: throw
IllegalStateException("Email is missing!")

如果不为空执行某操作:

val date = ...
data?.let{
    ...//如果不为空执行该语句块
}

7. 使用值检查

is:相当于Java中的instanceof, 是否是某个类型的实例。如果对一个不可变的局部变量属性检查是否是某种特定类型,就没有必要明确转换

8. 循环

for (arg in args){
    print(arg)
}

While等循环与Java一样

9. When表达式

相当于Java中的switch case,但是更强大。

fun cases(obj: Any) {
    when (obj) {
    1    -> print("one")
    "hello"    -> print("Greeting")
    is Long    -> print("Long")
    ! is Long    -> print("Not a string")
    else    -> print("Ubknow")
    }
}

可直接返回when的判断结果:

fun transform(color: String): Int {
    return when(color) {
        "Red" -> 0
        "Green" -> 1
        "Blue" -> 2
        else -> throw IllegalArgumentException("Invalid color param value")
    }
}

10. ranges & in

检查 in 操作符检查数值是否在某个范围内(同样适用于集合):

if (x in 1..100){
    print("${x} in 1~100")
}
if (x !in 1..100){
    print("${x} not in 1~100")
}

使用 in 操作符检查集合中是否包含某个对象:

if (text in names) //将会调用nemes.contains(text)方法
    print("Yes)

遍历 map:

for ((k, v) in map) {
    print("$k -> $v")
}

11. 函数默认值

fun foo(a: Int = 0, b: String = "") {...}

12. 过滤 list

val positives = list.filter { x -> x >0 }

或者更短:

val positives = list.filter { it > 0 }

13. 只读 list/map

val list = listOf("a", "b", "c")

或者:

val map = maoOf("a" to 1, "b" to 2, "c" to 3)

获取map中的值:

println(map["key"])
map["key"] = value

14. 扩展函数(给现有类增添新函数)

fun String.spcaceToCamelCase() { ... }
"Convert this to camelcase".spcaceToCamelCase()

15. 创建单例模式

object Resource {
    val name = "Name"
}

16. try-catch

    try {
        count()
    }catch (e: ArithmeticException) {
        throw IllegaStateException(e)
    }

可直接返回try-catch结果:

fun test() {
    val result = try {
        count()
    }catch (e: ArithmeticException) {
        throw IllegaStateException(e)
    }
    //处理 result
}

17. 返回与跳转

return break 结束最近的闭合循环 continue 跳到最近的闭合循环的下一次循环。

使用标签快速跳转:

loop@ for(i in 1..5){
        println("-i: $i")
        for(j in 11..17){
            if(14 == j){
                break@loop
            }
            println("-> j: $j")
        }
    }

输出:

-i: 1
-> j: 11
-> j: 12
-> j: 13

break 是跳转标签后面的表达式,continue 是跳转到循环的下一次迭代。
return 允许我们返回到外层函数。最重要的例子就是从字面函数中返回。

参考:

  1. http://kotlinlang.org/docs/reference/basic-syntax.html
  2. http://huanglizhuo.gitbooks.io/kotlin-in-chinese
时间: 2024-10-13 20:14:06

Kotlin语法(基础)的相关文章

Kotlin语法基础之运算符

运算符 计算机程序中最小的程序单位成为表达式,每个表达式都可以由两部分组成,即操作数和运算符.操作数可以是变量.常量.类.数组.方法等,甚至是其他表达式.而运算符则用于支出表达式中单个或者多个操作数参与运算的规则,表达式通过运算之后产生的值依赖于表达式中包含的运算符的优先级和结核性.Kotlin语言包含了Java语言中的所有运算符的特性,并结合C语言的优点,增加自定义运算符的逻辑.这些运算符之中,主要包括有:算数运算符.区间运算符.逻辑运算符.关系运算符.赋值运算符.自增自减运算符等. 根据操作

利用SurfaceView实现下雨与下雪动画效果详解(Kotlin语法)

前言 最近打算做一波东西巩固一下自己近期所学所得.话不多说,先看一下最终完成的效果图: 下雨.gif 这里比较懒--第二个图片中还是降雨--不过这不是关键点-- 下雪.gif 录制的mp4,转成了gif.第一个gif设置了帧率,所以看起来可能掉帧比较严重,但是实际上并不会,因为这里我也注意了1s要绘制60帧的问题.阅读本文需要一些基本的View知识和会一些基础Kotlin语法.说实话,就知识点来说,跟Kotlin是没多大关系的,只要懂基本的语法就可以了. 理清思路 在动手前先要理一下思路,从以下

Java语法基础之for语句练习

以下是对Java语法基础中的for语句进行了详细介绍,需要的朋友可以过来参考下   控制语句--for练习语句的嵌套应用 累加求和,计数器 循环嵌套一.语句的嵌套应用语句嵌套形式.其实就是语句中还有语句.形式多种多样,没有固定的格式和套路.1.打印偶数for(int x=1;x<=10;x++) {  if(x%2==1) continue;  System.out.prinln("x="+x); }二.累加求和,计数器1.获取1~10的和,并打印.思路://1,定义变量用于存储

《C#本质论(第4版)》一1.2 C#语法基础

1.2 C#语法基础 C#本质论(第4版) 成功编译并运行HelloWorld程序之后,我们来分析代码,了解它的各个组成部分.首先熟悉一下C#关键字以及开发者选用的标识符. 初学者主题:关键字 为了帮助编译器解释代码,C#中的某些单词具有特殊地位和含义,我们将其称为关键字.关键字提供了具体的语法,编译器根据这些语法来解释程序员书写的表达式.在HelloWorld程序中,class.static和void均是关键字. 编译器利用关键字来识别代码的结构与组织方式.因为编译器对这些单词有着严格的解释,

javascript 语法基础 想学习js的朋友可以看看_基础知识

1:javascript区分大小写 2:javascript每一条语句必须以";"结束,与C语言一样 3:输出:document.write("字符串")--->还可以输出对应的html标记 4:改变窗体的颜色document.bgColor="red"; 4:类型转换:parseInt,parseFloat 5:随机函数:parseInt(Math.random()*90+10) 产生10--100的随机数 5:弹出对话框:alert(&

前端必学之PHP语法基础_php实例

写在前面的话 PHP是一种创建动态交互性站点的强有力的服务器端脚本语言.PHP能够包含文本.HTML.CSS以及PHP代码,在服务器上执行,结果以纯文本返回浏览器 代码标识 PHP代码以<?php 开头,以?>结尾,且可以放置在文档中的任何位置 <?php // ?> PHP语句以分号(;)结尾,PHP代码块的关闭标签也会自动表明分号 <?php echo "Hello World!"; ?> 注释 PHP支持三种注释,包括两种单行注释和一种多行注释

第03篇:C#星夜拾遗之语法基础

了解C#的基本语法,这是学习一门语言的必经之路.这些基本语法包括:数据类型.运算符和表达式.流程控制.字符串.类和对象.结构和枚举.命名空间等.本文主要列举出来笔者觉得算得上基础知识的内容.对于本文中的一些内容的详细讲解,可以参照anytao的博文系列:你必须知道的.NET     特别说明:本文多为网上摘抄或者之前的笔记,存在一定的不连贯,读者可以根据自己的实际情况,在百度或者Bing中查找更好的文章.   数据类型     值类型和引用类型的区别:值类型存放在栈(heap)中,引用类型存放在

Kibana——筛选语法基础

ES全文搜索的简易语法是Kibana上使用的搜索语法,一定需要学会,前一篇文章给出的只是基础的.最根本的CRUD操作,是对单挑数据的操作,但是在Kibana中存在大量的搜索和聚合,动辄上千万的数据量,所以掌握好ES全文搜索的语法就是使用Kibana的重要保证. 简易语法详细解析: 1.全文检索:直接写搜索的单词 如:搜索'id',搜索字符A; 2.单字段的全文检索:在搜索单词之前加上字段名和冒号,比如如果知道单词 Riven(用户名) 肯定出现在 user字段,可以写作 user:Riven:

WAP建站WML语言语法基础教程第1/6页_WML教程

完成WAP服务器的建立和WAP浏览器的安装之后,我们接下来就可以使用WML语言来编写WAP网页或应用,并通过WAP服务器及浏览器进行调试.从本章开始我们将系统地学习WML语言,本章主要讲解WML语言的基础知识,下一章全面讲解WML的语法.标签和规则. 2.1 WML的简单例子及编辑.测试方法 无限标记语言WML(Wireless Markup Language)是一种基于扩展标记语言XML(Extension Markup Language)的语言,是XML的子集.它可以显示各种文字.图像等数据