พื้นฐาน android - สรุปพื้นฐาน Kotlin สำหรับผู้เริ่มต้น ฉบับรวบรัด

สรุปพื้นฐานภาษา Kotlin ที่เราจะมาศึกษากันในบทความนี้

Variable declaration
 - Type inference
 - Null safety

Conditionals
- if , else if
- when

Functions
- Simplifying function declarations
- Anonymous functions
- Higher-order functions

Classes
 - Properties
 - Class functions and encapsulation



เริ่มต้นด้วย Variable declaration การประกาศตัวแปรแบบเบสิกที่สุด

val ใช้กับตัวแปรที่ไม่มีการเปลี่ยนแปลง เพราะตัวแปรประเภทนี้ไม่สามารถกำหนดค่าใหม่ๆให้มันได้
var สำหรับตัวแปรที่สามารถเปลี่ยนแปลงค่าได้

Example

val languageName: String = "Kotlin"

var count: Int = 10
count = 15



Type inference

Example :

val languageName = "Kotlin"
val upperCaseName = languageName.toUpperCase()
println(upperCaseName)

// แต่ถ้าเราใช้ Int operator function กับตัวแปรที่เป็น String จะไม่สามารถ Compile ได้เช่น

languageName.inc()


Null safety


val languageName: String = null
การประกาศตัวแปรแบบนี้จะไม่สามารถ compile ได้

ต้องใส่ ? เพิ่มเพื่อให้ตัวแปรนี้รองรับค่า null

val languageName: String? = null





Conditionals


if else

if (count == 42) {
    println("I have the answer.")
} else {
    println("The answer eludes me.")
}


else if 

if (count == 42) {
    println("I have the answer.")
} else if (count > 35) {
    println("The answer is close.")
} else {
    println("The answer eludes me.")
}

ถ้า count = 42 จะได้ output : I have the answer
ถ้า count = 43  จะได้ output : The answer is close.
ถ้า count = 10 จะได้ output : The answer eludes me.

(ด้านล่างจะไม่ใส่ output ให้แล้วนะ) - คนที่จะฝึกเขียนแนะนำ > https://play.kotlinlang.org


conditional expressions
กำหนดค่าตัวแปรได้เลยโดยไม่ต้องมี return

val answerString: String = if (count == 42) {
    "I have the answer."
} else if (count > 35) {
    "The answer is close."
} else {
    "The answer eludes me."
}


kotlin ไม่มี ternary operator , switch case
ให้ใช้ when expression แทน

when (number) {
"0" -> {
   code
}
"1" ->{
   code
}

Or

val answerString = when {
    count == 42 -> "I have the answer."
    count > 35 -> "The answer is close."
    else -> "The answer eludes me."
}




Functions


Simplifying function declarations

ฟังก์ชั่นแบบไม่มีการส่งตัวแปรเข้าไป และ return String

fun generateAnswerString(): String {
    val answerString = if (count == 42) {
        "I have the answer."
    } else {
        "The answer eludes me"
    }
    return answerString
}


ฟังก์ชั่นที่ส่งตัวแปรประเภท Int เข้าไปใช้งาน และ return String

fun generateAnswerString(countThreshold: Int): String {
    return if (count > countThreshold) {
        "I have the answer."
    } else {
        "The answer eludes me."
    }
}



Anonymous functions
ฟังก์ชั่นที่ไม่มีชื่อฟังก์ชั่น !!

ตัวอย่าง - ฟังก์ชั่น นับจำนวนคำ มีการรับค่าแบบ String และ Return เป็น Int

val stringLengthFunc: (String) -> Int = {
     input -> input.length
}

val stringLength: Int = stringLengthFunc("Android")
println(stringLength)   // output : 7



Higher-order functions
ฟังก์ชั่นที่สามารถใช้ฟังก์ชั่นอื่นเป็น argument อารมณ์จะคล้ายกับ callback interface ในภาษา Java.

example 1

fun getString(callback: (String) -> Unit) {
    val string: String = "My String"
    callback(string)
}

getString{
     println(it)
}


example 2

fun mylife(arg: String, func_name: (String) -> String): String {
    return func_name(arg)
}

val result = mylife("Coding") { "I Love $it." }
println(result)


Classes


คลาสใช้ฟังก์ชัน > เพื่อจำลองพฤติกรรม
ส่วนฟังก์ชั่น > คือความสามารถของคลาส
การควบคุมการเข้าถึง > เป็นส่วนหนึ่งของแนวคิดเชิงวัตถุขนาดใหญ่ เรียกว่า "Encapsulation"


Example : 

fun main() {
    val car = Car()  // สร้าง Object Car
    val result = car.unlockDoor("1234") // ส่งเรียกใช้ฟังก์ชั่นปลดล็อคประตู 
    println(result)  // return true เพราะ 1234 เป็นรหัสผ่านที่ถูกต้อง
}


class Car() {

    private val att1: String = "1"

    fun unlockDoor(password: String): Boolean {
        if(password== "1234"){
            return true
        }else{
            return false
        }
    }
}


ในตัวอย่างนี้ att1 เป็นคุณสมบัติถูกเก็บเป็นส่วนตัวจากสิ่งภายนอกคลาส Car
เรียกใช้ฟังก์ชั่น unlockDoor() ในการปลดล็อครถโดยส่งคีย์ 1234 เข้ามา
ภายในฟังก์ชั่นก็จำลองว่าถ้า key ที่ส่งเข้ามาคือ 1234 จะ return ture หมายถึงการปลดล็อครถสำเร็จ



ref :
https://developer.android.com/kotlin/learn
https://blacklenspub.com/easy-fp-with-kotlin-th-4aa0178482bd