美文网首页 Android知识进阶(遥远的重头开始)
Android-Kotlin基本语法练习关键点及相关参考链接(B

Android-Kotlin基本语法练习关键点及相关参考链接(B

作者: MonkeyLei | 来源:发表于2019-07-21 16:45 被阅读0次

既然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"))
}

image

Android也能写,不过要运行app。麻烦。。没必要。

不过有个地方要注意:如果你的AS工程安装了插件,并且重启了AS,发现还是不能创建kotlin文件,那是因为工程没有配置相关引用:

记得配置下...

image

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

image image

相关文章

网友评论

    本文标题:Android-Kotlin基本语法练习关键点及相关参考链接(B

    本文链接:https://www.haomeiwen.com/subject/qccvlctx.html