既然FanChael/SuperStart该原子项目被搞起了,决定完善下,然后顺便就学习下Kotlin。感受下google推崇的效率更高的语法。
小萌新觉得,一个新的语言就是要基本语法走起,变量,函数,条件处理,基本类定义,静态这些。差不多一个小的逻辑流程算是可以搞了吧。。是的。基本语法入门了,使用上应该是问题不大了,凡事都是从"hello world"开始的嘛。这边我们就直接从类创建->变量定义->函数定义->内部类定义->对象创建->静态代码块->相关疑问知识点总结.
由于要运行Kotlin的main函数,AS是不行啦。需要搞个IntelliJ IDEA来联系哈!么么哒...Download IntelliJ IDEA: The Java IDE for Professional Developers by JetBrains
安装一个社区版就足够了... 关于Android studio升级到3.0 kotlin执行main方法错误
1. 然后就按照官方文档 Basic Syntax - Kotlin Programming Language, 把上面的基本过一遍就差不多了。有些自己联系过程中可能会联想到要尝试下,那就尝试,如果有问题就查下资料,争取熟悉更多的东西...
中文的也可以搞搞的嘛...Kotlin 类和对象 | 菜鸟教程
2. 小萌新练习过程中,有特意想看看如何定义变量,但是不进行初始化,所以有涉及到lateinit和by lazy的使用部分.lateinit 和 by lazy 的区别(Kotlin)
3. 结合中文文档类的构造部分,有稍微关注了下构造函数constructor,所以有特别练习了下 Kotlin 类和对象 | 菜鸟教程
4. 当然还有突然想看下instancof的写法,还有就是范围in !in的写法,还有就是数组,链表,遍历,switch等。还有就是Object的替代写法等。 就是练习基本语法,基本数据类型时尽量多练习下相关的知识点,多熟悉。
5. 下一步就可以考虑接口,继承,泛型,枚举,委托等的实践了呀。。。
小萌新为了入门,除了看文档,还咨询了相关人士,哈哈。。。
附上练习代码:
KotlinStart.kt
/*
*@Description: kotlin基本语法实践
*@小萌新Tip:
* 1.快速入手一个新的语言,按照我们平常写功能,写模块,写界面主要分为以下几个大的部分:
* 1.1 变量,静态变量, 方法,私有+公有+静态方法
* 1.2 类,构造函数,findviewbyid/butterknife, 点击事件
* 1.3 条件判断,循环语句,Android相关api调用+context
* 1.4 kotlin版本的mvp架构
* 1.5 然后就是一些常规的一些工具类的kotlin实现(重点就是语法上面有很多区别)
* 2\. 基于上述相关问题,我们重点熟悉下基本的变量,方法,静态,接口,instanceof等
* 2.1 http://www.runoob.com/kotlin/kotlin-tutorial.html
* 2.2 http://kotlinlang.org/docs/reference/basic-syntax.html
* 2.3 https://blog.csdn.net/u013381815/article/details/52767122
* 3\. 小萌新自己基于kotlin搞了一个demo(电子屏展示)
* 3.1 https://github.com/FanChael/SuperStart
*@Author: hl
*@Time: 2018/12/14 13:29
*/
import java.util.* ///< 引入一个包
/**
* constructor()是主构造函数,默认就是,所以private constructor()不用描述;不过由于需要屏蔽默认构造,所以增加了private
*/
class KotlinStart private constructor(){
/**
* 变量的定义
* 1\. Koltin中属性在声明的同时也要求要被初始化,否则会报错
* 1.1 https://blog.csdn.net/dpl12/article/details/80758049
* 1.2 lateinit 或者 by lazy(小萌新找不到这个lazy,要报错呀..后面再看看吧)可以延迟初始化
*/
var da_bian_a:Int = 0 ///< 指定类型Int
var da_bian_b:String = "" ///< 指定类型String
var da_bian_bb = "" ///< 默认自动识别类型
var da_bian_c: Float? = null ///< 默认自动识别类型
lateinit var da_bian_d: Any ///< 暂时不进行初始化(小萌新觉得养成初始化的习惯挺好的)
///< lateinit不能用在可空的属性上和java的基本类型上
///< lazy{} 只能用在val类型, lateinit 只能用在var类型
///< https://blog.csdn.net/lyfxh1314/article/details/81028458
val da_bian_e:Float = 0.0f ///< 不可改变的变量定义
val simple: Int? ///< 类型为 Int ,默认实现 getter ,但必须在构造函数中初始化
/**
* 主构造器中不能包含任何代码,初始化代码可以放在初始化代码段中,初始化代码段使用 init 关键字作为前缀。
*/
init {
simple = 0
}
/**
* 次构造函数
* 1\. 就是说如果我们什么主构造函数为private,那样的话,外部就不能采用默认构造函数初始化对象
* 2\. 此时提供次级构造函数,带参数的,这个对外开放; 如果这个再加上private,就完蛋了...
*/
constructor(name: String) : this() {
}
/**
* 带返回值的函数
*/
fun add(a: Int, b: Int) : Int{
///< 打印输出
println("kotlin Date().time =" + Date().time)
///< 返回加后的结果
return a + b
}
/**
* 不带返回值的函数 + 并且支持Java的Object类型参数
*/
fun add(a: Any, b: Any){
///< 类型判断 is 或 !is
if (a is Int && b is Int){
println("kotlin a + b =" + (a as Int + b as Int))
}
else if (a is Double && b is Double){
println("kotlin a + b =" + (a as Double + b as Double))
}
}
/**
* 简单内部类+静态方法
*/
class innerKotlin{
companion object {
/**
* 简单的字符串转整型
*/
fun parseInta(str: String): Int {
return str.toInt()
}
}
}
/**
* 循环测试+列表数组
*/
fun loopTest(){
///< 列表
var items = listOf("a", "b", "c")
///< 数组
var itema = arrayOf("a", "b", "c")
///< 直接获取值
for (item in items){
println("item=" + item)
}
for (item in itema){
}
///< 获取索引,然后获取值
for (index in items.indices){
///< 嵌入式引用 - 哈哈
println("index $index value=${items[index]}" )
}
///< 循环的遍历方式
var index = 0
while (index < itema.size){
println("item at $index is ${items[index]}")
index++
}
}
/**
* Java的switch搞法+范围判断
*/
fun switchTest(obj: Any): Any? {
when(obj){
1 -> {
}
"a" -> return "a"
"b" is String -> return "a" ///< 进一步做组合处理 - 蛮灵活的,很香!!!
}
///< 范围遍历+步长
for (x in 1..10 step 2) {
println("switchTest $x")
}
///< 范围判断
val list = listOf("a", "b", "c")
if (-1 !in 0..list.lastIndex) {
println("-1 is out of range")
}
return null
}
}
/**
* 测试 - 为了用kotlin执行main方法解决办法需要自己去下载IntelliJ IDEA即可
* https://www.jetbrains.com/idea/download/#section=windows
*/
fun main(args: Array<String>) {
///< 对象创建基本方式
var test = KotlinStart("黄磊,吴怡萱")
test.add(1, 2)
test.loopTest()
test.switchTest(1)
println("main parseInta(\"123\")=" + KotlinStart.innerKotlin.parseInta("123"))
}

Android也能写,不过要运行app。麻烦。。没必要。
不过有个地方要注意:如果你的AS工程安装了插件,并且重启了AS,发现还是不能创建kotlin文件,那是因为工程没有配置相关引用:
记得配置下...

Android不能直接鼠标右键运行的哟!!!


网友评论