fun main(args: Array<String>) {
println("Hello, World!")
}

基本语法

  • 声明常量用val,声明变量用var,声明函数用fun。
    类型修饰采用后置语法,省略时由编译器根据上下文自行推导:
    声明常量和变量时用冒号指示类型,自带初值时类型修饰可省略。
    声明函数时用冒号指示返回类型。
    若函数体采用代码块形式,则没有返回值时返回类型可省略,有返回值时返回类型不能省略。
    若函数体采用表达式形式,则无论有没有返回值返回类型均可省略。

      常量 变量 函数(有返回值) 函数(无返回值)
    Kotlin val i = 10
    val i: Int = 10
    var i = 10
    var i: Int = 10
    fun f(n: Int): Int {return n + 1}
    fun f(n: Int): Int = n + 1
    fun f(n: Int) = n + 1
    fun f(n: Int): Unit {println(n)}
    fun f(n: Int) {println(n)}
    fun f(n: Int): Unit = println(n)
    fun f(n: Int) = println(n)
    Swift let i = 10
    let i: Int = 10
    var i = 10
    var i: Int = 10
    func f(n: Int) -> Int {return n + 1} func f(n: Int) -> () {print(n)}
    func f(n: Int) -> Void {print(n)}
    func f(n: Int) {print(n)}
  • 字符串模板(string template)/ 字符串插值(string interpolation)的语法形式为 $变量 以及 ${表达式}。
    字符串中如果需要表示 $ 字符,可使用 ${'$'} 这种转义形式。
    多行字符串使用三引号"""。
      字符串模板/字符串插值 多行字符串
    Kotlin val x = 10; val y = 20
    val s = "x=$x, y=${y + 1}"
    val price = """
    ${'$'}9.99
    """
    Swift let x = 10, y = 20
    let s = "x=\(x), y=\(y + 1)"
    var price = """
    $9.99
    """
    C# int x = 10, y = 20;
    var s = $"x={x}, y={y + 1}";
    var price = @"
    $9.99
    "
    字符串的值 x=10, y=21 <空行>
    $9.99
    <空行>
  • 区间
    Kotlin Swift 输出
    for (i in 1..4) print(i) for i in 1...4 {print(i, terminator: "")} 1234
    for (i in 4..1) print(i) // for i in 4...1 {print(i, terminator: "")} // error 空字符串
    for (i in (1..4).reversed()) print(i) for i in (1...4).reversed() {print(i, terminator: "")} 4321
    for (i in 4 downTo 1) print(i) for i in stride(from: 4, through: 1, by: -1) {print(i, terminator: "")}
    for i in stride(from: 4, to: 0, by: -1) {print(i, terminator: "")}
    4321
    for (i in 1..4 step 2) print(i) for i in stride(from: 1, through: 4, by: 2) {print(i, terminator: "")}
    for i in stride(from: 1, to: 4, by: 2) {print(i, terminator: "")}
    13
    for (i in 4 downTo 1 step 2) print(i) for i in stride(from: 4, through: 1, by: -2) {print(i, terminator: "")}
    for i in stride(from: 4, to: 1, by: -2) {print(i, terminator: "")}
    42
    for (i in 1 until 10) print(i) for i in 1..<10 {print(i, terminator: "")} 123456789
    val x = 3
    if (x in 1..10) println(x)
    if (x !in 1..10) println(x)
    let x = 3
    if case 1...10 = x {print(x)}
    if 1...10 ~= x {print(x)}
    if (1...10).contains(x) {print(x)}
    if !(1...10).contains(x) {print(x)}
    3
  • 相等
      结构相等/值相等 引用相等
    Kotlin a == b
    a != b
    a === b
    a !== b
    Swift a == b
    a != b
    a === b
    a !== b

控制流

Kotlin语言中的控制流语句有:

  • if...else...语句(表达式):用于处理双分支

    val a = 3; val b = 4
    val m1: Int
    if (a < b) m1 = a else m1 = b
    val m2 = if (a < b) a else b
    val m3 = if (a < b) {println("a"); a} else {println("b"); b}
  • 不带参数的when表达式:用于处理多分支
    fun Int.isOdd() = this % 2 == 1
    fun Int.isEven() = this % 2 == 0
    val x = 3
    when {
    x.isOdd() -> print("x is odd")
    x.isEven() -> print("x is even")
    else -> print("x is funny")
    }
  • 带参数的when表达式:用于处理值匹配
    单个值,多个值,表达式,在与不在某个区间,是与不是某个类型,以上所有情况之外
    fun describe(obj: Any): String =
    when (obj) {
    1 -> "One"
    2, 3 -> "Two or Three"
    in 4..6 -> "Four to Six"
    "Hello" -> "Greeting"
    is Long -> "Long"
    !is String -> "Not a string"
    else -> "Unknown"
    }
    println(describe(1)); // One
    println(describe(2)); // Two or Three
    println(describe(4)); // Four to Six
    println(describe(7)); // Not a string
    println(describe(9L)); // Long
    println(describe(10.0)); // Not a string
    println(describe("abc")); // Unknown
  • for...in...语句,while语句,do...while语句:用于处理循环

函数

  • 函数体有代码块以及表达式两种形式。使用表达式形式时可省略返回类型。
  • 没有返回值的函数可以被视为返回类型为 Unit 的函数。
  • 函数可以嵌套。局部函数可使用外部函数的变量。
    fun outside() {
    var a = 1
    fun inside() {
    a++;
    }
    inside(); // a==2
    }
  • 函数可以带缺省参数。
  • 调用函数时可以使用参数名。
    fun add(a: Int = 1, b: Int = 2) = a + b
    println(add()); // 3
    println(add(3)); // 5
    println(add(b = 3)); // 4
  • 变长参数:只能有一个,使用 vararg 修饰符,在函数内部被视为数组。
      变长参数
    Kotlin fun avg(vararg numbers: Double): Double {}
    Swift func avg(numbers: Double...) -> Double {}
    C# double Avg(params double[] numbers) {}
    Java double avg(double... numbers) {}
  • 函数是一等公民。可以作为函数的参数,也可以成为函数的返回值。
      函数的类型(有返回值) 函数的类型(没有返回值)
    Kotlin (Int, Int) -> Boolean (Int, Int) -> Unit
    Swift (Int, Int) -> Bool (Int, Int) -> Void
    C# Func<int, int, bool> Action<int, int>
  • 类的方法被称为成员函数。
  • 可以使用扩展函数来为既有的类添加功能。
  • 中缀形式:仅有一个参数的成员函数以及扩展函数在使用 infix 修饰符修饰的情况下,调用方可使用中缀形式。

Kotlin语言学习笔记(1)的更多相关文章

  1. Kotlin语言学习笔记(2)

    类(classes) // 类声明 class Invoice { } // 空的类 class Empty // 主体构造器(primary constructor) class Person co ...

  2. Kotlin语言学习笔记(6)

    运算符重载(Operator overloading) 一元运算符 Expression Translated to +a a.unaryPlus() -a a.unaryMinus() !a a.n ...

  3. Kotlin语言学习笔记(5)

    委托模式(Delegation) 类的委托 interface Base { fun print() } class BaseImpl(val x: Int) : Base { override fu ...

  4. Kotlin语言学习笔记(3)

    数据类(Data Classes) data class User(val name: String, val age: Int) 编译器自动生成的有: equals()/hashCode() toS ...

  5. Kotlin语言学习笔记(7)

    反射 // 反射 val c = MyClass::class val c2 = MyClass::class.java // 获取KClass的引用 val widget: Widget = ... ...

  6. Kotlin语言学习笔记(4)

    函数 // 函数定义及调用 fun double(x: Int): Int { return 2*x } val result = double(2) // 调用方法 Sample().foo() / ...

  7. HTML语言学习笔记(会更新)

    # HTML语言学习笔记(会更新) 一个html文件是由一系列的元素和标签组成的. 标签: 1.<html></html> 表示该文件为超文本标记语言(HTML)编写的.成对出 ...

  8. 2017-04-21周C语言学习笔记

    C语言学习笔记:... --------------------------------- C语言学习笔记:学习程度的高低取决于.自学能力的高低.有的时候生活就是这样的.聪明的人有时候需要.用笨的方法 ...

  9. 2017-05-4-C语言学习笔记

    C语言学习笔记... ------------------------------------ Hello C语言:什么是程序:程序是指:完成某件事的既定方式和过程.计算机中的程序是指:为了让计算机执 ...

随机推荐

  1. 两种解决方法 PHP Warning: File upload error - unable to create a temporary file in Unknown

    原因:上传文件时,没有管理员权限的你不能读取临时文件夹; 解决方法(两种)找到临时文件夹并给当前访问用户所有权限; 方法一: 找到Apache默认的临时文件,步骤如下: 1.找到临时文件夹,一般在C: ...

  2. Centos7下安装Python3.7.2

    在我的Centos7中,Python默认是安装的,输入python 直接可以查看版本号,入下图 注意:如果本机安装了python2,尽量不要管它,使用python3运行python脚本就好,因为可能有 ...

  3. Spring之Ioc原理

    ioc 控制反转 使用的 单例模式 和 工厂模式 单例模式保证创建对象的唯一性 工厂模式实现解耦合的作用 通过dm4j类似的技术读取xml文件中bean标签的属性值,id和class 利用反射技术和c ...

  4. 将本地代码提交至gitHub

    1.注册github账号 2.本地安装git 3.打开需要提交代码的目录 4.右击git bash here 5. $ git init 6  $ ssh-keygen -t rsa -C " ...

  5. Elasticsearch增删改查

    面向文档 document数据格式 应用系统的数据结构都是面向对象的,复杂的 对象数据存储到数据库中,只能拆解开来,变为扁平的多张表,每次查询的时候还得还原回对象格式,相当麻烦 ES是面向文档的,文档 ...

  6. 小朋友学C语言(3):整数、浮点数、字符

    C语言的数据类型有整型.浮点型(就是小数).字符.字符串.数组.结构体等.刚开始学的时候,不要一下子学太多.先学最基本的整型.浮点型和字符. 对于学习程序来说,最重要的是动手操作. 先编写程序: #i ...

  7. oracle SQL语句取本周本月本年的数据

    --国内从周一到周日 国外是周日到周六 select to_char(sysdate-1,'D') from dual;--取国内的星期几 去掉减一取国外的星期 --取本周时间内的数据 ,)+) an ...

  8. 用Excel建模进行决策树分析

    决策树(Decision Tree)在机器学习中也是比较常见的一种算法,最早的决策树算法是ID3,改善后得到了C4.5算法,进一步改进后形成了我们现在使用的C5.0算法,综合性能大幅提高. 算法核心: ...

  9. 实战ELK(1) 安装ElasticSearch

    第一步:环境 linux 系统 Java 1.8.0  elasticsearch-6.5.1 第二步:下载 2.1 JDK:https://mirrors.aliyun.com/centos/7.5 ...

  10. 重识linux-ntp时间服务器搭建

    1  安装 yum install ntp 2 启动 service ntpd start 3 配置文件 /etc/ntp.conf 4 查看是否有报错 tail /var/log/message 5 ...