一、Kotlin 概述

Kotlin 是一种在 Java 虚拟机上运行的静态类型编程语言。它主要是 JetBrains 开发团队所开发出来的编程语言。虽然 Kotlin 与 Java 语法并不兼容,但 Kotlin 被设计成可以和 Java 代码相互运作,并可以重复使用如 Java 集合框架等现有 Java 引用的方法库。它很容易在 Android 项目中替代 Java 或者同 Java 一起使用。

Google 在2019年的 Google I/O 大会上宣布 Kotlin 被选为 Android 开发首选语言。

1.1、Kotlin 特点

  1. 简洁易用: Kotlin中提供了大量的扩展,使得我们的代码更加简洁,开发出来的框架更加易用;
  2. 安全: 避免空指针异常等整个类的错误;
  3. 互操作性: 充分利用 JVM、Android 和浏览器的现有库;
  4. 工具友好: 可用任何 Java IDE 或者使用命令行构建。

1.2、学习 Kotlin 的意义

  1. 学习正当时:目前Kotlin已经成为Android开发的官方首选语言,现在学习Kotlin是正当时;
  2. 顺应潮流,为了未来:现在包括一二线在内的各大互联网公司都在往Kotlin上转,现在学习Kotlin不仅是顺应潮流,更是为了为了未来着想;
  3. 提升开发效率:在开发效率上Kotlin开发要比Java高很多。

二、Kotlin 与 Java 比较

1、打印日志

Java

System.out.print("hello world");
System.out.println("hello world");

Kotlin

print("hello world")
println("hello world")

2、定义常量与变量

Java

String name = "hello world";
final String name = "hello world";

Kotlin

var name = "hello world"
val name = "hello world"

3、null 声明

Java

String name;
name = null;

Kotlin

var name : String?
name = null

4、空判断

Java

if (text != null) {int length = text.length();
}

Kotlin

text?.let {val length = text.length
}
// 或者
val length = text?.length

5、字符串拼接

Java

String firstName = "Android";
String lastName = "enginner";
String message = "My name is: " + firstName + " " + lastName;

Kotlin

val firstName = "Android"
val lastName = "enginner"
val message = "My name is: $firstName $lastName"

6、三元表达式

Java

String text = x > 5 ? "x > 5" : "x <= 5";

Kotlin

val text = if (x > 5)"x > 5"
else "x <= 5"

7、多重条件

Java

if (score >= 0 && score <= 300) { }

Kotlin

if (score in 0..300) { }

8、更灵活的 case 语句

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"
}

9、for 循环

Java

for (int i = 1; i <= 10 ; i++) { }for (int i = 1; i < 10 ; i++) { }for (int i = 10; i >= 0 ; i--) { }for (int i = 1; i <= 10 ; i+=2) { }for (int i = 10; i >= 0 ; i-=2) { }for (String item : collection) { }for (Map.Entry<String, String> entry: map.entrySet()) { }

Kotlin

for (i in 1..10) { }for (i in 1 until 10) { }for (i in 10 downTo 0) { }for (i in 1..10 step 2) { }for (i in 10 downTo 0 step 2) { }for (item in collection) { }for ((key, value) in map) { }

10、更方便的集合操作

Java

final List<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4);final Map<Integer, String> keyValue = new HashMap<Integer, String>();
map.put(1, "Android");
map.put(2, "Ali");
map.put(3, "Mindorks");// Java 9
final List<Integer> listOfNumber = List.of(1, 2, 3, 4);final Map<Integer, String> keyValue = Map.of(1, "Android",2, "Ali",3, "Mindorks");

Kotlin

val listOfNumber = listOf(1, 2, 3, 4)
val keyValue = mapOf(1 to "Android",2 to "Ali",3 to "Mindorks")

11、遍历

Java

// Java 7 and below
for (Car car : cars) {System.out.println(car.speed);
}// Java 8+
cars.forEach(car -> System.out.println(car.speed));// Java 7 and below
for (Car car : cars) {if (car.speed > 100) {System.out.println(car.speed);}
}// 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)}

12、方法定义

Java

void doSomething() {// logic here
}void doSomething(int... numbers) {// logic here
}

Kotlin

fun doSomething() {// logic here
}fun doSomething(vararg numbers: Int) {// logic here
}

13、constructor 构造器

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}}
}// 或者
object Utils {fun getScore(value: Int): Int {return 2 * value}}

14、Get Set 构造器

Java

public class Developer {private String name;private int age;public Developer(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}
}

Kotlin

data class Developer(val name: String, val age: Int)

15、操作符

Java

final int andResult  = a & b;
final int orResult   = a | b;
final int xorResult  = a ^ b;
final int rightShift = a >> 2;
final int leftShift  = a << 2;
final int unsignedRightShift = a >>> 2;

Kotlin

val andResult  = a and b
val orResult   = a or b
val xorResult  = a xor b
val rightShift = a shr 2
val leftShift  = a shl 2
val unsignedRightShift = a ushr 2

三、巧用 Android Studio

3.1 、为已有基于 Java 的 Android 项目添加Kotlin 支持

1、通过 AS 的工具添加

用 Android Studio 打开已有的 Android 项目,然后菜单栏上的Tools 选项 --> Kotlin --> configure kotlin in project

2、手动添加

project/build.gradle

buildscript {// add+ ext.kotlin_version = '1.3.61'repositories {google()jcenter()}dependencies {classpath 'com.android.tools.build:gradle:3.5.3'// add+ classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"}
}

app/build.gradle

apply plugin: 'com.android.application'
// add
+ apply plugin: 'kotlin-android-extensions'
// add
+ apply plugin: 'kotlin-android'
...
dependencies {...// add+ implementation "androidx.core:core-ktx:+"// add+ implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
}
repositories {mavenCentral()
}

3.2 、将 Java 文件转成 Kotlin 文件

打开一个 Java 文件,然后选择菜单栏上的 Code 选项 --> convert java file to kotlin file

import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);}
}

转换后:

import android.os.Bundle
import androidx.appcompat.app.AppCompatActivityclass MainActivity : AppCompatActivity() {override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)}
}

给 Android 开发者的 Kotlin 教程(一)相关推荐

  1. 给Android开发者的kotlin使用

    IO大会上说把Kotlin作为Android官方语言,虽然以前也听过,但是不了解,这不进来看看,尝试自己翻译一下,之前都是看别人的译文,直接看别人翻译过来的,可能可以节省时间,但是理解可能不够深入,加 ...

  2. 致Android开发者的Kotlin入门

    Google在今年的IO大会上宣布,将Android开发的官方语言更换为Kotlin,作为跟着Google玩儿Android的人,我们必须尽快了解和使用Kotlin语言. 不过Kotlin毕竟是语言级 ...

  3. 当上项目经理才知道!Android快速转战Kotlin教程,年薪50W

    前段时间有人问我:「你是怎么成为一名软件架构师的?」我们就此探讨了必备技能.经验,以及储备相关知识所需的时间和精力.除此之外,我也回顾了自己走过的路.使用或尝试过的技术,以及我从那些五花八门的工作中学 ...

  4. kotlin入门,Android快速转战Kotlin教程,重难点整理

    基于JS的高性能Flutter动态化框架 可能是目前放出来的相对最完整的Flutter动态化方案 跨平台新明星Flutter推出后,我们团队也尝试引入 Flutter ,做为iOS开发,马上感受到,F ...

  5. Android快速转战Kotlin教程,面试必备

    背景 曾经有人问我,为什么要下班了不找点乐子,还花这么多时间去写一份资料.你是不是傻! 我无言以对! 但是不得不说,这份笔记确实倾注了我很多心血. 至于,我为什么要做这份资料,为什么又要写这篇文章!是 ...

  6. Android快速转战Kotlin教程,分享一点面试小经验

    正文 从我个人的角度写写30多岁码工的感受:的确是受年龄压力开始增大了.比如二十多岁的小年轻,可能什么都懂,对组里的东西很熟悉.有时候我也怀疑自己是不是智商不够,是不是自学能力太差,是不是基础不行,别 ...

  7. Android实战开发-Kotlin教程(布局篇 3.1)

    上一篇我们对Android常用的组件已经有了一个初步的了解,本篇我们开始了解Android常用的布局方式 什么是布局?怎么去理解布局了?简单的来说,布局就是一种约束,比如你把一堆的东西放到地上,他就是 ...

  8. Android实战开发-Kotlin教程(入门篇-RecyclerView数据列表的实现)

    在移动应用开发中,很多时候我们需要去展示数据记录,如电商应用中的商品列表.订单列表等等一系列的数据记录的展示时,我们需要用到Android的列表组件展示这些数据,列表组件应该是我们遇到到比较常见也是必 ...

  9. Android实战开发-Kotlin教程(语法篇 1.2)

    上一篇我们介绍了Kotlin语法的一些基础用法,本章我们来学习一下Kotin的语法知识 if表达式 if表达式在开发过程中最常见的判断表达式 if后面的括号代表判断的条件表达式,如条件表达式的结果为t ...

  10. Android实战开发-Kotlin教程(组件篇 2.3)

    上一篇我们对TextView的使用以及相关属性有了一定的了解,本篇我们开始了解Button和EditText.ImageView的使用 Button Button是UI中的一个小部件,主要用于交互中用 ...

最新文章

  1. Microsoft Exchange Server 2010测试四成员DAG
  2. php去除最后一位,php字符串怎么去除最后一个字符
  3. (二)docker安装并持久化postgresql数据库
  4. 告别2013拥抱2014
  5. webform Repeater重复器、地址栏传值、Response
  6. 爬虫笔记(十二)——浏览器伪装技术
  7. 分布式系统:SpringBoot中Dubbo以及Zookeeper依赖包冲突 LoggerFactory is not a Logback LoggerContext but Logback
  8. Linux wc命令用于计算字数。
  9. 信息学奥赛一本通 1122:计算鞍点 | OpenJudge NOI 1.8 05:计算鞍点
  10. 字节流复制文件 java
  11. centos设置时间时区
  12. 【李宏毅2020 ML/DL】P84 SAGAN, BigGAN, SinGAN, GauGAN, GANILLA, NICE | More About GAN 2020
  13. ant 使用java 运行类_用ANT构建java可执行程序
  14. 服务器压缩文件夹,怎样在文件服务器的NTFS分区(卷)中,压缩文件夹D:\lists?...
  15. ntsd.exe 附使用教程
  16. Juniper Junos DoS漏洞CVE-2017-2345 10.2及相关产品和平台均受影响
  17. Delphi通过机器码获得注册码的完整方案
  18. Python pandas.DataFrame.median函数方法的使用
  19. [机缘参悟-6]:阳明心学三大核心思想:心外无物、知行合一、致良知的理解
  20. Linux CentOS 学习笔记

热门文章

  1. java8实现map遍历,map转list,list转map
  2. CodeBlock 常用快捷键
  3. codeblock 设置背景颜色
  4. 利用百度智能云实现车牌号识别
  5. Fiddler使用和数据抓包
  6. 掌握业务流程图符号,提高业绩不再没有头绪
  7. 如何查找求职简历模板及pdf编辑器去水印
  8. Window同时兼容运行多版本谷歌浏览器chrome
  9. Multisim14 安装出错情况说明,以及解决办法
  10. 几个文件vtp格式转stl格式