kotlin與Java在Android開發(fā)中的簡單對比

自從谷歌宣布,kotlin為Android官方的開發(fā)語言,它確實火了,因為他有強大的背景,更因為它的安全,簡潔
大部分的人會說,我的項目是java,換成kotlin那成本太大了.其實kotlin的開發(fā)者早就想到這一點,kotlin官網強調:與java100%的交互.
這讓你想到什么?沒錯,這意味著你不用用kotlin重構整個項目,可以立刻馬上現(xiàn)在就kotlin寫Android了.接下來我們來看看kotlin...

//Student,Teacher的實體類聲明
data class Student(val name: String, val age: Int, val sex: String)

data class Teacher(val name: String, val age: Int, val sex: String)

沒錯,你再也不用寫枯燥無味的get/set方法了,我們在看一段RxJava代碼

 //java寫法,
 Observable.just("1")
                .map(new Function<String, Integer>() {
                    @Override
                    public Integer apply(String s) throws Exception {
                        return Integer.parseInt(s) + 1;          //將"1"轉成Integer,并加1
                    }
                })
                .subscribe(new Consumer<Integer>() {
                    @Override
                    public void accept(Integer integer) throws Exception {
                        System.out.println(integer);        //打印2
                    }
                });
   //kotlin寫法
   Observable.just("1")      
                .map { it.toInt() + 1 }    //String轉Int,并+1
                .subscribe { println(it) }  //打印結果:2

從上面可以看出kotlin支持lambda表達式,而java是java8才開始支持,Android是不支持java8的.
細心的同學可能已經發(fā)現(xiàn)了,上面kotlin將String轉成Int,只需要"1".toInt,寫起來明顯更符合面向對象的邏輯,不像java寫起來有點繁瑣.那么.toInt()的背后是什么呢?

//點進kotlin的源碼一看,這貨其實還是調用java的,并用kotlin的內聯(lián)函數(shù),保證不會因為函數(shù)入棧,出棧而帶來性能損失,額...說得有點多
public inline fun String.toInt(): Int = java.lang.Integer.parseInt(this)

類型自動推導

    //你可以不用生聲明類型
    private val age = 1    //用val聲明一個不可變的字段(常量)
    private var name = "lin"  //用var聲明一個變量

事實上,值不可變的字段,你應該用val聲明.在java中,你應該用final關鍵字修飾.這樣你維護代碼的時候,一眼看到這個字段就知道它不可能在其他地方被賦值了,如果你不是這樣做,修bug,維護這個字段的時候你得小心翼翼.這就是val聲明的好處

java的switch 與 kotlin的when

//java代碼
 switch (age) {
            case 1:
                System.out.println("剛出生?");
                break;
            case 2:
            case 3:
                System.out.println("長大了");
                break;
            default:
                System.out.println("翅膀硬了...");
        }
//kotlin代碼
 when (age) {
            1 -> println("剛出生?")
            2, 3 -> println("長大了")
            else -> print("翅膀硬了...")
        }

你還記得你上一次在java中少寫了一個break,而導致的bug嗎? 當然kotlin的when還有更強大的操作.

集合操作符

//kotlin寫法
      //聲明一個Student集合
       val list = listOf(Student("lin", 1, "男"),
                Student("zhang", 2, "女"),
                Student("san", 3, "妖怪"),
                Student("四", 4, "未知"))

        //過濾出所有年齡大于2的學生
        val filterStudents = list.filter { age > 2 }

        //判斷是否有一個名字叫"lin"的學生,如果有返回true,反之false
        val hasStudentLin = list.any { it.name == "lin" }

        //計算出男生的個數(shù)
        val count = list.count { it.sex == "男" }
//java寫法
你可能會這樣寫
private boolean hasStudentLin(ArrayList<Student> students) {
        for (int i = 0; i < students.size(); i++) {
            Student student = students.get(i);
            if (student.getName().equals("lin")) {
                return true;
            }
        }
        return false;
    }
//你還可能這樣寫
boolean hasStudentLin;
        for (int i = 0; i < students.size(); i++) {
            Student student = students.get(i);
            if (student.getName().equals("lin")) {
                hasStudentLin = true;
                break;        //是不是有可能你一不小心把break漏掉了,導致多循環(huán)n次
            }
        }

kotlin用簡單的操作符any,filter ,count就清楚了表達了你想要的邏輯,代碼的可讀性大大提高,健壯性在某種程度上來說,也算提高了,比如上面student.getName()為null的時候(其實你應該用"lin"來調equals),java的寫法就掛掉了,而kotlin則不會。事實上,kotlin還有很多操作符,他們都很實用。

以上的對比只是冰山一角,還有很多沒提及,比如kotlin最重要的空安全...后面再慢慢補充...

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容