--- tags: Kotlin Android --- # Android Studio 環境安裝 & Kotlin 基本語法 ## Android Studio 環境安裝 ### [共筆](https://hackmd.io/3fbONUOPQieRU8DyZ9LkPQ) ### [YouTube](https://youtu.be/SkTAEJaqvAQ) --- ### 1.安裝 JDK [JDK Downloads](https://www.oracle.com/tw/java/technologies/javase-jdk15-downloads.html) ![](https://i.imgur.com/en1evL0.png) --- ### 2.安裝 Android Studio [Android Studio Downloads](https://developer.android.com/studio/index.html) ![](https://i.imgur.com/2AQaStJ.png) 一樣一直 next 就安裝完啦 ## Kotlin 基本語法 Kotlin 將函式視為第一等級,和類別 `class` 同等地位,因此 `main()`函式不需要寫在任何類別之中,這點和 Java 非常不同 [Kotlin Playground](https://play.kotlinlang.org/) ```kotlin= fun main(){ print("Hello world") } ``` ### 變數 - `var` 可變變數 ( mutable ) - `val` 唯讀變數 ( immutable ) ```kotlin= val a: Int = 1 val b = 1 // 系統自動判斷 val c: Int // 如果不在宣告時初始化則必須提供變量類型 c = 1 // 明確賦值 var x = 5 // 系統自動判斷 x += 1 // 值可修改 var str = "Number is ${x}"//可以將變數包進字串 var i: Int? // i值可以為空 (null) ``` >**數字型別** >```kotlin= >Type Bit width >Double 64 >Float 32 >Long 64 >Int 32 >Short 16 >Byte 8 >``` >**也可以用後綴字來控制型別** >>10 進制的整數寫法:`123` 如果要表示為 Long 型別:`123L` 16 進制的寫法:`0x0F` 2 進制的寫法:`0b00001011` Kotlin 不支援 8 進制的寫法 Kotlin 的小數預設使用雙精確度浮點數 Double:`123.5` `123.5e10` 要強制使用單精確度浮點數 Float,可以在數字尾部加上大寫 F 或小寫 f:`123.5F` 或 `123.5f` 可以使用底線 _ 表示法讓數字更易閱讀:`1_000_000` 表示 100 萬 ```kotlin= // 轉換類型 val int = uint.toInt() val byte = ubyte.toByte() val ulong2 = byte.toULong() // 支持操作符號 val x = 20u + 22u val y = "128".toUByte() val range = 1u..5u val i = 2u shl 8// << val j = 2u shr 8// >> ``` 區間 * `..`:用於遞增,寫法如「`1..5`」,順序為1、2、3、4、5。 * `downTo`:用於遞減,寫法如「`5 downTo 1`」,順序為5、4、3、2、1。 * `until`:用於遞增,寫法如「`1 until 5`」,順序為1、2、3、4。 * `step`:搭配以上語法,可以改變遞增減的量。寫法如「`1..5 step 2`」,順序為1、3、5。 ### 判斷式 ```kotlin= if ... else var k = 10 var i = if(k==10) 100 else 0 var range = 1..10 var i = 5 var k = if(i in range) 100 else 0 when // switch val str = "Hello" when(str){ "Hello"->var i = 111 "HI" ->var i = 222 else var i = 333 }// 也可以像上面一樣直接賦值 Elvis Operator var str :String? = "1234" var i = str ?: 0//判斷是否為空值 ``` ### 迴圈 ```kotlin= var range = 1..5 for(i in range){ println(i) } while(i<10){ print(i++) } var sum = 0 mulit@ for( i in 1..9){ println("第${i}層") for( j in 1..9){ sum+=i+j if(sum>100){ println(sum) break@mulit//標籤 } } } ``` ### 陣列 ```kotlin= var arr = Array(5, {i->i}) var arr1 = arrayOf<Int>(1,2,4,5,6)//直接賦值 var arr2 = arrayOfNulls<Int>(5)//已知大小填入空值 for (i in arr.indices) { println(arr[i]) } for (i in 0..arr.size-1){ println(arr[i]) } for (i in arr.withIndex()) { println("idx: ${i.index}, value: ${i.value}") } ``` [回饋表單](https://docs.google.com/forms/d/e/1FAIpQLScjFpaIlFqin0exklp3_F42wb2Gkt9dmM01Ac-dBu7PX9ShVg/viewform) ![](https://i.imgur.com/tQ6uBjy.png)