Kotlin简明学习教程一起来学习Kotlin编程语言

已收录   阅读次数: 667
2021-06-0212:39:28 发表评论
摘要

伯衡君学习完Golang这门编程语言后,开始将掌握Kotlin这门编程语言方法提上日程了,带着之前的经验学习还挺快,从2019年开始不少开发者编写安卓应用逐渐抛弃Java,开始拥抱Kotlin,正是看出了它前途不可限量,伯衡君准备一边学习,一边在本篇文章来完整的将一些主要知识,以及学习中的笔记记录在此……

分享至:
Kotlin简明学习教程一起来学习Kotlin编程语言

开篇寄语

伯衡君学习完Golang这门编程语言后,开始将掌握Kotlin这门编程语言方法提上日程了,带着之前的经验学习还挺快,从2019年开始不少开发者编写安卓应用逐渐抛弃Java,开始拥抱Kotlin,正是看出了它前途不可限量,伯衡君准备一边学习,一边在本篇文章来完整的将一些主要知识,以及学习中的笔记记录在此。

前情提要

内容详情

Kotlin 是一种现代编程语言,简洁、安全、实用,并且专注于与 Java 代码的互操作性。它几乎可以在当今使用 Java 的任何地方使用:用于服务器端开发、Android 应用程序等等。

基础概念
  • Hello World
fun main() {
    println("Hello, World!")
} 

以上就是一个最简单的kotlin函数,println()这个函数类似于python的print(),javascript的console.log()等等。

  • 数据类型
    • Kotlin中每个值都有它的数据类型,以下是最常用几种:
      • Int:整数类型(如:1,2,3)
      • Double / Float:浮点数类型(如:1.21,9.99)
      • Char:字母(如:'a')
      • Boolean:逻辑值true或者false
      • String:字符串
  • format
    • 类似于python的format,或者是javascript的`${}`

举例如下:

val a = "World"
val helloWorld = "Hello $a" 
  • 变量
    • 变量用于存储数据

每个变量都有一个类型,用于定义它所保存的数据的类型。使用 var 关键字声明变量:

var num: Int = 42

除了使用 var 关键字声明变量,还可以使用 val 关键词来声明:

val num: Int = 42

那么,既然都可以,二者的区别是什么呢?val赋值的变量不可改变值。

赋值方法还可以不必添加数据类型,Kotlin会自动推断出它的数据类型:

val name = "Zhang"
var num = 12345
  • 数学运算
    • 包括"+",“-”,“*”,“/”,“%”,“++”,“--”,“+=”,“-=”等等,类似于Javascript
  • 逻辑运算
    • 包括“>”,“<”,“>=”,“<=”,“==”,“!=”等等,类似于Javascript
  • 注释
    • 单行注释:以“//”为开头
    • 多行注释:以“/* */”为区间中填写
//单行注释
/*
多
行
注
释
*/
  • 用户输入
    • 可以使用 readLine() 函数将值作为用户的输入,举例如下:
fun main() {
    var age = readLine()
    println("You entered " + age)    
} 
  • 数据转换
    • 字符串整数转整数:“12345”.toInt()
    • 字符串浮点数转浮点数:"1.234".toFloat()或者“1.234”.toDouble()
    • 其他数据类型转字符串:1.24331121.toString()
控制流程
  • if/else
    • if 语句允许代码在满足条件时运行,也与Javascript的控制流程类似。
fun main() {
	val num = -7

    if (num > 0) {
        println("Positive")
    }
    else if (num < 0) {
        println("Negative")
    }
    else {
        println("Zero")
    }
}
  • ternary operator
    • 大多数编程语言是这样这样表示 a ? b : c
    • 而在Kotlin则是if(a) b else c,举例如下:
fun main(args: Array<String>) {
    val num = -7
    val result = if (num > 0) "Positive" else "Negative"
    println(result)
}
  • when
    • if/else的另一种写法,显得更加方便
fun main() {
    val num = -7
    val result = when {
        num > 0 -> "Positive"
        num < 0 && num > -10 -> "Negative and Greatter Than -10"
        num <= -10 -> "Smaller and Equal Than -10"
        else -> "Zero"
    }
    println(result)
}
  • while
    • 只要给定的条件为真,while 循环就用于重复一段代码。
fun main() {
    var i = 1
    while (i <= 5) {
        println("Hello")
        i++
    } 
}
  • break和continue
    • break:中断,程序终端
    • continue:跳过,程序继续

以上都和javascript很类似。

数组
  • 基本样式
    • Kotlin的Array数组样式与php很像,它的表示如下例所示:
    • 每一项的位置也是从零开始
var contacts = arrayOf("I", "Love", "You") 
println(contacts[0]) //输出为“I”
  • mapOf
    • 类似于javascript中的Object,或者是ruby的hash,或者是python的dictinary
val map = mapOf(1 to "www", 2 to "luckydesigner" , 3 to "space")
println(map) //输出结果为{1=www, 2=luckydesigner, 3=space}
  • for循环
    • 有点类似于python的for循环,试举例如下:
//循环数组
fun main() {
    var nums = arrayOf(2, 4, 6)
    for (x in nums) {
        println(x)
    }
}

//循环字符串

fun main() {
    val name = "zhangboheng"
    for (x in name) {
        println(x)
    }
}
  • range
    • Kotlin 允许您使用以下简单语法轻松创建值范围,在这一点上和ruby和swift这两门编程语言很类似
    • 数字范围,字母范围等等,试举一例
fun main() {
    for (i in 2..5) {
        println(i)
    }
}
//可以生成2,3,4,5

fun main() {
    for (x in 'a'..'c') {
        println(x)
    }
}
//可以生成"a","b","c"

fun main() {
    for (i in 2 until 5) {
        println(i)
    }
}
//可以生成2,3,4

fun main() {
    for (x in 'a' until 'c') {
        println(x)
    }
}
//可以生成"a","b"
函数
  • 函数是一组用于执行任务的相关代码,之前介绍的println()函数就是属于这种
  • 构造函数,首先是有一个fun这个关键词,接着是函数名称,如main(),在括号中,可以添加arguments
fun welcome(name: String) {
  println("Hello, " + name)
} 
  • 调用函数
    • 构建一个函数后进行调用,试举一列
fun divide(x: Int, y: Int): Int {
    return (x-y)
}
fun main() {
    var result = divide(4, 1)
    println(result)
}
//结果为3

另一种更为简洁的写法,可以是这样:

fun main() {
    val f = { a:Int, b:Int -> a - b } 
    var result = f(4, 1)
    println(result)
}

//结果为3
  • foreach
    • Kotlin 提供了一个 forEach 循环,它接受一个函数,定义对每个数组元素执行的操作,类似于php的foreach
fun main() {
    var arr = arrayOf(1, 3, 5)
    arr.forEach {
        item -> println(item * 4)
    }
} 

//另外一种更简洁的方法

fun main() {
    var arr = arrayOf(1, 3, 5)
    arr.forEach {
        println(it * 4)
    }
} 
  • 高阶函数
    • 一个函数可以接受另一个函数作为参数,这些函数称为高阶函数。
fun apply(x:Int, action: (Int) -> Int): Int {
    return action(x)
}

fun main() {
    println(apply(4, {x -> x*2}))
    println(apply(4, {x -> x/2}))
}
  • filter
    • 类似于Javascript语言中的filter,可以进行数组的筛选,试举一例
fun main(args: Array<String>) {
    val arr = arrayOf(42, 3, 10, 4, 6, 1)  
    val res = arr.filter({ it % 2 == 0 })
    println(res)
} 
面向对象
  • Classes
    • 一个类就像一个蓝图——它定义了我们将要建造的房子的细节
class User {
    var name = ""
    var age = 0
}
fun main(args: Array<String>) {
    val u1 = User()
    u1.name = "Zhang"
    u1.age = 29
    println(u1.name)
}
  • Constructors
    • 构造函数允许您在创建对象时初始化属性,构造函数使用类名后的括号定义,并包含我们想要的属性:
class User {
  var name = ""
  var age = 0
  constructor(nm: String) {
    name = nm
  }
  constructor(nm: String, v: Int) {
    name = nm
    age = v + 2
  }
}
fun main() {
    val u1 = User("James", 42)
    val u2 = User("Amy", 20)
    println(u1.name)
    println(u2.age)
}
  • Getters & Setters
    • 如字面意思,set()可以在类中设值,get()可以在类中返回值
class User {
  var name = ""

  var age = 0
  get() = field-1

  set(value) {
    if(value < 0) {
      field = 18
    }
    else {
      field = value
    }
  }
} 
fun main() {
  val u = User()
  u.age = -4
  println(u.age)
}
  • method
    • 一个类可以有定义行为的函数,比如下面的例子就是让用户输入字符,然后会返回“Login from user xxx”这样的结果
class User(var name: String, var age: Int) {
  fun login() {
    println("Login from user " + name)
  }
}
fun main() {
  var input = readLine()!!
  var u = User(input, 42)
  u.login()
} 
  • 类的继承
    • 继承是 OOP 中的一个重要概念,它允许您基于其他类创建类,继承它们的功能,试举一例
open class User(var name: String, var age: Int) {
}
class Admin(name: String, age: Int): User(name, age) {
}
class Moderator(name: String, age: Int, var country: String): User(name, age) {
}
fun main(args: Array<String>) {
    val b = Moderator("Amy", 23, "USA")
    println(b.country)
}

温馨提示:继承的话千万别忘记open开头哦

  • 可见性修改器
    • Kotlin 提供了可见性修饰符来限制对属性和方法的访问
  • public:无限制访问
  • protected:仅对子类可访问
  • private:从外部无法访问

我们来看一下区别

//private

class User(var name: String, private var age: Int) {
}

fun main() {
    val u1 = User("Zhang", 29)
    println(u1.age)
}
//生成结果是:Cannot access 'age': it is private in 'User'

//public

class User(var name: String, public var age: Int) {
}

fun main() {
    val u1 = User("Zhang", 29)
    println(u1.age)
}

//生成结果是29

//private

class User(var name: String, protected var age: Int) {
}

fun main() {
    val u1 = User("Zhang", 29)
    println(u1.age)
}
//生成结果是:Cannot access 'age': it is private in 'User'
  • Abstract Classes
    • 抽象类,留意override
abstract class User(var name: String, var age: Int) {
    abstract fun display()
}

class Admin(name: String, age: Int): User(name, age) {
    override fun display() {
        println(name + " is " + age + " years old")
    }
}

class Moderator(name: String, age: Int, var country: String): User(name, age) {
    override fun display() {
        println(name + " is from " + country)
    }
}

fun main() {
    val a = Moderator("James", 42, "USA")
    a.display()
    
    val b = Admin("Amy", 19)
    b.display()
}
  • 我的微信
  • 微信扫一扫加好友
  • weinxin
  • 我的微信公众号
  • 扫描关注公众号
  • weinxin

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: