มา meetup แรกของปีนี้ ที่งาน Kotlin Meetup 2019.1

Event Feb 28, 2019

เดี๋ยวนะเดี๋ยวนี้ไม่นับเป็น version ของ Kotlin แล้วใช่ไหมค่ะ 555

เรียกได้ว่าช่วงต้นปีไม่ได้ไปงานอะไรเลย เพราะไม่ค่อยมีจัดเท่าไหร่ในเดือนแรกของปี 2019 นี้ แล้วเริ่มมาจัดกันเดือนนี้นะ ซึ่งงานนี้กดบัตรตั้งแต่นาทีแรกๆเช่นเคย และพบว่าบัตรหมดในเวลาประมาณ 24 ชั่วโมงด้วยอ่ะ สุดจริง

สถานที่จัดงาน คือ Fastwork สามารถรองรับคนได้เยอะเลยแหละ แถมเดินทางสะดวกเพราะ Fastwork ตั้งอยู่บนตึก Emporium นั่นเอง ลง BTS พร้อมพงษ์ ไม่เผลอไผลกับร้านข้าวหน้าปลาไหลและราเมงฮัทแถวนั้นก็น่าจะมาถึงได้ไว 555555 //ว่าแต่ Fastwork อยู่ชั้นไหนนะ แล้วต้องแลกบัตรแม่ะ? มีโพสของ speaker บอกวิธีการเดินทางล่วยยยย

วันนี้มี Kotlin Meetup 2019.1 นะครับ ผมพูดเรื่อง composition over inheritance สไตล์ OOP มี pizza + soft drinks พร้อม...

Posted by Travis P Subannaphong on Wednesday, February 27, 2019

พอมาถึงก็หูอื้อเลย เพราะเป็นลิฟต์ชั้นสูงๆ 55555

เข้ามาก็หาอะไรทานหน่อยโน๊ะ ซึ่งพิซซ่าอร่อยมาก และมี soft drink ที่แอบเข้าใจว่าเป็นสวัสดิการของ Fastwork ด้วย

ปล้นรูป เอ้ยยย ขอรูปจาก speaker แปป อันนี้ขอมาลงแล้ว หน้าปลาอ่ะอร่อย หน้าอื่นก็อร่อย แถวนั้นพิซซ่าอร่อยๆเยอะมากๆเลย

และแล้วเวลา 1 ทุ่มโดยประมาณ ก็ได้เวลา เปิดงาน โดยพี่เบิร์ดเช่นเคยค่าาา

และมีช่วงแนะนำ Fastwork โดยคุณเฟิร์น Head of Talent ของ Fastwork ค่าาา (ชอบชื่อตำแหน่งมาก จริงๆก็คือ HR นั่นแหละจ้า)

ตอนนี้ Fastwork มีสาขาที่อินโดด้วย (รู้สึกว่า startup ในไทยหลายๆที่ไปขยายสาขาที่อินโดด้วย เช่น ฟังใจ) อยู่ใน series A และกำลัง rising สู่ A+ จ้า

Fastwork มีแบบ Enterprise ด้วยหล่ะ เผื่อใครสนใจ มีเปรียบเทียบว่าถูกและดีกว่า agency

สำหรับส่วน Engineering จะอยู่ใน HQ ที่ไทยแห่งนี้จ้า ซึ่งจุดที่น่าสนใจ คือ kotlin multiplatform, developer ที่นี่จะเขียน Swift และ Kotlin ได้ การทำ multiplatform เป็นการลด cost ในเรื่อง 2 code base เข้าด้วยกัน แต่ส่วน UI แยกกันทำตาม platform นะ


What is new in 1.3.20 by Verachad Wongsawangtham [Lead Mobile Engineer @ Fastwork]

เป็นเนื้อหาเบาๆ (ที่ควรเรากลับไปหาข้อมูลเพื่อเข้าใจเพิ่มเติม) สำหรับการ update version kotlin 1.3 ไปยัง 1.3.20 มี 3 หัวข้อหลักด้วยกัน

Improvement for Kotlin Gradle DSL

สำหรับใครที่ไม่รู้จัก Kotlin Gradle DSL สามารถดูคลิปนี้ได้จ้า

หลักๆเลย คือ support multiplatform project ให้มีความ flexible และ auto complete เนื่องจากเดิมที เวลาเราจะแก้พวก gradle ที่ไม่มี document โดยเฉพาะ มันช่างยุ่งยากเหลือเกิน และต้องมานั่งหาเองตาม stackoverflow ลองผิดลองถูกแล้วแต่บุญกรรมที่ทำมา

อ่านเพิ่มเติมได้ที่

https://kotlinlang.org/docs/reference/building-mpp-with-gradle.html

gradle/kotlin-dsl-samples
Samples builds using the Gradle Kotlin DSL. Contribute to gradle/kotlin-dsl-samples development by creating an account on GitHub.

Inline Class

ก่อนคือพูดถึง Inline Function กันก่อนน มันจะถูกแทนที่ด้วย content ของ function ใช่ม่ะ ส่วนเจ้า Inline Class ก็จะคล้ายๆกัน ซึ่งทุกครั้งที่สร้าง object ใหม่ขึ้นมา ทุกครั้งที่ใช้ก็จะถูกสร้างขึ้นเรื่อยๆ ก็จะเกิด overhead ทำให้ memory leak ได้

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

อันนี้อธิบายเรื่อง Inline Function ถ้าจำไม่ผิดนะ

fun Long.formatFileSize() : String {
    return ""
}

ตอนเอาไปใช้ก็จะเป็น

1234L.formatFileSize()

สุดท้ายเจ้า Inline Class เมื่อ decompile ออกมาเป็น byte code จะเป็น static method เรียก 2 ครั้งเหมือนกันแต่เป็น 2 ครั้งแรก จะไม่เรียกทุกครั้งที่เรียกใช้ object

ช่วง Code แอบ in the dark สีแดงมองไม่ชัดขออภัยด้วยจ้าาา ขยายรูปเอานะ
แต่ๆๆๆๆ มันไม่ compatible กับ Java นะ เพราะมันห้ามมี symbol ในชื่อ method และยังอยู่ใน experimental อยู่

อ่านเพิ่มเติมได้ที่

https://kotlinlang.org/docs/reference/inline-classes.html

Contract

สัญญาใจระหว่างเราและ compiler กับโค้ดที่เราเขียน และมี 2 type คือ ซึ่งจริงๆจด detail ไม่ทันเท่าไหร่ ฮืออออ ฟังอย่างตั้งใจแต่ลืมจด

ตอนใช้ใส่ @ExperimantalContracts ไว้หน้า method นะ

ถ้าไม่ใส่ จะเรียกใช้ไม่ได้ อาจจะแก้โดยการประกาศเป็น lateinit var

การใส่ contract จะบอก compiler ว่าถูกเรียกใช้สิ่งนี้ 1 ครั้งแน่นอนจากการ run ในครั้งนี้

อ่านเพิ่มเติมได้ที่

Kotlin/KEEP
Kotlin Evolution and Enhancement Process. Contribute to Kotlin/KEEP development by creating an account on GitHub.

สุดท้าย KEEP เปิด feature ที่เราอยากให้ Kotlin มี และสามารถอ่านทิศทางในการพัฒนาภาษา Kotlin ได้ที่นี่เลย

Kotlin/KEEP
Kotlin Evolution and Enhancement Process. Contribute to Kotlin/KEEP development by creating an account on GitHub.

แอบเพิ่มเติมนะ อันนี้ video ย้อนหลัง session แรกจากทางกูโค้ดค่าา


Composition over inheritance like a boss by Travis Subannaphong [Senior Android Software Engineer @ Fastwork]

มีการเปลี่ยนชื่อ session เล็กน้อย พร้อมบอกว่ายังไม่ได้พูดถึง functional ในตอนนี้นะเออ

ตอนแนะนำตัว มีขายของด้วย งั้นขายเลยแล้วกัน เป็น Co-Founder บล็อก Kotlin ที่ดีที่สุดในประเทศไทย นั่นคือออออ

Black Lens
Android Developers’ Journal.

ขายให้เขาทำไมหล่ะ คือเราเป็น writer ของที่นี่ด้วยง่ะ เอ้าาา ฝากร้านน

หลักจาก speaker ได้ฝากร้านกันไปแล้ว ใน session นี้จะกล่าวถึงการสร้าง hero class แต่ละตัว ซึ่งเป็นตัวละครใน โดต้า2 (กริบ) ดอทเอสอง (เฮ) ซึ่งบอกตามตรง เคยแต่ได้ยินชื่อเกมส์ (กา กา กา….)

Majority การเขียนโค้ดขึ้นอยู่กับ Inheritance

hero แต่ละตัวหลักๆก็จะมี move การเคลื่อนที่ และ attract การโจมตี ซึ่งแต่ละตัวจะมีคุณสมบัติไม่เหมือนกัน เช่น สองตัวนี้ Sven และ BloodSeeker จะเดินและตีใกล้เหมือนกัน

ส่วนคนนี้ Slardar เคลื่อนที่ด้วยการเลื้อย ก็ override move ไป

อีกตัว DrowRanger โจมตีไกล ก็ override attract ไป

ในเกมส์ยังมี hero อื่นๆอีก แล้วก็ override ไปเรื่อยๆๆๆ สุดท้าย duplicate duplicate duplicate

เปลี่ยนจาก Inheritance เป็น Composition

Composition เป็นการห่อแต่ละส่วนเป็น object แต่ละก้อน ดังนั้นจะมีการใช้ abstract class และเพิ่ม interface แล้วมา implement กัน อ่ะชีวิตดูง่ายขึ้นแล้ว

ต่อมาสร้าง hero แต่ละตัวจากการเอา object มา compose กัน คือ delegation เอางานให้คนอื่นทำ

ตัวโค้ดจะเป็นการ reuse แต่ๆๆๆๆก็ยังมีความ duplicate จากการ override ต่างๆนั่นเอง

Implementation by Delegation

Kotlin มันมีความแฟตาซีในจุดนี้ เราไม่ต้อง delicate core ให้เจ้า kotlin จัดการ สุดท้ายจะได้ผลลัพธ์เหมือนกัน โดยพิสูจน์จาก bytecode

แต่ก็มีบางตัวที่ blink ได้นี่นาาา ว่าแต่ blink คืออะไร ใช่อันนี้ไหมนะ

ชื่อแฟนคลับของ Blackpink ก็คือ BLINK นั่นเอง

ไม่ใช่เนอะ ดังนั้นเราสร้าง Blinker เพิ่ม เพราะ hero แต่ละตัวมี range ต่างกัน

Dependency Injection เราสามารถทำได้โดยรับจาก constructor

คอนเซป Mixin ใน Flutter ก็เอามาใช้ได้นะ

Mixin เป็นการ reuse class body/function หรืออื่นๆ โดยไม่ Inherit กัน

ซึ่งทำได้โดยการทำ class deligation ได้ เป็นการห่อเป็นก้อนๆแล้วแปะ

Default Implementation Interface

ถ้าประกาศ interface อาจจะต้องใส่ค่าเพิ่มด้านนอก การมี Mixin มาช่วยทำให้เราไม่ต้องประกาศค่าเองซํ้าๆ

สามารถอ่านเพิ่มเติมได้ที่

https://kotlinlang.org/docs/reference/delegation.html

https://en.wikipedia.org/wiki/Delegation_pattern

อันนี้สไลด์ของ speaker จ้าา

Kotlin Meetup 2019.1 Composition Over Inheritance Like A Boss
Composition Over Inheritance OOP Style

เพิ่มเติม video session ที่ 2 ค่าา

Composition over inheritance like a boss by Travis P Subannaphong Kotlin Meetup 2019.1 by Thai Kotlin Developer

Posted by กูโค้ด on Wednesday, February 27, 2019

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

ส่วน meetup ครั้งหน้านั้น น่าจะเดือนเมษายน ซึ่งเป็นเดือนที่หยุดเยอะพอสมควรเลยหล่ะ ติดตามรายละเอียดได้เลย ไหนๆเขาก็มีเพจแล้วเนอะ


สุดท้ายฝากร้านกันสักนิด ฝากเพจด้วยนะจ๊ะ

อย่าลืมกด like กด share บทความกันด้วยนะคะ :)

Posted by MikkiPastel on Sunday, December 10, 2017

Tags

Minseo Chayabanjonglerd

I am a full-time Android Developer and part-time contributor with developer community and web3 world, who believe people have hard skills and soft skills to up-skill to da moon.