1. 程式人生 > >Kotlin學習筆記(二):Kotlin與Java對比

Kotlin學習筆記(二):Kotlin與Java對比

本篇文章我們將通過類比Java語法的方式學習Kotlin的基本語法和常用操作

基本型別

Java Kotlin 位寬
double Double 64
float Float 32
long Long 64
int Int 32
short Short 16
byte Byte 8

注: char在Kotlin不是基本資料型別,是獨立的資料型別

String字串表示

  • Java
String name = "Java";
String sex = "Man"
; String link = "name is :" + name + ",sex is:" + sex;
  • Kotlin

字串可以包含模板表示式,即可求值的程式碼片段,並將其結果連線到字串中。一個模板表示式由一個 $ 開始幷包含另一個簡單的名稱

val name = "Kotlin"
val sex = "man"
val link = "name is $name,sex is: $sex"

列印操作

  • Java
System.out.print("Java");
System.out.println("Java");
  • Kotlin
print("Kotlin"
)
println("Kotlin")

換行操作

  • Java
String text = "第一行\n第二行\n第三行\n";
  • Kotlin

有兩種型別的字串字面量:

  1. 一種是可以帶分割符的。跟Java一樣
  2. 一種是不可以包含分割符但可以包含其它字元。 由三個引號包裹(“”“)
val text1 = "第一行\n第二行\n第三行\n"val text = """
|第一行
|第二行
|第三行
""".trimMargin()   //去除空格

常量和變數定義

  • Java
final String s = "Java";
String name = "Java"
; int num = 5;
  • Kotlin

var 宣告變數
val 宣告常量

val s = "Java"
var name = "Kotlin"
var num = 5

宣告靜態常量、方法

  • Java
static final String NAME = "name";
static final int SEX = 0;

static void Test() { }
  • Kotlin

宣告靜態常量或者方法時,都是使用如下方式宣告

companion object {
    internal val NAME = "name"
    internal val SEX = 0

    fun Test() { }
}

條件表示式

if語句

  • Java
if( a == b){}
if( a>=0 && a <=10){}
if( a>0 && a <10){}
  • Kotlin
if( a== b){}
if( a in 0..10){}        // 也可以按照Java寫法 if( a>=0 && a <=10){}
if(a in 1 until 10)      //也可以按照Java寫法 if( a>0 && a <10){}

三元運算子

  • Java
int num = a > b ? a :b;
  • Kotlin
val num = if (a > b) a else b

case表達

  • Java
String s;
switch(a){
    case 0:
        s =  "a = 0";
        break;
    case 1:
        s = "a = 1";
        break;
    default:
        s = "default";
        break;
}
  • Kotlin
val s = when(a){
    0 -> "a = 0"
    1 -> "a = 1"
    else -> "default"
}

for迴圈迭代操作

  • Java
for(int i = 0; i <= 10; i++){}

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

for(int i = 10; i < 0; i--){}

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

for(int i = 10; i < 0; i-=2){}

for (String s : listString) {}

for (Map.Entry<String, String> entry: map.entrySet()) {}
  • Kotlin

在下面使用的操作使用倒了Kotlin自帶的Ranges使用

  1. in 指定範圍
  2. until 不包含
  3. downto 倒序
  4. step 指定步數跳躍
for(i in 0.. 10){}

for(i in 0 until 10){}

for(i in 10 downTo 0){}

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

for(i in 10 downTo 0 step 2){}

for(item in listString){}

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

集合操作

  • Java
List<String> listString = Arrays.asList("a","b","c");
listString.add("d");

Map<String,String> map = new HashMap<>();
map.put("a","1");
map.put("b","2");
map.put("c","3");
  • Kotlin
var listString = listOf("a","b","c")
listString.add("d")

var map = mapOf("a" to "1",
               "b" to "2",
               "c" to "3")

遍歷集合和篩選操作

  • Java
for (String s : listString){
     System.out.println(s);
}

//篩選
for (String s: listString){
    if(s.equals("a")){
        System.out.println(s);
    }
}
  • Kotlin
listString.forEach {
    println(it)
}

//篩選
listString.filter{ it.equals ("a") }
        .forEach{
            println(it)
        }

宣告方法

  • 不帶返回值方法

    • Java
    void Test(){ }
    
    void Test(int a, String b){ }
    • Kotlin
    fun Test(){}
    
    fun Test(a : Int, b : String) { }
  • 帶返回值方法

    • Java
    int Test() { return 0;}
    
    int Test(int a, int b){
        if(a > b){
            return a;
        }
        return b;
    }
    • Kotlin
    fun Test() :Int { return 0}
    
    fun Test(a :Int, b :Int) :Int{
        if( a > b ){
        }
        return b
    }
    

構造方法

  • Java
class Test{
    public Test(){ }
    public Test(int a, int b){ }
}
  • Kotlin
class Test {
    constructor() {}
    constructor(a: Int, b: Int) {}
}

或者這樣寫

class Test constructor(){   //constructor 可省略
    constructor(a: Int, b: Int) : this() {}
}

生成get跟set方法

  • Java
class Test{
    String a;
    int b;

    public Test(String a, int b){
        this.a = a;
        this.b = b;
    }

    public String getA() {
        return a;
    }

    public void setA(String a) {
        this.a = a;
    }

    public int getB() {
        return b;
    }

    public void setB(int b) {
        this.b = b;
    }

}
  • Kotlin

只需一行程式碼

data class Test(val a: String, val b: Int){ }

看完上面的文章,我們可以發現Kotlin語法比Java更加的直觀和便捷,但是還是需要一段時間來適應Kotlin的語法習慣。