写给开发者Kotlin指引(一)
本文从开发者学习第二门语言的角度,力求用最简洁的语言说明Kotlin
的用法。在你花10分钟阅读完后,应该可以写出不那么Kotlin的Kotlin代码。
一、和Java的关系
Kotlin is a cross-platform, statically typed, general-purpose programming language with type inference. Kotlin is designed to interoperate fully with Java, and the JVM version of Kotlin's standard library depends on the Java Class Library, but type inference allows its syntax to be more concise. 在维基百科中说明了
Kotlin
是可以与Java进行完全互操作的语言。事实上,Kotlin的编译器跟Java的编译器一样,都是将代码转化为了JVM能够理解的字节码。类似于C++语言先通过编译器编译成汇编语言,汇编语言再由汇编器生成了机器码,最后再由链接器链接为可执行文件。
二、函数
当提及到一门语言,函数和变量是必须的,直接从一个简单的函数来看。
Kotlin
的函数定义非常简单,以fun
作为函数的标记,对于函数的形参,使用后置类型的方式来说明形参的类型,它还支持默认参数,函数的返回类型在形参之后使用冒号来说明,Unit
相当于一般语言中的void
,表示函数的返回类型没用。函数体类似于大部分语言,使用大括号来表示,如果函数体为表达式(表达式的概念现在暂时不管,直接使用大括号即可),也可以像声明变量那样用=
。
默认参数的用法很简单,你可以选择在任意参数开始使用默认参数,例如defaultArguments()
或者defaultArguments(3,"as")
,这没什么好说的。具名参数(named argument)是Kotlin
中的一个特色(用过Python
的人可以跳过这一部分,因为没什么区别),他允许函数调用者指定对应参数的值,配合默认参数,会让函数的调用更加灵活。例如,上面的namedArguments
的函数可以这样调用:
因为namedArguments
只给前两个参数设置了默认参数,所以如果没有具名参数,那么就得给出所有参数。在使用具名参数后,函数的形参可以用更加合理的方式来排布顺序,而不需要为了配合默认参数调整形参的顺序。
OK,现在让我们运行一下上面的代码看看效果吧先给出完整的main.kt
文件:
Kotlin
的入口函数为main
函数,想要运行Kotlin代码,先要将其编译成jvm虚拟机能够识别的字节码,Kotlin
为我们提供了编译器,在Mac OS平台上,可以直接使用brew install kotlin
来安装Kotlin
的编译套件,其他平台的安装参考这里。
使用以下命令来编译代码为jar
文件:
然后,类似于Java
,直接使用java -jar main.jar
来运行,看一下结果:
上述的代码中还包括一个非常实用的字符串处理技巧,字符串格式化一直是编程时永远绕不开的话题,Java和C的处理方式是在字符串中用%s %d
作为占位符来进行字符串格式化,这种方法非常不友好,用户需要记住各种各样的占位符。Python
的处理稍微高了那么一点点🤏,使用{}
来进行占位,由于Python中将对象转化为字符串非常方便,所以用户处理起来也不是那么痛苦。现在,Kotlin
彻底释放了用户,直接在字符串里面用$
加上变量名的方式就可以了,Kotlin
会帮你执行toString
的操作,甚至还可以在里面执行表达式,只要用${}
将表达式括起来即可。
三、变量
Kotlin
声明变量很简单,看例子:
val
修饰的变量为不可变的变量,注意这里的不可变,理解为它的引用不可变,如果你生命的是一个ArrayList
,你还是可以自由地往里面添加元素。var
修饰的变量是可变变量。
四、类
虽然Kotlin
也是JVM系的语言,但是可以看到前一节的main.kt
的三个函数不在类中,但是也可以编译运行。事实上,即使在Java
中,静态函数也是顶级的函数,类名只是静态函数的命名空间(C++用户应该非常熟悉这个概念)。虽然如此,但是出了入口main
函数,最好不要定义这种函数,就跟Java
一样,用类来组织代码就好了。
在Kotlin
中,类的定义非常的简洁,例如:
Kotlin
通过class
关键词来标记类,后面跟类名,这个十分好理解,后面的括号中包括的是类的构造函数的参数,如果参数被用val
或者var
修饰了,该参数就会自动成为类的成员变量。这样做的优点就是在Kotlin
里面不再需要写this.member1=member1
这样的废话了😄。这里的成员默认是public
的,如果想要设置为private
,只要在val
前面加上访问权限修饰符private
即可。 传统的面向对象语言,不管是C++还是Java,都会提供一个叫构造函数重载的概念,即可以通过不同的参数来以不同的逻辑来构造对象。Kotlin
里面没有重载这一说,Kotlin
通过为构造函数提供默认参数实现了函数的重载,类似于前面的具名参数(Python
中通过为__init__
函数设置默认参数取得了同样的效果)。
下面扩充一下上面的类:
Kotlin
中没有static
关键词,它使用companion object
块来放置静态变量和函数,它的成员函数也类似Java
,同样public
为默认修饰符。
五、总结
这一节简单叙述了Kotlin
的变量声明、函数和类的定义,它的简洁和优雅一览无余,现在编写完整的Kotlin
程序已经毫无问题了,但是想要进一步感受Kotlin
的魅力,还需要继续探索。
Last updated
Was this helpful?