Kotlin @ Pronto
Tags: android, kotlin, kotlinthailand, ookbee
Published: 2019-09-10 07:22:21

---
title: Kotlin @ Pronto
published: true
tags: android,kotlin,kotlin-thailand,ookbee
canonical_url: 
---

มาเล่าอีกแล้ว รอบนี้ เราไปงาน Workshop Kotlin มา งานนี้ Ookbee เป็น sponsor ใหญ่ญ่ญ่ญ่ ได้ยินเค้าบอกว่าเป็นระดับ gold diamon ฟังๆแล้วอย่างกะขายตรงมาหา downline อ่านแล้วทำเสียงกล้องในหัวด้วยนะ จริงๆวันนี้น้องที่ออฟฟิศสองคนต้องมา แต่โดนเท T.T น้อยใจ คนนึงป่วยอีกคนติดธุร เราติดธุระตอนเช้า กว่าจะไปถึงถนนรัชดาเส้นที่เลี้ยวสายปิดอ้อมแล้วอ้อมอีก บ่นอีกและ skip… เรา เริ่มเลยดีกว่า assume ว่าทุกคนอ่านโปรแกรมเป็นกันหมดแล้วละกัน ใครเขียนไม่เป็นอ่านไปก็ไม่รู้เรื่องเราแนะนำกดปิดไปเลย feature เผือกทำงานไถลลงไปอ่านต่อได้เลยฮะ

#### Session 1 : Air from Agoda

เรามาถึงก็ใกล้จบ session แล้วแต่แอบกลับไปอ่านใน Slide ให้

> เริ่มจากการประกาศตัวแปร **var/val**

Java ​Syntax เวลาเราจะสร้างตัวแปรไว้เก็บค่าสักตัวก็จะเขียนประมาณนี้ใช่มะ

```
private String name = “Hello World”;

Love people = new Love();
```

จากนี้ไม่ต้องประกาศให้มันยุ่งยากแล้วหรือเราจะบอก type อยู่ก็ได้

```
var name: String = “Hello World”

var name = “HelloWorld”

var people = Love()
```

จบนะวิธีประกาศตัวแปรสั้นๆง่ายๆ เดี๋ยวยัง.. มีเพิ่มเติม ถ้าอยากให้มันแก้ไขไม่ได้ของ Java เราจะใช้ final ใช่มะเพื่อทำให้มันเป็น immutable

```
final String name = “Hello World”;
```

เราจะแก้ไข name เป็นอย่างอื่นไม่ได้ Kotlin ใช้

```
val name : String = “Hello World”;
```

> lateinit ตรงตัวใส่ข้อมูลที่หลัง

class TestNaja{

var person : Person

}

พังแน่นอนข้อดีของ Kotlin คือเราจะดีลกับ Null PointerException ที่น้อยลง

แก้โดยการใช้ lateinit

```
class TestNaja{

lateinit var person : Person

@SetUp fun setup(){

person = Person()

}

}
```

ในส่วนนี้เราไม่รู้ทำไม Setup ถึงหน้าไม่เจอใน ide เรา

> ​lazy not easy

ยังไม่เข้าใจ concept เท่าไหร่ แต่เท่าที่อ่านที่ฟังมา หมายถึงฟังถ้ายังไม่มีการเรียกใช้มันจะไม่ทำงานเค้ายกตัวอย่างแบบนี้

```
class Test{

val database by lazy { Database()

}

fun saveToDatabase(name: Person) { database.save(name)

……

}

}
```

คือ database จะไม่ถูก create จนกว่าจะมีการเรียก saveToDatabase

> Nullable type null ได้ ข้ามไม่ได้

อย่างที่บอก Kotlin ค่อยเตือนเรื่อง null ให้เราเสมอแต่ถ้าเราอยากจะเล่นกับ null เราสามารถใส่เครื่องหมาย ? หรือเรียกว่าเครื่องหมายเอลวิสก็ได้ ให้ตัวแปรนั้นได้ เช่น

```
var x: String = “Hello”
```

x = null \< compiler จะไม่ยอมให้ค่านี้เป็น null เด็ดขาด เราเลยต้องแก้ใส่ ? ให้มัน

```
var x: String? = “Hello”
```

#### Session 2 : Dew from Yesmom

เข้ามาสอนแปลง code จาก java มาเป็น Kotlin รู้สึกชอบนะการอธิบายดูซอฟดี

เริ่มมาเค้าให้ clone project ลงมาก่อนซึ่งใน project จะแบ่งเป็น 2 Activity หลัก เป็นหน้า List ของข้อมูล ส่วนอีกหน้าเป็น Detail ของข้อมูลนั้นๆ

ต่อมาก็สอนวิธีแปลง class จาก java ไป Kotlin หลังจากนั้นก็อธิบายถึง Kotline REPL เป็น short cut ไว้เขียน test program สั้นๆ ดีจังไม่ต้องไปนั่งสร้าง class test ละ เสร็จเค้าก็เล่า List vs Mutable ซึ่ง list ธรรดามาจะแก้ไขอะไรไม่ได้ แต่ถ้าเป็น mutable list เราจะสามารถแก้ไขข้อมูลได้

function ลอยๆไม่ต้องคอยใคร ข้อดีของ Kotlin อีกอย่างคือเราสามารถสร้าง function นอก class ได้ ก็คือพิมพ์ขึ้นมาลอยๆได้เลย!!

แล้วก็สอน Apply กับ Lambda ต่อ

Apply function เอาไว้แก้ไขการเรียก ชื่อ object ซ้ำกันยกตัวอย่างให้ดู

เช่นถ้าเราจะเขียนว่า

```
TextView textView = new TextView(context);

textView.setText(“Hello”);

textView.setColor(Color.RED);

textView.setTextSize(18);
```

เขียนอะไรยืดยาวอะไรเถือกนี้ เรามาแก้เป็น Kotlin ดีกว่าโดย

```
var textView = TextView(context)

textView.apply{

setText(“Hello”)

setColor(Color.RED)

setTextSize(18)

}
```

แหนะสั้นลงมั้ยหละ ก็คือบอก object นั้น .apply ได้เลยหลังจากนั้นใน block {…} จะมี textView. ให้แบบเรามองไม่เห็นอยู่หรือเรียกอีกอย่างว่าด้านใน block จะก้าวถึงตัว object นี้ทั้งหมด

ต่อมา Lambda หน้าตาแบบนี้ -\> เหมือน java 8 เด๊ะเลย มันสามารถสร้าง anonymus funciton ได้

#### Session 3 : POP from Shopspot , Ju from Agoda

session นี้เค้าพูดเร็วไปบวกกับเราหาที่ clone โปรเจ็คไม่ได้เลยนั่งฟังเอาอย่างเดียว

ในแง่ของ block ที่ให้อ้างอิงถึงตัวแปรสั้นๆแบบ apply จริงๆมันจะมีอีกสามแบบ

Apply,Also,With

โดนที่วิธีเรียกต่างกันนิดหน่อยคือ

Also ใช้ it แทนตัว object เช่น

```
var textView : TextView(context)

textView.also{

it.setText(“Hello”)

}
```

with โยนตัวที่จะอ้างถึงให้มัน

```
with(textView){

it.setText(“Hello”)

}
```

ต่อมาเค้าก็ให้ทำ แก้โจทย์ที่เค้าสร้างไว้ เราไม่มี code เลยนั่งดูอย่างเดียว

#### Session 4 : Christopher Ng at Genxas

มาเล่าถึง ว่า Kotlin มันแปลงได้หลายภาษา แล้วก็เอา code มารันใส่ IOS ให้ดู!!!

อันที่จริง Syntax ของ Kotlin ก็ใกล้เคียง IOS เอามากๆอยู่นะ อนาคตเราคงเขียน Kotlin รันมัน 2 platform เลยแต่ที่แน่ๆจากที่เห็นเค้าทำเราอาจจะเอา logic ของฝั่ง ios มาใช้บน androidได้แหละฮีๆ

ต่อมาเค้าก็เล่าถึง Kolin บน java script

ในความเห็นส่วนตัวเราว่า ยังไงถ้าทำฝั่งเวปน่าจะเสร็จ C# ของ microsoft เราเลยรู้เฉยๆ แต่ที่ชอบคือ รันใส่ IOS เนี่ยแหละ 5555

จบจำได้แค่นี้ แต่ที่ดูอนาคต kotlin น่าจะแทนที่ java ของ android แน่ๆเตรียมตัวกันไว้ก็ดี