Android:一名使用Kotlin3年程序员的切身感受

为什么要学kotlin,Java学得好好的它不香吗?

的确,如果是在前几年,我不会给大家推荐kotlin,甚至我也没有去了解过。

但是从kotlin问世到现在,我也用了好几年了,现在就来聊聊用Kotlin的感受

为什么学

前几年找工作的时候,有一家公司比较心仪,但是当时招聘要求Android开发工程师岗位要有扎实的kotlin基础,虽然也能去找其他公司,但是我这人比较执著,认真去学习kotlin几个月。然后还是没有进去那家公司(人家招满了/(ㄒoㄒ)/~~)

在这里插入图片描述

所以Kotlin你有需要就去学,对于Android来说肯定是要学的。

学kotlin之前你要了解它

为了更好的学习kotlin,我们首先要知道它的优势在哪里。

  1. kotlin经过十来年的发展,已经有了相对成熟的语言和环境,越来越多公司的将其用于开发Android应用程序,此外它还可以用于多平台的开发。
  2. 我们都知道,一个语言要想得到广泛的使用,除了它本身要快捷好用之外,还需要有一个良好的生态,我们可以在应用程序中将Kotlin与Java编程语言一起使用,互操作性所带来了是更便捷的使用。
  3. kotlin使用的代码更少,而且有更好的可读性,同时很多的语言特性也可以避免常见的编程错误,更重要的是它易学易用,对有Java编程基础的人来说更是如此。

回答开头的问题 会java还要学kotlin吗?

那看看kotlin与java碰碰

1. 比java 更快

如下:创建1000000 个对象

public class JPerson {
    public JPerson(String name, Integer age, Integer sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    private String name ;
   private Integer age;
   private Integer sex ;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

}

执行结果
在这里插入图片描述

public class ReflectDemo {

    public static void main(String[] args) throws InterruptedException {
            int i =0;
            long start = System.currentTimeMillis();
            while (i<1000000){
                JPerson jPerson = new JPerson("zhangsan",1,1);
                i++ ;
            }
            long end = System.currentTimeMillis();
            System.out.println("java本次耗时:"+(end-start));

    }

}

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

fun main(args: Array<String>) {
        var i = 0
        val start = System.currentTimeMillis()
        while (i < 1000000) {
            val kPerson = KPerson("张三", 1, 1)
            i = i.inc()
        }
        val end = System.currentTimeMillis()
        println("kotlin本次耗时:${(end - start)}")

}


执行结果

在这里插入图片描述

2. 比java 语法更简洁、下面是一些简单示例

//Java
System.out.print("hello world"); 
System.out.println("hello world");
//Kotlin 省略 System.out
print("hello world") 
println("hello world")

//Java
String name = "hello world"; 
final String name = "hello world";
//Kotlin 自动类型推断
var name = "hello world" 
val name = "hello world"

//Java
if (text != null) {
    int length = text.length();
}
//Kotlin 省略if 判断以及括号,可以使用it代替text
text?.let {
    val length = it.length
}

//Java
String firstName = "Android"; 
String lastName = "Architect"; 
String message = "My name is: " + firstName + " " + lastName;
//Kotlin 直接使用插值运算符
val firstName = "Android" 
val lastName = "Architect" 
val message = "My name is: $firstName $lastName"

//Java
String text = "First Line\n" +
              "Second Line\n" +
              "Third Line";
 
//Kotlin 写法更加优雅
val text = """
        |First Line
        |Second Line
        |Third Line
        """.trimMargin()

//Java
Car car = (Car) object;
//Kotlin 使用as 转换 而且转换后后续无需再次转换
var car = object as Car
car.name  // 可以直接使用car 属性

//Java
int score = // some score;
String grade;
switch (score) {
    case 10:
    case 9:
        grade = "Excellent";
        break;
    case 8:
    case 7:
    case 6:
        grade = "Good";
        break;
    case 5:
    case 4:
        grade = "OK";
        break;
    case 3:
    case 2:
    case 1:
        grade = "Fail";
        break;
    default:
        grade = "Fail";
}

//Kotlin
var score = // some score
var grade = when (score) {
    9, 10 -> "Excellent"
    in 6..8 -> "Good"
    4, 5 -> "OK"
    in 1..3 -> "Fail"
    else -> "Fail"
}

// labamda表达式 Java 8+
cars.stream().filter(car -> car.speed > 100).forEach(car -> System.out.println(car.speed));
 
 
//Kotlin
cars.forEach {
    println(it.speed)
}
 
cars.filter { it.speed > 100 }
      .forEach { println(it.speed)}
 
//Java  静态方法,私有构造比较
public class Utils {
 
    private Utils() {
      // This utility class is not publicly instantiable
    }
 
    public static int getScore(int value) {
        return 2 * value;
    }
 
}
 
 
//Kotlin
class Utils private constructor() {
 
    companion object {
 
        fun getScore(value: Int): Int {
            return 2 * value
        }
 
    }
} 
// java 对象声明
public class JPerson {
    public JPerson(String name, Integer age, Integer sex) {
        this.name = name;
        this.age = age;
        this.sex = sex;
    }

    private String name ;
   private Integer age;
   private Integer sex ;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Integer getAge() {
        return age;
    }

    public void setAge(Integer age) {
        this.age = age;
    }

    public Integer getSex() {
        return sex;
    }

    public void setSex(Integer sex) {
        this.sex = sex;
    }

}

// kotlin
data class KPerson(val name: String, val age: Int, val sex: Int)
     

3. 让它比Java更安全,能够静态检测常见的陷阱。如:引用空指针
在这里插入图片描述

4. 支持协程.让开发更简单

下面并行代码、如果串行执行需要5s,实际执行结果只需要2s、也就是单个任务最大耗时,并行代码比java 简单

用Kotlin的感受

如果你从java 转kotlin 刚开始觉得kotlin语法很怪异,比如每行最后不需要加分号,但总是莫名的加上,结果idea 提示是灰色,然后又把分号干掉。然后就是简单写法、很容易让代码看起来是声明方法,实际是调用方法。再加上项目压力,很容易写出一半是kotlin 一半是java 代码。

但是时间长久之后,慢慢发现kotlin的简单写法,会干掉大部分java代码,公司项目重构就是用kotlin 替换java ,代码直接少了75%,相当给力。所以,kotlin还是非常优秀的语言,抓紧时间学习吧

怎么学习Kotlin

问的好,这里分享一份免费的kotlin协程入门进阶实战资料

目录

在这里插入图片描述

在这里插入图片描述

第一章 Kotlin协程的基础介绍

  • 1.1 协程是什么
  • 1.2 什么是Job 、Deferred 、协程作用域
  • 1.3 Kotlin协程的基础用法

在这里插入图片描述

第二章 kotlin协程的关键知识点初步讲解

  • 2.1 协程调度器
  • 2.2 协程上下文
  • 2.3 协程启动模式
  • 2.4 协程作用域
  • 2.5 挂起函数

在这里插入图片描述

第三章 kotlin协程的异常处理

在这里插入图片描述

第四章 kotlin协程在Android中的基础应用

  • 4.1 Android使用kotlin协程
  • 4.2 在Activity与Framgent中使用协程
  • 4.3 ViewModel中使用协程
  • 4.4 其他环境下使用协程

在这里插入图片描述

第五章 kotlin协程的网络请求封装

  • 5.1 协程的常用环境
  • 5.2 协程在网络请求下的封装及使用
  • 5.3 高阶函数方式
  • 5.4 多状态函数返回值方式
  • 5.5 直接返回值的方式
    在这里插入图片描述

第六章 深入kotlin协程原理(一)

  • 6.1 suspend 的花花肠子
  • 6.2 藏在身后的- Continuation
  • 6.3 村里的希望- SuspendLambda

在这里插入图片描述

第七章 深入kotlin协程原理(二)

  • 7.1 协程的那些小秘密
  • 7.2 协程的创建过程
  • 7.3 协程的挂起与恢复
  • 7.4 协程的执行与状态机

在这里插入图片描述

第八章 Kotlin Jetpack 实战

  • 8.1 从一个膜拜大神的 Demo 开始
  • 8.2 Kotlin 写 Gradle 脚本是一种什么体验?
  • 8.3 Kotlin 编程的三重境界
  • 8.4 Kotlin 高阶函数
  • 8.5 Kotlin 泛型
  • 8.6 Kotlin 扩展
  • 8.7 Kotlin 委托

在这里插入图片描述

第九章 Kotlin + 协程 + Retrofit + MVVM优雅的实现网络 请求

  • 9.1 项目配置
  • 9.2 实现思路
  • 9.3 协程实现
  • 9.4 协程 + ViewModel + LiveData实现
  • 9.5 后续优化
  • 9.6 异常处理
  • 9.7 更新Retrofit 2.6.0

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Misdirection_XG/article/details/132181561