从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
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.
原文:https://github.com/MindorksOpenSource/from-java-to-kotlin