今天就來稍微帶一下之前有一段時間接觸過的Kotlin語法進行Android Studio的學習開發,在帶一下最為基礎的幾個語法之前,我要先來說明位什麼要學Kotlin這個程式語言。
Kotlin是我接觸Android開發學習時就有聽過的一種語言,個人認為這是目前Android Studio開發者可能最為常用的一種開發語言,許多有關Android的套件的教學都是以Kotlin為主進行的,這導致不會這個語言基礎在學習的路上會到處碰壁。
一些常見的N大型態,如:Int、String、Boolean、Char、Float、Double...的這邊就不再多做介紹了。
現在就讓我們開始Kotlin的基礎語法、常見的判斷式、迴圈、陣列使用以及一些更進階用法。
這兩個是kotlin中最基本的變數型態var
是可以變更當中的參數,而val
則是無法變更當中的參數。
上方這個就是因為 tag1 是設定成val
型態,所以無法再透過後面進行覆蓋。
而 tag2 是設定為var
型態,所以能在之後的程式碼中利用覆蓋的方式蓋過原來的數值。
var 變數名稱 : 型態 = 參數
的方式 var name = "Kotlin"
var year = 2023
// 透過 變數名稱::class.simpleName的方式就能知道型態是甚麼了。
Log.e(TAG, "name的型態為:"+name::class.simpleName+"\nyear的型態為:"+year::class.simpleName)
// if-else if-else 的使用方式
val result1 = if (name.equals("Kotlin")) {
"This is Kotlin"
} else if (name.equals("Java")) {
"This is Java"
} else {
"This is other language"
}
// 若判斷的東西是較少的就能使用以下的if-else來縮減程式碼長度。
// val result1 = if (name.equals("Kotlin")) "This is Kotlin" else "This is Java"
Log.e(TAG, "result1:"+result1)
// when 的使用方式
val result2 = when (name) {
"Kotlin" -> "This is Kotlin"
"Java" -> "This is Java"
else -> "This is other language"
}
Log.e(TAG, "result3:"+result2)
// for-loop 的使用方式
for (i in 1..5) {
Log.e(TAG, "i:"+i)
}
// 若需要後續新增陣列長度,則前面的型態必須為var,不然會無法增加。
var array = arrayOf("Kotlin", "Java", "Python")
// 使用plus的方式加入字串
array = array.plus("C++")
// 若有另一個陣列,並且想要加入原來的陣列中,可以使用以下的方法
val index :Array<String> = arrayOf("C", "C++", "C#", "JavaScript")
array = array.plus(index)
// 使用for迴圈遍歷陣列的內容
for (i in array.indices) {
Log.e(TAG, "array["+i+"]:"+array[i])
}
什麼是權限修飾符?
就是我們在寫java時前面所加入的private
、public
這類指定這個變數是否能夠在外部直接存取的變數就是權限修飾符
在Kotlin中也有這類的標示。
修飾符 | private | protected | internal | public |
---|---|---|---|---|
可在相同類別中存取 | Yes | Yes | Yes | Yes |
可在子類別中存取 | No | Yes | Yes | Yes |
可在相同模組中存取 | No | No | Yes | Yes |
可在模組外存取 | No | No | No | Yes |
由於private
和public
是非常常見的用法,這邊只展示protected
和internal
在個別Class中的獲取。
open class Name {
private var name01: String = "Kotlin"
protected var name02: String = "Java"
internal var name03: String = "Kotlin"
public var name04: String = "Java"
// get name01
@JvmName("getName01_")
fun getName01(): String {
return name01
}
@JvmName("getName02")
fun getName02(): String {
return name02
}
@JvmName("getName03")
fun getName03(): String {
return name03
}
// get name02
@JvmName("getName04_")
fun getName04(): String {
return name04
}
fun setName01(name: String) {
this.name01 = name
}
}
class NameSub: Name() {
// 在Name類別中的protected
var Name = name02
// 並且包含了internal和public
@JvmName("getName")
fun getName(): String {
return Name
}
}
var nameClass = Name()
讓Name的類別import到MainActivity
並賦予變數名稱nameClass。// 在Name類別中的internal
nameClass.name03 = "Kotlin"
// 在Name類別中的public
nameClass.name04 = "Java"
private
以外的變數。internal
和public
變數function
寫法,撰寫的格式如下:// 這個也能適用在getter & setter
// getter
fun 方法的名稱(): 方法的型態 {
return 回傳值
}
// setter
fun 方法的名稱(傳入的變數: 傳入的指定型態) {
this.本地變數 = 傳入變數
}
撰寫了一年多的Android project,這段期間不免俗會用到constructor(建構元/建構子)的建立,這邊就稍微提一下怎麼在kotlin建立constructor。
這邊我建立了一個bmi類別,並使用Constructor傳入數值
class calculate(var weight:Int , var height:Int) {
// bmi calculate formula
fun bmi(): Float {
if (height <= 0) {
throw IllegalArgumentException("Height must be greater than zero.")
}
val heightInMeters = height.toFloat() / 100 // 轉換身高為米並轉換為浮點數
val bmi = weight.toFloat() / (heightInMeters * heightInMeters)
return bmi
}
}
class "類別名稱"(變數01,變數02,...){
// 建立一些方法來使用這些傳入的變數
}
在昨天的DataBinding中就有用到這個方法。
public class UserInfoModel {
// 省略變數建立
// 這個就是Java中的建構元建立。
public UserInfoModel(String name,String password) {
this.name = name;
this.password = password;
}
// getter & setter 省略
}
對比Java來說,Kotlin建立建構元時省略了很多變數的建立。
今天零零總總彙整了一些基本的型態、判斷式、for迴圈,後面又總結了幾個知識點:函數的建立、建構元/建構子的建立還有權限修飾符的詳細說明。
因為感覺有些雜亂所以建立了目錄標籤,方便指引到想看的地方。