Java substitution to,《From Java To Kotlin》从Java到Kotlin·译 (双语对比)

560de2a4fd98

从Java到Kotlin

我的个人看法

Kotlin一度成为上周和本周的一个热点。androidStudio 3.0上官方直接得到了支持。现在的我并没有那么多时间投入到新的语法学习中。但丝毫不能赶走我对他的热情。因为对照最近一年我在写的ES6(ECMAScript 6 JavaScript 2015年的语法糖)感觉Kotlin这是给android程序员的一种福利。在这之前,当我试图开始用ES6到工作中后,发现java的语法确实有些保守和老旧了。那么现在你可以不用担心了。Kotlin的到来,将是下一个春天,因它并不是很难。语法够简洁明朗。吸收了多数优秀新语言的特性。使得你只需要花小成本的投入即可获得高效的编码效率。这无非是一件特别棒的事情。

如果你是一名android开发者,又不想立刻投入到新的语言中来,不妨看看这篇文章对两门语言的一个写法对比。相信你会喜欢的。

接下来让我们一起来划水吧。

打印日志

Java

System.out.print("Amit Shekhar");

System.out.println("Amit Shekhar");

Kotlin

print("Amit Shekhar")

println("Amit Shekhar")

常量与变量

Java

String name = "Amit Shekhar";

final String name = "Amit Shekhar";

Kotlin

var name = "Amit Shekhar"

val name = "Amit Shekhar"

null声明

Java

final String name = null;

String otherName;

otherName = null;

Kotlin

val name : String? = null

var otherName : String?

otherName = null

空判断

Java

if(text != null){

int length = text.length();

}

Kotlin

val length = text?.length

字符串拼接

Java

String firstName = "Amit";

String lastName = "Shekhar";

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

Kotlin

val firstName = "Amit"

val lastName = "Shekhar"

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

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

Kotlin

val text = if (x > 5)

"x > 5"

else "x <= 5"

类型判断和转换 (声明式)

Java

if(object instanceof Car){

}

Car car = (Car) object;

Kotlin

if (object is Car) {

}

var car = object as Car

类型判断和转换 (隐式)

Java

if(object instanceof Car){

Car car = (Car) object;

}

Kotlin

if (object is Car) {

var car = object // smart casting

}

多重条件

Java

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

Kotlin

if (score in 0..300) { }

更灵活的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"

}

for循环

Java

for (int i = 1; i <= 10 ; i++) { }

for (int i = 1; i <= 10 ; i+=2) { }

for (String item : collection) { }

for (Map.Entry entry: map.entrySet()) { }

Kotlin

for (i in 1..10) { }

for (i in 1..10 step 2) {}

for (item in collection) {}

for ((key, value) in map) {}

更方便的集合操作

Java

final List listOfNumber = Arrays.asList(1, 2, 3, 4);

final Map keyValue = new HashMap();

map.put(1, "Amit");

map.put(2, "Ali");

map.put(3, "Mindorks");

Kotlin

val listOfNumber = listOf(1, 2, 3, 4)

val keyValue = mapOf(1 to "Amit",

2 to "Ali",

3 to "Mindorks")

遍历

Java

for (Car car : cars) {

System.out.println(car.speed);

}

for (Car car : cars) {

if(cars.speed > 100) {

System.out.println(car.speed);

}

}

Kotlin

cars.forEach {

println(it.speed)

}

cars.filter { it.speed > 100 }

.forEach { println(it.speed)}

方法定义

Java

void doSomething() {

// logic here

}

Kotlin

fun doSomething() {

// logic here

}

带返回值的方法

Java

int getScore() {

// logic here

return score;

}

Kotlin

fun getScore(): Int {

// logic here

return score

}

无结束符号

Java

int getScore(int value) {

// logic here

return 2 * value;

}

Kotlin

fun getScore(value: Int): Int {

// logic here

return 2 * value

}

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

}

}

}

// other way is also there

object Utils {

fun getScore(value: Int): Int {

return 2 * value

}

}

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;

}

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

Developer developer = (Developer) o;

if (age != developer.age) return false;

return name != null ? name.equals(developer.name) : developer.name == null;

}

@Override

public int hashCode() {

int result = name != null ? name.hashCode() : 0;

result = 31 * result + age;

return result;

}

@Override

public String toString() {

return "Developer{" +

"name='" + name + '\'' +

", age=" + age +

'}';

}

}

Kotlin

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

Java

public class Utils {

private Utils() {

// This utility class is not publicly instantiable

}

public static int triple(int value) {

return 3 * value;

}

}

int result = Utils.triple(3);

Kotlin

fun Int.triple(): Int {

return this * 3

}

var result = 3.triple()

License

Copyright (C) 2017 MINDORKS NEXTGEN PRIVATE LIMITED

Licensed under the Apache License, Version 2.0 (the "License");

you may not use this file except in compliance with the License.

You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software

distributed under the License is distributed on an "AS IS" BASIS,

WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.

See the License for the specific language governing permissions and

limitations under the License.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值