มาเรียนรู้ Kotlin ที่งาน Kotlin Workshop กันเถอะ

Learning Aug 28, 2017

สวัสดีทุกท่าน เราก็เป็น Android Developer มาพักนึงแล้ว และได้ตามข่าว Google I/O 2017 ซึ่งภาษา Kotlin จะเป็นภาษา Official อีกภาษานึง ที่ไว้เขียน Android Application เราได้ตามข่าวใน Thailand Kotlin Developer Group และเขาก็กำลังจะจัดงาน Kotlin Meetup ครั้งที่ 3 แล้วสำหรับงาน Kotlin Workshop พอได้เวลากดบัตร ก็รีบกดกัน ที่ออฟฟิคกดบัตรสามคน ...................... เราได้คนเดียวจ้าาา โอ้ยยยย แปปเดียว บัตรหมดไวไปนะเออ (และงานที่แจกบัตรผ่าน eventpop ทุกงาน มันหมดไวมาก แบบวินาทีเดียวก็หมดแล้ว หัวร้อนกันไปหมด ดีที่บางงานมีเพจกูโค้ดไปไลฟ์นะ)

การเตรียมตัว

เรามาสรุปสั้นๆกันดีกว่า อันนี้สำหรับคนใช้ mac แล้วกันเนอะ (ทอดทิ้งคนใช้ windows แปปนึง)

กด Android Studio ตรงด้านบน เลือก Preference หรือกดคีย์ลัด command+,

เลือกแท็บ Plugins พิมพ์ Kotlin และ install ลงไป

จากนั้นเราก็จะพบคุณ Kotlin ที่เราดาวน์โหลดเสร็จแล้ว แบบนี้ จากนั้น restart android studio ซะ

เวลาเราจะสร้างไฟล์ใหม่ในโปรเจกเรา เราก็จะเห็น Kotlin File/Class ถือว่าเรา install plug-in เสร็จบริบูรณ์


งานนี้จัดขึ้นที่ Pronto Marketing ลง BTS สะพานควาย แล้วนั่งวินหรือเดินเอา แบบนี้ เดินไปเรื่อยๆ เปิด google map แล้วเดินตามเอา อยู่ที่ซอยประดิพัทธ์ 19 ในซอยมี ...... ช่างมันเถอะ เลยไปนิดนึงเป็นตึก อยู่ในตึกนั้นแหละ ชั้น 3

Agenda โดยรวมของงาน งานจัดขึ้นวันเสาร์ที่ 19 สิงหาคม 2560 จ้าาา

13:00 Register

13:30 Introduction to Kotlin

14:00 Workshop: Kotlin for Android

15:00 Break

15:20 Workshop: Miracle of stdLib

16:20 Non-JVM Kotlin

17:00 Prepare to go home

มาดูกันดีกว่า ว่าการ workshop นี้ จะสนุกสนานขนาดไหนกันน

ก่อนอื่นเตรียมตัวลง plug-in กันก่อน ซึ่งวันที่ workshop kotlin 1.1.4 ออกมาได้แค่อาทิตย์เดียวเอง และใช้ร่วมกับ Android Studio 3 ซึ่งเอาจริงๆเราใช้เวอร์ชั่น 2.3.3 ก็ใช้ได้เหมือนกันนะเออ ดังนั้นก็ update gradle ด้วยนะเออ

และสไลด์ทั้งหมด อยู่ที่

https://drive.google.com/drive/folders/0B2348tIBJgafR2EtdHlhdDZmYVU

คำนิยามโดยย่อของแต่ละ session สนุกกันไปคนละแบบ

1) Introduction to Kotlin : ทำความรู้จักกับ kotlin

2) Workshop: Kotlin for Android : แปลง JAVA ให้เป็น Kotlin ใน Android Studio

3) Workshop: Miracle of stdLib : มาทำความรู้จักการใช้ algorithm ใน kotlin เพิ่มเติม

4) Non-JVM Kotlin : kotlin ไม่ได้ทำได้แค่ Android app อย่างเดียวนะ ทำอย่างอื่นได้มากกว่าที่เราคิด

มาเริ่มกันดีกว่าเนาะ


Introduction to Kotlin

โดยคุณแอร์ จาก Agoda

จำที่มาของรูปไม่ได้ซะแล้ว ฮือออ

ใน session แรกจะเป็นการเรียกนํ้าย่อยก่อนลงสู่สนาม Kotlin จริง แนะนำให้รู้จักกับน้อง Kotlin กันก่อน Kotlin พัฒนาโดย Jetbrain รันบน JVM รองรับ static type ที่สำคัญ สามารถทำงานร่วมกันกับ JAVA ได้

โดยปกติเราเป็น Android Developer จะเขียนแอปด้วยภาษา JAVA ดังนั้นจะเปรียบเทียบภาษา JAVA กับ Kotlin ให้ดูกันเห็นๆเลย โดยสรุปก็คือเจ้า Kotlin จะเขียนโค้ดได้สวยกว่า ง่ายกว่า ดังนี้

1. มีตัวแปรสองประเภทใหญ่ๆ คือ

Mutable : เปลี่ยนแปลงค่าได้

var name: String = “Kotlin”

Immutable : เปลี่ยนแปลงค่าไม่ได้

val name: String = “Kotlin”

จุดสังเกต

  • Mutable ก็เหมือนตัวแปรที่เราประกาศตามปกติ สามารถยัดค่าอื่นเข้าไปแทนค่าเดิมได้ การประกาศตัวแปรจะใช้ var
  • Immutable ก็เหมือนเราประกาศ final ไว้หน้าตัวแปร เพื่อประกาศค่า constant ที่ใช้ซึ่งไม่สามารถเปลี่ยนค่าได้ การประกาศตัวแปรใช้ val
  • การประกาศ class ใน kotlin ไม่ต้องใช้ new เพื่อสร้าง object class ให้กับตัวแปรนั้นๆ

2. การประกาศ class ของ kotlin แค่ใส่ variable ที่เราจจะใช้ ไม่ต้องใส่ set กับ get เนื่องจากตัว kotlin เขามีตัวจัดการเรื่องพวกนี้อยู่แล้ว การใช้ set กับ get ใน kotlin ก็ไม่ต้องใส่อะไรมากมายเลย ใช้เหมือนกันทั้ง get และ set เลย แค่เรียกใช้ตัวแปรใน class ก็เพียงพอแล้ว

3. ถ้าในกรณีที่เราไม่ได้ get หรือ set ตรงๆ เช่น เอาค่ามาทำการคำนวณ การเปลี่ยนแปลงสตริง ใน JAVA ก็ทำใน get กับ set เลย แล้วใน kotlin หล่ะ ทำใน get และ set เหมือน JAVA นั่นแหละ แต่จะใช้ get() และ set(value) แบบสั้นๆ และอีกอย่าง การใส่ค่าสตริง เราใส่ “blah blah” + value ใช่ม๊าา ใน kotlin ทำง่ายๆ แค่ใส่ $ หน้าชื่อตัวแปร

4 ใน kotlin ไม่สามารถประกาศตัวแปรโดยไม่ assign ค่าให้มันไม่ได้

แต่ถ้าอยากจะ assign ค่าทีหลังจริงๆ ใช้ late init ช่วย โดยใส่ lateinit ไว้ว่าตัวแปรที่เราต้องการ จากนั้นเราจึงจะ assign ค่าทีหลังได้

แต่ๆๆๆๆๆ เรานำตัวแปรที่ยังไม่ได้ assign ค่าไปใช้ไม่ได้นะเออ ซึ่งมันก็ make sense นะ

5. lazy คือการ save memory แล้วเรียกใช้หน่วยความจำเมื่อมีการเรียกใช้ตัวแปรนั้นๆ โดยใส่ by lazy ไว้หลังตัวแปรที่เราต้องการ เช่น เราสร้าง database ไว้ตัวนึง แล้วเราให้ save ชื่อไว้ใน database วึ่งจะทำงานตอนที่เรา save ค่านั่นแหละ

6. Nullable type ใน kotlin นางจะคืนค่าที่ไม่เป็น null ออกมา ดังนั้นถ้าเราจะให้ตัวแปรสามารถคืนค่า null ออกมาได้ ดังนั้นเราต้องใส่ ? ไว้หลังประเภทตัวแปร เช่น String? สามารถคืนค่า String และ null ได้

ดังนั้นการที่เราจะ check ว่าค่าที่เข้ามาเป็น null หรือเปล่า ใน JAVA ต้อง check if object != null ใช่ป่ะ แต่ใน kotlin สามารถทำเสร็จได้ในบรรทัดเดียว โดยไม่ใช้ if อาจจะเถียงได้ว่า JAVA มันก็ใช้ if แบบย่อได้นะยูววว มาดูกันดีกว่าค่ะ ให้คนอ่านตัดสิน (เพราะทั้งงานนั้น บอกว่าเลิกเขียน JAVA ให้มาเขียน kotlin แทน)

JAVA: return name != null ? Name.toUpperCase() : null;

Kotlin: return name?.toUpperCase()

ถ้า return ค่าอื่นแทน null ในกรณี else ก็ทำได้เช่นกัน โดยใช้ elvis operator ผู้ที่คล้ายทรงผมของเอลวิส ได้เช่นกัน โดยใส่ต่อหลัง แล้วตามด้วยค่าอื่นที่เราต้องการ  เช่น เราต้องการให้ string ที่มีเป็นตัวพิมพ์ใหญ่หมด ถ้า name มันเป็น null สามารถให้มัน return ออกมาเป็น empty string ได้

ส่วน assertion ยังงงๆอยู่...ในตอนนั้น ก็คือใส่ไปเพื่อยืนยันว่า มันไม่ null เว้ย ซึ่งจริงๆอาจจะ null ก็ได้

7. การทำ constructor ไม่ต้องทำอะไรยุ่งยาก ตัว constructor block ไว้บนสุดเลย และเราประกาศ initialize ภายใต้ init

8. การประกาศ function เราใช้ fun นำหน้าชื่อ function นะ ใน Kotlin เราจะไม่ประกาศ permission public protected และ private ไว้หน้าตัวแปร และสามารถย่อให้เหลือสั้นๆเพียง 1 บรรทัดเท่านั้น

การเรียกใช้ function ค่อนข้าง flexible สุดๆ สามารถใส่ชื่อตัวแปรเท่ากับค่าได้เลย อีกทั้งไม่ต้องเรียงตามลำดับ order ให้วุ่นวาย ใส่ให้ครบตามลำดับเหมือนทุกๆภาษา ตัว function สามารถ set ค่า parameter เป็นค่า default ได้ด้วยนะ

9. lambda คือการที่เราเขียนแบบย่อๆ โดยใส่ type และสิ่งที่เราต้องการจะทำ การใช้ก็ใส่ค่า parameter ตามที่เราต้องการได้เลย ซึ่งรายละเอียดแบบเข้าใจง่ายจะอยู่ใน session ที่สองนะ

10. higher order function เรียกภาษาชาวบ้าน คือ function ซ้อน function นั่นเอง

ซึ่งสามารถทำ map คือการ transform แต่ละอันรวมเป็น data ก้อนเดียวกัน ซึ่งใน kotlin จะใช้ listOf แล้วตามด้วย object ที่เราจะ transfer เดินไปด้วยกัน ไม่ต้องสร้าง List หรือ ArrayList ใหม่ เพื่อเก็บแต่ละอย่างใน list ใหม่ที่เราสร้างขึ้น แล้วเข้า map

ความพิเศษ คือ ถ้าเราอยาก check ว่า object แต่ละตัว มีค่าเท่ากันไหมมมม เราอาจจะต้องวน loop เพื่อ check ค่าภายใน ใน kotlin สามารถเอามา check ได้ทันที ไม่ต้องวน loop (ซึ่งไม่มีตัวอย่างไม่มีสไลด์)

11. Data class ไม่ต้อง Override function อื่นๆมาให้เสียเวลา เอ้ออ ไม่ต้องใส่ get กับ set ใส่แค่ตัวแปรใน class พอ

Workshop: Kotlin for Android

โดยคุณดิว จาก Yesmom ซึ่งเราก็มี blog ใน medium ชื่อว่า blacklens ในนั้นมีเทพ Kotlin หลายท่านเลย

ต่อมากับ session ที่สอง มาเปลี่ยน JAVA เป็น Kotlin

ก่อนที่จะเริ่ม clone โปรเจกก่อนนะเออ https://github.com/ThaiKotlinDev/task-universe branch master นะยูวว อันที่เสร็จแล้วจะอยู่ที่ completed นะ ไว้ตรวจคำตอบ

ที่เราจะทำคือแอปประมาณนี้ หน้าแรกทำด้วย RecyclerView สามารถกดไปหน้าอื่นได้ แบบง่ายๆ โดยแปลงโค้ดในโปรเจกนี้เป็น Kotlin

รูปออฟฟิคเดิมของ shopspot ตอนนี้เป็นของฟังใจไปแล้ว ;P

ตรวจสอบ plug-in ก่อนว่าเป็น version ล่าสุด โดยไปที่ Tools -> Kotlin -> Configure Kotlin in Project

คลิกที่ All modules containing Kotlin files และเวอร์ชั้นตอนนี้ คือ 1.1.4-2 นะเออ

มีเป็น video ด้วยนิดนึง

ในขั้นแรก จะเริ่มแปลง JAVA เป็น Kotlin โดยเริ่มจาก model class สร้างไฟล์ Kotlin โดยกด command + n ชื่อเดียวกับ model class จากนั้นก็อปของข้างในมา ครอบทั้งหมดตั้งแต่ประกาศ class มาเลย paste ใน kotlin ไฟล์ เขาถามว่าจะให้แปลงเป็น kotlin เลยไหม กด OK เลยจ้า

และผลที่ได้ โอโห้ class model สั้นลงไปมาก

เนื่องจากมันเป็น model class เนอะ ค่าที่เข้ามามันจะไม่เปลี่ยนค่า ดังนั้นเปลี่ยน var -> val

และค่าที่เข้ามามันไม่เป็น null ดังนั้นเอา ? ออกไป

จากประสบการณ์ พบว่า มันแล้วแต่ Requirement แล้วกันเนอะ บางทีอาจจะเผื่อ null ด้วยก็ได้ ไม่งั้นแอพแคลช

แล้วก็ลบ JAVA เดิมด้วยนะ กัน compiler สับสน

ถ้างงว่าครอบตรงไหน เชิญวิดีโอจ้าา

ตัวโปรเจกจะมีการ uncomment ที่ gradle เพื่อเราสามารถเขียนได้เมามันส์ขึ้น แต่ก็ไม่แนะนำทุกกรณีนะ (เพราะบางอย่างมันก็ไม่ควรใช้บน production เว้ยยย)

เรามีวิธีใช้กระดาษทดแบบง่ายๆ คือการทดลองการเขียนโค้ดด้วย Kotlin ว่าท่านี้เขียนถูกไหม

โดยไปที่ Tools -> Kotlin -> Kotlin REPL

มันจะอยู่ข้างล่างนะเน้ออ

ใน comment มันคืออะไร มันคือ การประกาศ object แล้วใส่ค่าลงไปง่ายๆนี่แหละ

เริ่มที่การลองใส่ค่าใน mutable list และใส่ค่าเพิ่มลงไป

คราวนี้มาลองการใช้ lambda กันดีกว่า

เราสร้าง function myFunc เพื่อรับตัวเลขเข้ามา และคืนค่าตัวเลขออกมา

ลองอีกอัน เราใส่ตัวเลขไปสองตัว นำมาเปรียบเทียบกัน ผลจะออกมาเป็นอะไร

ผลออกเป็น falsetrue เพราะอะไรหล่ะ เพราะคืนค่าทุกอันที่เปรียบเทียบใน list นั้น

ทดลองแลมด้ากันพอหอมปากหอมพิซซ่า เอ้ยยย หอมคอไปแล้ว มาถึงช่วงแปลงเป็น Kotlin ต่อ

ที่ต่อไปที่เราจะเปลี่ยน TaskRepositorImpl โดยสร้าง kotlin ไฟล์ขึ้นมาใหม่ ชื่อว่า KotlinTaskRepositorImpl จากนั้นก็อปของจาก TaskRepositoryImpl มา ระหว่างนี้มันจะ build ไม่ผ่าน เราต้อง import library kotlin file ที่เราสร้างมาก่อน

อันนี้อาจจะงงๆว่าควรจะก็อปใส่ยังไงดี ดูวิดีโอเลยจ้าา

ลอง run ดู จะขึ้นมาเป็น RecyclerView ที่เป็น list ยาวๆ

บางคนอาจจะรันขึ้นไม่ได้ ให้ uncomment ที่ Presentation > di > Injector แล้ว import library ให้เรียบโร้ยยยยยย

ไปที่ TaskListActivity เพื่อ uncomment ตรง intent เพื่อให้ไปอีกหน้านึงตอนคลิกได้

ต่อมาไปอีกสองหน้าอีกนิดๆหน่อย ดังรูป

ไปที่ Presentation > taskdetails > TaskDatailsActivity

มี TODO 4 จุดที่ต้องทำ เนื่องจากเวลามีน้อยเลยเหลือแค่ 3 อัน

TODO #1 : เป็นการรับ bundle มาจาก activity ที่แล้ว

TODO #2 : เป็นการใส่ title description และรูปภาพ การใช้ library glide ท่าจะคล้ายๆใน JAVA เลย

และ set adapter ซึ่งเราจะไปแก้ที่ ActionItemAdapter อีกที่นึง

TODO #3 : อันนี้ใส่รูป

TODO #4 : เป็นการ set recycler view ซึ่งเราไม่ต้องมาใส่ mRecyclerView. บลาๆๆๆ สามารถใช้ apply ครอบเพื่อระบุคุณสมบัติได้

และไปที่ Presentation > taskdetails > ActionItemAdapter เพื่อทำ adapter ซึ่งก็ตรงไปตรงมา

TODO #1 : คืนค่า size ทั้งหมดออกมา โดยค่าที่ได้ต้องไม่ใช่ null นะเออ

TODO #2 : bind view ออกมาโดยอิง position

TODO #3 : เป็นการใส่ attribute

บางทีอาจจะมีขึ้นแดงๆ เนื่องจากเราเพิ่ม LayoutContainer แล้วยังไม่ได้ implement ไส้ในของ function ของ LayoutContainer นั่นเองงงง

ระหว่างนี้มีคั่นด้วยเบรกและพิซซ่าเบาๆ

แอบเสียดายเวลาน้อยไปนิดดด ตอนแรกดูพี่ดิวไปทำไป จนเปลี่ยนมาทำพร้อมกันเพื่อประหยัดเวลา

Workshop: Miracle of stdLib

โดยคุณป็อปจาก shopspot และคุณจูจาก Agoda

เช่นเดิม clone code ทั้งหมดจาก https://github.com/ThaiKotlinDev/miracle-of-stdlib

มาเรื่องแรก apply, also, with

รู้สึกว่าจะแอบข้ามสไลด์ มาดูตัวอย่างในนี้

initTextViewBad อันนี้คือ JAVA style

initTextViewWith อันนี้ดีขึ้นนิดนึง มาการครอบโดยใช้ with และใส่ค่าที่จะ return แต่ยังไม่ดีที่สุด

initTextViewGood ใช้ apply ครอบเหมือนด้านบนเลย

initTextViewGood2 ใช้ also ครอบ แล้วใช้ it ซึ่ง it ก็คือมัน หมายถึงตัวมันนะ

ซึ่งอัน Good แล้วแต่ถนัดเลย

เรื่องต่อมา let, run ทำให้เราไม่ต้องมานั่ง check null ให้ยุ่งยาก จบได้ใน line เดียว

อันนี้เป็นการเรียก API ซึ่งเราต้อง check ค่าที่รับมาเนาะ ว่า response ต้องไม่เป็น 404 not found และไม่เป็น null

อันนี้ก็ check ค่าที่เข้ามาว่าผลเป็น null หรือไม่

วิธีจำง่ายๆ let ใช้กับ it และ run ใช้กับ this นะ

เรียนสักแปป quiz 1 ก็มาไม่ทันตั้งตัว เหมือนเติมคำในช่องว่างตามโจทย์

ถ้าจะดูว่าโค้ดเราเขียนถูกไหม สามารถไป run unit test ในนั้นได้เลย

ขอแปะโจทย์พร้อมเฉลย ดังนี้

quiz 1 ลองเอาข้างบนมาแปลงเป็น Kotlin

quiz 1 unit test

ต่อมาก็เรื่อง lazy จะเริ่มใช้ memory ตอนทำงาน ตามข้างต้น

ตอนต้นบอกได้ว่านางมี 2 type เนอะ

เราสามารถ add remove list ได้ตามใจชอบ ซึ่งมันจะคล้ายๆ list ใน python เลยแหละ

แถมใช้ function พวกนี้แบบง่ายๆ ทั้งในเรื่อง

เรื่อง set ก็เล่นง่ายเหลือเกิน แม่งง่ายกว่า python อีกอ่ะ เรียกกันตรงๆเลย

(อ้างอิงจากที่เราทดลองและเขียนเล่น https://mikkipastel.com/set-in-the-python/)

data model ก็ง่ายๆ เราสามารถใส่ default หรือ init อันนี้ไม่แน่ใจนะ ได้ด้วยแล้วกัน (ตอนนี้รู้แล้ว ก็คือเราสามารถ init ค่า default ใน model ได้เลย)

ตัวอย่างการใช้งาน เช่น การ sort หาข้อมูลที่เราต้องการมาตัวนึง

quiz 2 ก็มาตบท้าย โจทย์คือให้เรา filter ข้อมูลตามโจทย์ที่กำหนดให้

ตรวจสอบด้วย unit test เหมือนเดิม แต่เขาเขียน test ผิดไปนิดนุงง

quiz 2 make it posh, make it blend, make it happen
ตัว Test quiz 2 ความจริงมีมากกว่านี้อีก

Non-JVM Kotlin

โดยคุณเบ็บจาก Genxas Elite ซึ่งเขาก็มี blog ใน blacklens ด้วยเช่นกัน

รูปนี้เราถ่ายเอง รูปเดียวที่แปะบล็อกนี้เลยนะ อันนี้ตอนที่เขากำลังเดโม่ตัวเว็บอยู่

หัวข้อนี้พูดถึงการเขียน kotlin ไปใช้ที่อื่นนอกจาก android

เช่น การเอาไปเขียนหน้าเว็บ มันจะสามารถ convert kotlin ไป js ได้ โดยการไป setting ใน gradle (kotlin.js) และ pack file ทั้งหมดที่ compile เสร็จแล้ว ไป deploy ซึ่งพอเปรียบเทียบโค้ดแล้ว หน้าตาเหมือน js เลยเนอะ หน้าตาคุ้นมากตั้งแต่ session แรก แถมไม่มี ; เหมือน python อีก

พอแปลงแล้วโค้ดก็จะเป็นประมาณนี้

session นี้ไม่ได้ workshop จริงจัง แค่โชว์ให้ดูเฉยๆ

โค้ดที่ใช้ clone จาก https://github.com/ThaiKotlinDev/kotlinjs-wonderland

ลง editor IntelliJ IDEA CE ในการกระทำครั้งนี้ ไม่ต้องมี Android Studio ก็สามารถเขียนโค้ดด้วย Kotlin ได้

มีการใส่ gradle คล้ายๆใน Android Project ด้วย เพิ่ม apply plugin: "kotlin2js" ด้วยนะ

มี library ให้เรียกใช้ พี่เขาก็ก็อปแปะรันให้เราดูว่าผลออกมาเป็นยังไง

Dynamic type สามารถไปเรียก firebase ได้ด้วยนะ

External ต้องใส่ modifer ว่าเราไปเรียกฟังก์ชั่นนี้ด้านนอกแล้วนะ

ตัวเว็บของกลุ่มก็ใช้ Kotlin เขียนขึ้นมาทั้งหมด https://thaikotlindev.github.io/

กลุ่มเป้าหมายของ Non-JVM ซึ่งเราเขียน Kotlin แล้วแปลงเป็นภาษาตาม platform นั้นๆ ได้แก่ Embedded system/IoT, iOS, Windows, Web Assembly

มีคนเอาไปใช้กับ RaspberryPi เหมือนกันนะเออ

Raspberry Pi Starter Kit and Kotlin/Native
Writings

โดยของ iOS จะแปลง kotlin ไปเป็น C++ แล้วเปลี่ยนไปเป็น Objective-C และจบที่ Swift

และมีการโชว์ให้ดูด้วย โดยมี reference ตามนี้ http://justmaku.org/2017-06-07-kotlin-on-ios

ซึ่งก็รันได้จริงๆนะเออ นึกถึง react.js เหมือนกันนะ

ซึ่งถ้าเราอยากเอา Kotlin ไปเขียนหน้าเว็บงี้ ตามไปอ่านได้ที่นี่เลย

Kotlin/kotlin-fullstack-sample
Kotlin Full-stack Application Example. Contribute to Kotlin/kotlin-fullstack-sample development by creating an account on GitHub.

สุดท้ายขอบคุณ Thailand Kotlin Developer ที่จัดงานนี้นะคะ

และรูปจากคุณ Wanchuda Sukarrom ที่ถ่ายภาพเก็บตกของงานนะคะ

ส่วนรูปด้านบนจากแอดมินกรุ๊ปค่ะ คุณ Verachad Wongsawangtham ทำท่าเป็นรูปตัว K สดๆกันเลยทีเดียว

ส่วนเว็บของกลุ่ม https://thaikotlindev.github.io/ ใช้ kotlin ทำทั้งหมดเลย

และ GitHub https://github.com/ThaiKotlinDev

ลองเล่น kotlin แบบชิวๆที่ https://try.kotlinlang.org

และเขามี library document ด้วย เป็นของ version 1.1 เลย ที่เราเปิดค้างไว้ก็อันนี้ https://kotlinlang.org/api/latest/jvm/stdlib/kotlin/index.html ตอน session ที่ 3 จ้าาา

และสุดท้าย official document อยู่ที่ https://kotlinlang.org/docs/kotlin-docs.pdf

ถ้าข้อมูลส่วนไหนผิดพลาดก็ขออภัยด้วยนะคะ

สามารถติติงได้เพื่อข้อมูลที่ถูกต้องค่ะ :)

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.