本篇文章主要對比Java跟Kotlin的基本語法在寫法上的區別。不管學習何種語言,學習它的基本語法都是第一步。html
1、分號;
2、定義變量、常量
3、字符串模板與字符串面值
4、自動類型轉換
5、定義函數
6、註釋
7、控制流
8、集合java
在Java中,使用分號;
標誌一句完整代碼的結束。 在Kotlin中,一句代碼結束後不用添加分好。數組
Java定義變量時把數據類型放在前面,變量名放在後面。bash
int a = 1;
int b;
b = 2;
複製代碼
Kotlin用var
定義變量,把數據類型放在後面,並用冒號:
隔開。微信
var a: Int = 1
var b: Int
b = 2
複製代碼
Java用final
定義常量,把final
放在數據類型前面。函數
final int a = 1;
final int b;
b = 2;
複製代碼
Kotlin用val
定義常量,把數據類型放在後面,並用冒號:
隔開。post
val a: Int = 1
val b: Int
b = 2
複製代碼
1.字符串模板 在Kotlin中,字符串能夠包含模板表達式 ,即一些小段代碼,會求值並把結果合併到字符串中。 模板表達式以美圓符($)開頭,由一個簡單的名字構成,如:學習
var a: String = "a"
var b: String = "b"
var c: String = "$a$b"
複製代碼
上面幾行代碼在Java中就等於ui
String a = "a";
String b = "b"
String c = a + b
複製代碼
2.字符串字面值 Kotlin有兩種字符串面值,轉義字符串和原生字符串。this
var a: String = "a"
var b: String = "b"
Toast.makeText(this, "$a\n$b", Toast.LENGTH_SHORT).show()
複製代碼
運行代碼:
var a: String = "a"
var b: String = "b"
var c: String = """ $a $b """
Toast.makeText(this, c, Toast.LENGTH_SHORT).show()
複製代碼
運行代碼:
能夠看到前面有一段空格,這個時候能夠經過trimMargin() 函數去除前導空格:
var a: String = "a"
var b: String = "b"
var c: String = """ |$a $b """.trimMargin()
Toast.makeText(this, c, Toast.LENGTH_SHORT).show()
複製代碼
運行代碼:
如上面例子所示,在須要去掉前導空格的那一行前面加上豎槓"|",再調用trimMargin()方法,就能夠去掉前導空格。
Kotlin在定義變量或者常量時給他賦值,能夠不指定他的類型,如:
var a = "aaa" //這裏的a是String類型
val b = 1 //這裏的b是Int類型
複製代碼
Java定義無返回值無參數方法,返回類型是void
void abc() {}
複製代碼
Kotlin定義無返回值無參數函數,返回Unit
fun abc(): Unit{}
複製代碼
也能夠什麼都不返回
fun abc(){}
複製代碼
能夠看到Kotlin返回值的類型在函數末尾指定,並用冒號:
分隔。
Java定義無返回值有參數方法,返回類型是void
void abc(String str) {}
複製代碼
Kotlin定義無返回值有參數函數,返回Unit(或不返回)
fun abc(str: String) {}
複製代碼
括號裏的參數跟定義變量常量同樣,先指定參數名,再指定參數類型,並用冒號:
分隔。
Java定義有返回值有參數方法,返回類型是String
String abc(String str) {
return "";
}
複製代碼
Kotlin定義有返回值有參數函數,返回類型是String
fun abc(str: String): String {
return ""
}
複製代碼
返回值的類型在函數末尾指定,並用冒號":"分隔。
單行註釋 Java跟Kotlin同樣 //單行註釋
多行的塊註釋
Java跟Kotlin均可以這樣
/* 這是一個多行的
塊註釋。 */
複製代碼
Kotlin塊註釋支持嵌套,代碼以下:
/*
這是一個多行的
塊註釋。
/*再嵌套一個
塊註釋 */
*/
複製代碼
而Java不支持塊註釋嵌套
Kotlin和Java中的條件語句用法大體相同,其中不一樣的是Kotlin中的if語句自己就是表達式,有返回值,相似於Java的三元表達式,以下所示: Java三元表達式
c = a > b ? 3 : 4;//若是a>b,c=3,不然c=4
複製代碼
對應的Kotlin中的if表達式
var c = if (a > b) 3 else 4
複製代碼
若是 if 或 else 後面是代碼塊的話
var c = if (a > b) {
3
} else {
4
}
複製代碼
Kotlin中沒有Java的switch語句,取而代之的是更強大的when語句,以下所示: Java中的switch語句
int a = 0;
switch (a) {
case 0:
break;
case 1:
break;
default:
break;
}
複製代碼
Kotlin中對應的when語句
var a = 0
when (a) {
0 -> {}
1 -> {}
else -> {}
}
複製代碼
注意:when語句在知足條件的分支執行後,會終止when語句執行,因此不用像switch語句那樣每個case都加上break。 若是不少分支須要用相同的方式處理,when語句能夠把多個分支條件放在一塊兒,用逗號,
分隔,以下所示:
var a = 0
when (a) {
0 -> {}
1,2 -> {//若是a=1或a=2,執行該代碼塊}
else -> {}
}
複製代碼
when語句還能像if語句那樣做爲表達式:
var a = 1
var b = when (a) {
0 -> 0 //若是a=0,則b=0
1 -> 1 //若是a=1,則b=1
else -> 2 //若是a=其餘,則b=2
}
複製代碼
當咱們要判斷5是否在1-10裏面,在Java中能夠這麼寫
int a = 5;
for (int i = 0; i < 10; i++) {
if (i == a) {
return true;
} else {
return false;
}
}
複製代碼
若是一樣的判斷用Kotlin來寫,能夠用關鍵字in
來判斷
if (5 in 1..10){//1..10表明1-10的意思
return true
}else{
return false
}
複製代碼
在Kotlin中能夠用關鍵字is
判斷對象的類型,以下所示:
fun hasPrefix(x: Any) = when(x) {//kotlin中全部類都有一個共同的父類: Any
is String -> {//若是x是String類型,執行該代碼塊}
is Int -> {//若是x是Int類型,執行該代碼塊}
else -> false
}
複製代碼
注意上面出現了Any
,Any
是Kotlin中全部類都有一個共同的父類,有點像Java中的Object
,但這個類不是java.lang.Object,這個類只有equals()、 hashCode()、toString()方法。
若是你想要經過索引遍歷一個數組或者一個list,可使用for循環,以下所示: Java代碼
for (int i = 0; i < array.size(); i++) {
System.out.println(i);
}
複製代碼
Kotlin代碼
for (i in array.indices) {
println(array[i])
}
複製代碼
除了普通的用法以外,Kotlin的for循環還能夠這樣:
for ((index, value) in array.withIndex()) {
println("the element at $index is $value")
//index是索引,value是值
}
複製代碼
Java跟Kotlin的while循環是同樣的,分爲while和do...while:
var i = 0
while(i++ < 10){
}
do{
}while(i++<10){
}
複製代碼
Java中的List,Set,Map:
List<Integer> integers = new ArrayList<>();
integers.add(1);
integers.add(2);
integers.add(3);
integers.remove(1);
integers.get(2);
integers.clear();
Map<String, Integer> map = new HashMap<>();
map.put("1", 1);
map.put("2", 2);
map.put("3", 3);
map.remove("1");
map.get("2");
map.clear();
Set<Integer> set = new HashSet<>();
set.add(1);
set.add(2);
set.add(3);
set.remove(1);
set.contains(2);
set.clear();
複製代碼
Kotlin也有List,Set,Map,但Kotlin中的List,Set,Map都是不可修改的
下面介紹一些Kotlin經常使用建立集合對象的函數: listOf:用於建立List對象
var list: List<Int> = listOf<Int>()
複製代碼
setOf:用於建立Set對象
var set: Set<Int> = setOf<Int>()
複製代碼
mapOf:用於建立Map對象
var map: Map<String, Int> = mapOf<String, Int>()
複製代碼
mutableListOf:用於建立MutableListOf對象
var mutableList: MutableList<Int> = mutableListOf()
mutableList.add(1)
mutableList.add(2)
mutableList.add(3)
mutableList.remove(1)
mutableList.get(2)
mutableList.clear()
複製代碼
mutableSetOf:用於建立MutableSetOf對象
var mutableSet: MutableSet<Int> = mutableSetOf()
mutableSet.add(1)
mutableSet.add(2)
mutableSet.add(3)
mutableSet.remove(1)
mutableSet.contains(2)
mutableSet.clear()
複製代碼
mutableMapOf:用於建立MutableMapOf對象
var mutableMap: MutableMap<String, Int> = mutableMapOf()
mutableMap.put("1", 1)
mutableMap.put("2", 2)
mutableMap.put("3", 3)
mutableMap.remove("1")
mutableMap.get("2")
mutableMap.clear()
複製代碼
本篇文章主要對比了Java跟Kotlin的基本語法在寫法上的區別。會了基本語法,就等於踏出了從Java轉到Kotlin的第一步。
參考文獻:
Kotlin語言中文站、《Kotlin程序開發入門精要》
推薦閱讀:
從Java到Kotlin(一)爲何使用Kotlin
從Java到Kotlin(二)基本語法
從Java到Kotlin(三)類和接口
從Java到Kotlin(四)對象與泛型
從Java到Kotlin(五)函數與Lambda表達式
從Java到Kotlin(六)擴展與委託
從Java到Kotlin(七)反射和註解
從Java到Kotlin(八)Kotlin的其餘技術
Kotlin學習資料總彙
更多精彩文章請掃描下方二維碼關注微信公衆號"AndroidCzh":這裏將長期爲您分享原創文章、Android開發經驗等! QQ交流羣: 705929135