《From Java To Kotlin》从Java到Kotlin·译

从Java到Kotlin

英文原文:https://github.com/MindorksOpenSource/from-java-to-kotlin

我的个人看法

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

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

打印日志

  • Java
1
2
System.out.print("Amit Shekhar");
System.out.println("Amit Shekhar");
  • Kotlin
1
2
print("Amit Shekhar")
println("Amit Shekhar")

常量与变量

  • Java
1
2
String name = "Amit Shekhar";
final String name = "Amit Shekhar";
  • Kotlin
1
2
var name = "Amit Shekhar"
val name = "Amit Shekhar"

null声明

  • Java
1
2
3
final String name = null;
String otherName;
otherName = null;
  • Kotlin
1
2
3
val name : String? = null
var otherName : String?
otherName = null

空判断

  • Java
1
2
3
if(text != null){
  int length = text.length();
}
  • Kotlin
1
val length = text?.length

字符串拼接

  • Java
1
2
3
String firstName = "Amit";
String lastName = "Shekhar";
String message = "My name is: " + firstName + " " + lastName;
  • Kotlin
1
2
3
val firstName = "Amit"
val lastName = "Shekhar"
val message = "My name is: $firstName $lastName"

换行

  • Java
1
2
3
String text = "First Line\n" +
              "Second Line\n" +
              "Third Line";
  • Kotlin
1
2
3
4
5
val text = """
        |First Line
        |Second Line
        |Third Line
        """.trimMargin()

三元表达式

  • Java
1
String text = x > 5 ? "x > 5" : "x <= 5";
  • Kotlin
1
2
3
val text = if (x > 5)
              "x > 5"
           else "x <= 5"

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

  • Java
1
2
3
if(object instanceof Car){
}
Car car = (Car) object;
  • Kotlin
1
2
3
if (object is Car) {
}
var car = object as Car

类型判断和转换 (隐式)

  • Java
1
2
3
if(object instanceof Car){
   Car car = (Car) object;
}
  • Kotlin
1
2
3
if (object is Car) {
   var car = object // smart casting
}

多重条件

  • Java
1
if(score >= 0 && score <= 300 ){}
  • Kotlin
1
if (score in 0..300) { }

更灵活的case语句

  • Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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
1
2
3
4
5
6
7
8
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
1
2
3
4
5
6
7
for (int i = 1; i <= 10 ; i++) { }

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

for (String item : collection) { }

for (Map.Entry<String, String> entry: map.entrySet()) { }
  • Kotlin
1
2
3
4
5
6
7
for (i in 1..10) { }

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

for (item in collection) {}

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

更方便的集合操作

  • Java
1
2
3
4
5
6
final List<Integer> listOfNumber = Arrays.asList(1, 2, 3, 4);

final Map<Integer, String> keyValue = new HashMap<Integer, String>();
map.put(1, "Amit");
map.put(2, "Ali");
map.put(3, "Mindorks");
  • Kotlin
1
2
3
4
val listOfNumber = listOf(1, 2, 3, 4)
val keyValue = mapOf(1 to "Amit",
                     2 to "Ali",
                     3 to "Mindorks")

遍历

  • Java
1
2
3
4
5
6
7
8
9
for (Car car : cars) {
  System.out.println(car.speed);
}

for (Car car : cars) {
  if(cars.speed > 100) {
    System.out.println(car.speed);
  }
}
  • Kotlin
1
2
3
4
5
6
cars.forEach {
    println(it.speed)
}

cars.filter  { it.speed > 100 }
      .forEach { println(it.speed)}

方法定义

  • Java
1
2
3
void doSomething() {
   // logic here
}
  • Kotlin
1
2
3
fun doSomething() {
   // logic here
}

带返回值的方法

  • Java
1
2
3
4
int getScore() {
   // logic here
   return score;
}
  • Kotlin
1
2
3
4
fun getScore(): Int {
   // logic here
   return score
}

无结束符号

  • Java
1
2
3
4
int getScore(int value) {
    // logic here
    return 2 * value;
}
  • Kotlin
1
2
3
4
fun getScore(value: Int): Int {
   // logic here
   return 2 * value
}

constructor 构造器

  • Java
1
2
3
4
5
6
7
8
9
10
11
public class Utils {

    private Utils()
      // This utility class is not publicly instantiable 
    }
    
    public static int getScore(int value) {
        return 2 * value;
    }
    
}
  • Kotlin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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
1
data class Developer(val name: String, val age: Int)
  • Java
1
2
3
4
5
6
7
8
9
10
11
12
13
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
1
2
3
4
5
fun Int.triple(): Int {
  return this * 3
}

var result = 3.triple()

License

1
2
3
4
5
6
7
8
9
10
11
12
13
   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.

原文:https://github.com/MindorksOpenSource/from-java-to-kotlin

随缘打赏!