修行路漫漫,初入编程之道,领悟基本语法,掌握基础概念,点滴之间,奠定坚实基础。
Kotlin入门
Kotlin是一种现代的编程语言,由JetBrains公司开发并于2011年首次发布。它的设计初衷是解决一些Java语言中的缺陷,同时与Java高度兼容,使得开发者可以轻松地在现有的Java项目中引入Kotlin代码。本系列面向于有一定基本功的少侠,由于我过去是JAVA流派,所以大多数描述的角度是与JAVA对比而叙述,即面向JAVA程序员所著。本文核心内容是我基于Kotlin官方英文文档的整理与理解,如有纰漏,还请海涵,望您指正!
开门见山,通过代码的方式直接向你输送Kotlin心法:
天地初开,主函数之始
每个编程世界都有一个起始点,如同天地初开。Kotlin的主函数便是万物的起点,定义程序的入口,开启整个代码世界的探索旅程。
可以看出,Kotlin的主函数比JAVA的psvm(public static void main的缩写)简明很多。
// 写法1
fun main() {
println("Hello world!")
}
// 写法2
fun main(args: Array<String>) {
println(args.contentToString())
}
言灵之术,输入与输出
在编程的修行中,输入与输出如同言灵之术,是与世界沟通的桥梁。通过输入,我们接受世界的讯息;通过输出,我们传达思想的回响。掌握言灵之术,方能与外界交流无碍,操控数据如同施展魔法。
println()为输出后换行,print()为输出后不换行;readln()作为字符串输入的整行
// 输出
println("输入些什么: ")
// 读取并存储用户的输入。例如:Hello
val yourWord = readln()
print("你输入的是: ")
print(yourWord)
// 你输入的是: Hello
术法之精妙,函数之方法
函数,如同术法,是代码之道的精妙之术。掌握函数的定义与调用,如同术士掌握法术,灵活运用之。
使用fun,如果是无返回值类型要把方法结尾的类型设为Unit,或者直接省略
// 有返回类型
fun sum(a: Int, b: Int): Int {
return a + b
}
// 无返回类型
fun sum(a: Int, b: Int): Unit{
print(a+b);
}
修炼之根基——变量
掌握变量与常量,如同修炼之根基,掌控能量之源。知晓var与val的奥义,灵活应对变化。
- 声明变量的方式
// 声明 不可改变 的基础类型,即初始化后不能改变值
val x : Int = 5
// 声明 可以改变 的基础类型,即初始化后可以改变值
var x : Int = 5
x += 1
// Kotlin也支持自动推断和识别数据类型,类似于JAVA中的装箱
val x = 5
// 也可以先声明变量,再赋值等功能这里不再赘述,与JAVA雷同
- String类类型的模板替换,使用符号"$"
var a = 1
val s1 = "a is $a"
a = 2
val s2 = "${s1.replace("is", "was")}, but now is $a"
造物之力——类
类与对象,如同造物之力,是代码世界的基石。掌握类的定义与对象的实例化,创造属于自己的世界。
继承的方式(默认情况下,类都是final类型,需要open关键字使其开放)
// 创建类的方式
Class Rectangle(val height: Double, val length: Double) {
val perimeter = (height + length) * 2
}
// 继承类的方式
open class Shape
class Rectangle(val height: Double, val length: Double): Shape() {
val perimeter = (height + length) * 2
}
变化之道,条件判断的抉择
- 条件表达式
编程之道,如同修行之道,变化莫测。条件判断与循环控制,是应对变化之利器,掌握之,方能行走自如。
// 简写版本,详细版本与JAVA一样
fun maxof(a: Int, b: Int) = if (a > b) a else b
- 循环方式,与Python类似
val items = listOf("a", "b", "c")
for(item in items) {
println(item)
}
// 或者
for(index in items.indices) {
println("item at $index is ${items[index]}")
}
- 选择表达式
for describe(obj: Any): String =
when (obj) {
1 -> "一个"
2 -> "两个"
else -> "未知"
}
- 范围选取
// 类型1
val x = 9
val y = 10
if (x in 1..y+1) {
print("范围内")
}
// 类型2 其中 indices是0..2,list的取值范围
val list = listOf("a", "b", "c")
if (-1 !in 0..list.lastIndex) {
println("-1超出了控制范围")
}
if (list.size !in list.indices) {
print("列表大小也超出了有效的列表索引范围")
}
//-1 is out of range
// list size is out of valid list indices range, too
// 类型3 循环输出,并且指定步数,可以自己去试试输出的结果
for (x in 1..5) {
print(x)
}
for (x in 1..10 step 2) {
print(x)
}
println()
for (x in 9 downTo 0 step 3) {
print(x)
}
万物归一——集合类
集合,是编程世界的众生百态。掌握集合操作,如同掌握众生之法,数据处理,如同整理万物。
// exp1 普通的循环
for (item in items) println("item")
// exp2 检查是否集合中存在
when {
"orange" in items -> println("juicy")
"apple" in items -> println("apple is fine too")
}
// exp3 使用lambda表达式(列表中为白凝冰、古月方源、古月方正)
val fruits = listOf("bainingbing", "guyuefangyuan", "guyuefangzheng")
fruits
.filter { it.startsWith("guyue")}
.sortedBy { it }
.map { it uppercase() }
.forEach { println(it) }
// 输出:
// GUYUEFANGYUAN
// GUYUEFANGZHENG
- 可为null值的变量,在后面加"?"即可
- 类型检查可以使用is运算符
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// `obj` 自动转化为String
return obj.length
}
// `obj` 不是String则直接return
return null
}