Kotlin基础语法

Evans · · 257 次点击 · · 开始浏览    

Kotlin基础

1. 函数

  • 1 . 示例
fun max(a: Int,b: Int): Int{
    return if (a>b) a else b
}
println(max(1,2))
/**
 * Main方法
 */
fun main(args: Array<String>){
    println("Hello World")
}
  • 2 . 语句与表达式:在Kotlin中if是表达式,不是语句,在Kotlin中除了循环(for/do/do...while)外,大多数控制结构都是表达式
  • 3 . 如果函数体写在花括号中,我们说这个函数有代码块体。如果它直接返回一个表达式,它就有表达式体。只有表达式体函数的返回类型可以省略。
  • 4 . 一个函数要么具有并不是代码块的表达式函数体,要么具有包含显示return语句的代码块函数体
IDEA中提供这两种函数风格之间转换的操作

2. 变量

  • 1 . 可变变量和不可变变量

    • val:不可变引用(final)
    • var:可变引用
    • 若变量没有初始化,则需要显示的指定他的类型
    • 不可变变量,只能进行唯一一次初始化
    • val 引用自身是不可变的,但是它指向的对象可能是可变的
    • var允许变量改变自己的值,但他的类型却是不可变的
val a =  "string"
val a: String = "string"

3. 字符串格式化

  • 1 . 示例
fun main (args: Array<String>){
    val name = if (args.size>0) args[0] else "kotlin"
    /**
     * 引用变量,若要打印$符号,则需要转义操作 \$
     */
    println("Hello $name")
    /**
     * 引用表达式
     */
     if(args.size>0){
        println("Hello ,${args[0]}")
     }
     /**
      * 双引号中使用双引号,需要保证内部的双引号在表达式体内
      */
      println("Hello , ${if (args.size>0) args[0] else "kotlin"}")
}
  • 2 . 编译后的代码,创建了一个StringBulider对象,并吧常量部分和变量附加上去

4. 类和属性

  • 1 . 类
class Person(val name: String)
kotlin 中public是默认的可见性,所以省略了
  • 2 . 属性

    • 声明为val的属性是只读的,并自动提供一个getter
    • 声明为var的属性是可变的,并自动提供一个getter和一个setter
    • 对于Java中定义的类,一样可以使用Kotlin语法进行属性访问
    class Person(
        val name: String
        var isMarried: Boolean
    )
    
    val person = new Person("Bob",true)
    println(person.name)
    
  • 3 . 自定义访问器

    • 此方式和声明一个没有参数的函数一样的效果
    • 在Java中访问该属性,直接调用isSquare()即可
    • 不需要使用带花括号的完成语法
    • 通常来说,若描述的是类的属性(特征),则应该声明为属性
    class Rectangle(val height: Int, val width: Int) {
        val isSquare: Boolean
            get() {
                return height == width
            }
            /**
             * 也可以为:
             * get() = height==width
             */
    }
    
    fun main(args: Array<String>) {
        val rectangle = Rectangle(41, 43)
        println(rectangle.isSquare)
    }
  • 4 . 枚举

    • Kotlin中,只有enum关键字在class前面时才表示枚举,其他情况下,仍可以当做普通名称使用
    • 枚举常量中的生命构造方法和属性的语法与之前一样,必须提供属性值
    • 若要在枚举类中定义任何方法,就要使用分号把枚举常量列表和方法定义分开
    /**
     * 普通枚举
     */
     enum class Color {
         RED, ORANGE, YELLOW, GREEN, BLUE, INDIGO, VIOLET
     }
    /**
     * 带属性值的枚举
     */
     enum class Color(val r: Int, val g: Int, val b: Int) {
         RED(255, 0, 0), 
         ORANGE(255, 165, 0),
         YELLOW(255, 255, 0), 
         GREEN(0, 255, 0), 
         BLUE(0, 0, 255),
         INDIGO(75, 0, 130), 
         VIOLET(238, 130, 238)
         ;
         /**
          * 此处声明了方法,则枚举最后必须要使用分号;
          */
         fun rgb() = (r * 256 + g) * 256 + b
     }
     
     fun main(args: Array<String>) {
         println(Color.BLUE.rgb())
     }
    
  • 5 . 接口与实现

    • 声明实现类时,使用一个冒号(:)后面跟上接口名称,来标记这个类实现了这个接口
    /**
     * 接口,标记接口,无任何方法
     */
    interface Expr
    
    /**
     * 实现类,使用:来标明实现哪个接口
     */
    class Num(val value: Int) : Expr
    /**
     * 实现类,使用:来标明实现哪个接口
     */
    class Sum(val left: Expr, val right: Expr) : Expr
  • 6 . 类型检查和类型转换

    • 使用is来判断一个变量是否是某种类型,在进行类型判断后,变量会自动转换成响应的类型,无需强制转换,这种方式的转换为智能转换,在使用智能转换时,属性值必须是val属性,而且不能有自定义的访问器
    • 使用as来显示转换,val n = e as Num

5. 目录和包

  • 与Java一样,在文件开头声明package,则该文件中定义的所有声明(类,函数,属性)都会属于这个包
  • 导入包使用import关键字,可以使用*在指定包下的所有类
  • 在Kotlin中,可以吧多个类放在同一个文件中,但应该使用Java的包使用规则
package geometry.shapes

import java.util.Random //使用java的工具包

class Rectangle(val height: Int, val width: Int) {
    val isSquare: Boolean
        get() = height == width
}

fun createRandomRectangle(): Rectangle {
    val random = Random()
    return Rectangle(random.nextInt(), random.nextInt())
}
package geometry.example

import geometry.shapes.createRandomRectangle //使用上面
					

本文来自:Segmentfault

感谢作者:Evans

查看原文:Kotlin基础语法

257 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet