---
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)

---
### 2.安裝 Android Studio
[Android Studio Downloads](https://developer.android.com/studio/index.html)

一樣一直 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)
