มา meetup แรกของปีนี้ ที่งาน Kotlin Meetup 2019.1
เดี๋ยวนะเดี๋ยวนี้ไม่นับเป็น version ของ Kotlin แล้วใช่ไหมค่ะ 555
เรียกได้ว่าช่วงต้นปีไม่ได้ไปงานอะไรเลย เพราะไม่ค่อยมีจัดเท่าไหร่ในเดือนแรกของปี 2019 นี้ แล้วเริ่มมาจัดกันเดือนนี้นะ ซึ่งงานนี้กดบัตรตั้งแต่นาทีแรกๆเช่นเคย และพบว่าบัตรหมดในเวลาประมาณ 24 ชั่วโมงด้วยอ่ะ สุดจริง
สถานที่จัดงาน คือ Fastwork สามารถรองรับคนได้เยอะเลยแหละ แถมเดินทางสะดวกเพราะ Fastwork ตั้งอยู่บนตึก Emporium นั่นเอง ลง BTS พร้อมพงษ์ ไม่เผลอไผลกับร้านข้าวหน้าปลาไหลและราเมงฮัทแถวนั้นก็น่าจะมาถึงได้ไว 555555 //ว่าแต่ Fastwork อยู่ชั้นไหนนะ แล้วต้องแลกบัตรแม่ะ? มีโพสของ speaker บอกวิธีการเดินทางล่วยยยย
พอมาถึงก็หูอื้อเลย เพราะเป็นลิฟต์ชั้นสูงๆ 55555
เข้ามาก็หาอะไรทานหน่อยโน๊ะ ซึ่งพิซซ่าอร่อยมาก และมี soft drink ที่แอบเข้าใจว่าเป็นสวัสดิการของ Fastwork ด้วย
และแล้วเวลา 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
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
แต่ๆๆๆๆ มันไม่ 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 ในครั้งนี้
อ่านเพิ่มเติมได้ที่
สุดท้าย KEEP เปิด feature ที่เราอยากให้ Kotlin มี และสามารถอ่านทิศทางในการพัฒนาภาษา Kotlin ได้ที่นี่เลย
แอบเพิ่มเติมนะ อันนี้ video ย้อนหลัง session แรกจากทางกูโค้ดค่าา
Composition over inheritance like a boss by Travis Subannaphong [Senior Android Software Engineer @ Fastwork]
มีการเปลี่ยนชื่อ session เล็กน้อย พร้อมบอกว่ายังไม่ได้พูดถึง functional ในตอนนี้นะเออ
ตอนแนะนำตัว มีขายของด้วย งั้นขายเลยแล้วกัน เป็น Co-Founder บล็อก Kotlin ที่ดีที่สุดในประเทศไทย นั่นคือออออ
ขายให้เขาทำไมหล่ะ คือเราเป็น 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 คืออะไร ใช่อันนี้ไหมนะ
ไม่ใช่เนอะ ดังนั้นเราสร้าง 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 จ้าา
เพิ่มเติม video session ที่ 2 ค่าา
สุดท้ายพี่เบิร์ดกล่าวปิด ถ้าใครอยากจัดกิจกรรมอะไร หรืออยากจัดอะไรแล้วอยากใช้สถานที่เป็น Fastwork ก็ติดต่อได้จ้า
ส่วน meetup ครั้งหน้านั้น น่าจะเดือนเมษายน ซึ่งเป็นเดือนที่หยุดเยอะพอสมควรเลยหล่ะ ติดตามรายละเอียดได้เลย ไหนๆเขาก็มีเพจแล้วเนอะ
สุดท้ายฝากร้านกันสักนิด ฝากเพจด้วยนะจ๊ะ