kotlin的基本使用

目录

kotlin用于android开发

kotlin的基本语法:

for循环

when表达式

代码规范

目录结构

源文件名称

源文件组织

类布局

接口实现布局

重载布局


kotlin用于android开发

使用kotlin进行android开发:

  1. 代码更少,可读性强,花费更少的时间来编写代码与理解其他人编写的代码
  2. kotlin不仅仅是语言,也是一个强大的工具.并且他还在一直发展.目前kotlin已经完美的集成到android studio中,并且许多公司也积极的使用kotlin进行android应用开发
  3. 与java的互操作性,kotlin可以在程序中将kotlin与java变成语言一起使用,而且不需要将所有代码迁移到kotlin
  4. 支持多平台开发,不仅可以使用kotlin开发android.还可以开发iOS,后端与Web应用程序,享受在平台之间共享公共代码的好处
  5. 代码安全,更少的代码与更好的可读性导致更少的错误.kotlin编译器检测这些剩余的错误.从而使代码安全.
  6. 易学易用,kotlin非常易于学习.尤其是对java开发人员而言
  7. kotlin得到了社区的大力支持与许多贡献,该社区在全世界范围内都早增长,根据google的说法,play商店前1000个应用中60%以上都使用kotlin

 

kotlin的基本语法:

包的声明在源文件的最顶部

package my.demo
import kotlin.text.*
//

kotlin应用程序的入口是main函数

fun main(){
    println("kotlin")
}

带有两个int参数\返回int函数

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

fun main() {
    print("sum of 3 and 5 is ")
    println(sum(3, 5))
}

将表达式作为函数体,返回值类型自动推断的函数

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

fun main() {
    println("sum of 19 and 23 is ${sum(19, 23)}")
}

函数返回无意义的值

fun printSum(a: Int, b: Int): Unit {
    println("sum of $a and $b is ${a + b}")
}

fun main() {
    printSum(-1, 8)
}

定义只读局部变量使用关键字val定义,只能为其赋值一次

val a: Int = 1  // 立即赋值
val b = 2   // 自动推断出 `Int` 类型
val c: Int  // 如果没有初始值类型不能省略
c = 3       // 明确赋值

可重新赋值的变量使用var关键字

var x = 5 // 自动推断出 `Int` 类型
x += 1

注释与大多数现代语言一样,kotlin支持单行与多行(快)注释

// 这是一个行注释

/* 这是一个多行的
   块注释。 */

并且kotlin中的注释可以嵌套

/* 注释从这里开始
/* 包含嵌套的注释 */     
并且在这里结束。 */

字符串

var a = 1
// 模板中的简单名称:
val s1 = "a is $a" 

a = 2
// 模板中的任意表达式:
val s2 = "${s1.replace("is", "was")}, but now is $a"

条件表达式

fun maxOf(a: Int, b: Int): Int {
    if (a > b) {
        return a
    } else {
        return b
    }
}

并且在kotlin中if也是可以用作表达式的:

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

当某一个变量的值可以是null的时候,必须在声明出的类型后添加?来标识该应用可以为空

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

使用返回空值的函数

fun printProduct(arg1: String, arg2: String) {
    val x = parseInt(arg1)
    val y = parseInt(arg2)

    // 直接使用 `x * y` 会导致编译错误,因为它们可能为 null
    if (x != null && y != null) {
        // 在空检测后,x 与 y 会自动转换为非空值(non-nullable)
        println(x * y)
    }
    else {
        println("'$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 与 y 会自动转换为非空值
println(x * y)

类型检测与自动类型转换

is运算符检测一个表达式是否是某一个类型的实例,如果一个不可变的局部变量或者属性已经判断出为某类型,那么检测后的分支中可以直接当做该类型使用,不需要显示转换

fun getStringLength(obj: Any): Int? {
    if (obj is String) {
        // `obj` 在该条件分支内自动转换成 `String`
        return obj.length
    }

    // 在离开类型检测分支后,`obj` 仍然是 `Any` 类型
    return null
}

for循环

val items = listOf("apple", "banana", "kiwifruit")
for (item in items) {
    println(item)
}

或者也可以这样写

val items = listOf("apple", "banana", "kiwifruit")
for (index in items.indices) {
    println("item at $index is ${items[index]}")
}

when表达式

val items = listOf("apple", "banana", "kiwifruit")
var index = 0
while (index < items.size) {
    println("item at $index is ${items[index]}")
    index++
}

代码规范

不管是哪一种语言都少不了代码规范

目录结构

在纯 Kotlin 项目中,推荐的目录结构遵循省略了公共根包的包结构。例如,如果项目中的所有代码都位于 org.example.kotlin 包及其子包中,那么 org.example.kotlin 包的文件应该直接放在源代码根目录下,而 org.example.kotlin.network.socket 中的文件应该放在源代码根目录下的 network/socket 子目录中。

 

源文件名称

如果 Kotlin 文件包含单个类(以及可能相关的顶层声明),那么文件名应该与该类的名称相同,并追加 .kt 扩展名。如果文件包含多个类或只包含顶层声明, 那么选择一个描述该文件所包含内容的名称,并以此命名该文件。 使用首字母大写的驼峰风格(也称为 Pascal 风格), 例如 ProcessDeclarations.kt

 

源文件组织

鼓励多个声明(类、顶级函数或者属性)放在同一个 Kotlin 源文件中, 只要这些声明在语义上彼此紧密关联并且文件保持合理大小 (不超过几百行)。

特别是在为类定义与类的所有客户都相关的扩展函数时, 请将它们放在与类自身定义相同的地方。而在定义仅对指定客户有意义的扩展函数时,请将它们放在紧挨该客户代码之后。不要只是为了保存 “Foo 的所有扩展函数”而创建文件。

 

类布局

通常,一个类的内容按以下顺序排列:

  • 属性声明与初始化块
  • 次构造函数
  • 方法声明
  • 伴生对象

不要按字母顺序或者可见性对方法声明排序,也不要将常规方法与扩展方法分开。而是要把相关的东西放在一起,这样从上到下阅读类的人就能够跟进所发生事情的逻辑。选择一个顺序(高级别优先,或者相反)并坚持下去。

将嵌套类放在紧挨使用这些类的代码之后。如果打算在外部使用嵌套类,而且类中并没有引用这些类,那么把它们放到末尾,在伴生对象之后。

 

接口实现布局

在实现一个接口时,实现成员的顺序应该与该接口的成员顺序相同(如果需要, 还要插入用于实现的额外的私有方法)

重载布局

在类中总是将重载放在一起。

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值