Kotlin进阶(一)

Kotlin语法

从第一篇文章中我们已经大概了解了如何创建一个kontlin语言的项目,或者如何从java转换为kotlin,本篇博客,将从最初的kotlin和java的却别慢慢学习kotlin语法.

代码的区别

kotlin代码

package cn.yky.koyun

import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import android.widget.TextView

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        /**
         * 查找控件
         */
        val tvtest = findViewById(R.id.tv_main_test) as TextView
        /**
         * 设置控件内容
         */
        tvtest.setText("好玩不好玩")
        /**
         * 调用方法输出控制台
         */
        testfor("你说什么")
    }

    fun testfor(s: String) : Unit {
        print(s)
    }

}

java代码


public class MainActivity extends AppCompatActivity {


    private String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        TextView tvMainTest = (TextView) findViewById(R.id.tv_main_test);
        tvMainTest.setText("好玩不好玩");
        testfor("你说什么");
    }

    public void testfor(String s) {
        Log.d(TAG, s);
    }
}

代码区别

extends和Implement

  • 首先我们看到java代码中的’extends’被替换为’:’,如果是’Implement’,也会被替换为’:’

方法

“public void testfor(String s)”被转换为了”fun testfor(s: String) : Unit”

其中Unit指的是返回值为void,如果返回为空也可以写成以下代码

fun testfor(s: String)

其中参数部分转换也比较大,但是也很好理解,那就是参数s继承于String类型

分号

我们通过代码对比,有没有惊奇的发现没有’;’了,麻麻再也不用担心写代码忘记’;’了.

值和变量

变量的话用”var”定义,如果说是常量的话用”val”进行定义,用法如下

val price = 100 //整型,可以编译
price = 30;     //不可以编译,因为已经用val定义过它是个常量
var name = "are you ok" //字符串,可以编译
name = "詹姆斯" //字符串,可以编译,因为他是被定义为var的变量
name=123 //不可以编译,因为开始的时候已经把它定义为一个字符串了
var total=price*3   //整型,计算得出常量

以上我们理解了 “val”和”var”的区别了吗,不理解的可以多敲代码,写示例!!!或者留言给我思密达

你也可以直接指定常量或者变量的类型

val name :String ="yukoyun"
var size : Double = 15.0
var time : Float = 22f

发现了一个其他的事情没有哈,我们没有使用”double”,而是使用了”Double”,这是因为在Kotlin中,一切都是对象,为了实现性能,编译器会将一些对象转换为内部的原始类型

属性或者一些字段的获取

在kotlin中,你可以获取一些属性像java一样,例如,获取资源文件的字符串

kotlin代码

resources.getString(R.string.abc_capital_off);

java代码

getResources().getString(R.string.app_name);

安全性

Kotlin最好的一件事就是,一切不能为空,除非你声明为空.通过使用’?’来实现.通过’?’来标识你的值可能存在,也有可能不存在.

看下代码示例

var t: String = null //不能编译通过
var i: Int   //不用做初始化.
var b: String? = null //这是可以进行编译通过的

更安全的调用

用一个空的对象调用它的方法,是很容易出现空指针异常的.那么我们也可以通过’?’来避免这个问题的存在

看下代码示例

val context : Context? = null
val res = context?.getResources() // 不会crash,但是res的结果是null

如果你想获取一个字符串的话,你会这么写

val context : Context? = null
val res = context?.getResources() 
val appName = res?.getString(R.string.app_name)
val shortName = appName?.substring(0, 3)

但是这样我觉得,如果第一个是空的话,就没有必要走下一步了,我给出的代码例如下边的

val context : Context? = null
//这是一种java加konlin
if (context != null) {
    val res = context.getResources()    // 这里边的就不需要写'?'了
    val appName = res.getString(R.string.app_name)
    val shortName = appName.substring(0, 2)
}
/**
*纯kotlin实现
*/
val context : Context? = null
//一旦为null,就不需要走代码块了
context?.let {
    val res = context.getResources()    // 这里边的就不需要写'?'了
    val appName = res.getString(R.string.app_name)
    val shortName = appName.substring(0, 2)
}

更多语法可以参考kotlin的中文文档

你可能感兴趣的:(Kotlin进阶(一))