Our SuccessKnowledges
NEXTZY Logo
Crews
Chat
Talk with Team
NEXTZY Logo
NEXTZY
Chat
Home>Knowledges

ทำไมต้องหันมาใช้ Kotlin พร้อม「code lab 」ลด learning curve

Share:

ทำไมต้องหันมาใช้ Kotlin พร้อม「code lab 」ลด learning curve

Table of contents

  • What is it?
  • Killing feature สิ่งที่ JAVA ไม่มี
  • Null safety
  • Data class
  • Extension function
  • Learning curve
  • Kotlin Code lab for Android
Nonthawit

Nonthawit

CEO | Engineer | Designer

VIEW

18.2k

CATEGORY

Technical

LAST UPDATED

May 22, 2017

Nonthawit

Nonthawit

CEO | Engineer | Designer

VIEW

18.2k

CATEGORY

Technical

LAST UPDATED

May 22, 2017

What is it?

Kotlin เป็นภาษาใหม่พัฒนาขึ้นมาเพื่อใช้แทนภาษา Java ที่มีจุดอ่อนอยู่หลายอย่าง ที่ไม่สามารถแก้ไขอะไรได้มากนัก ซึ่งหลักๆจะเป็นเรื่อง backward compatibility JAVA 6 7 8 และ feature อีกหลายๆอย่างที่ JAVA ไม่มีเช่น null safety, Extension function เป็นต้น

แนวคิดของ Kotlin คือเข้ากันได้ 100% กับ Java เพื่อให้สามารถใช้ประโยชน์จาก library API และ tools จำนวนมากที่มีอยู่แล้วในโลกของ JAVA และใส่ feature ที่ JAVA ไม่มีเข้าไปอีกด้วย

เป้าหมายของ Kotlin คือนำมาใช้แทน JAVA โดยยังรักษาโค้ด JAVA เพื่อให้ทำงานร่วมกับโปรเจคเก่าที่เขียนไปแล้วได้

ref: http://qiita.com/rejasupotaro/items/d3fa66c3f02d1cb2477a

เพราะสุดท้ายแล้วไฟล์ .kt จะถูกแปลงให้เป็น .java ในรูปอย่างง่าย เสร็จแล้วตัว compiler จะแปลงเป็น .class ต่ออีกทีเพื่อเอาไป run บน JVM อยู่ดีครับ (ถ้าในภาพจะเป็นขั้นตอนของ JFlex คือเปลี่ยน .kt เป็น .java)

.kt --> .java --> .class

แต่อนาคตได้ยินข่าวมาว่า kotlin กำลังพัฒนาให้ตัวเอง run เป็น native ได้โดยไม่ต้องพึ่ง JVM อีกต่อไปอันนี้ต้องรอดูกันต่อไป

แต่เราค่อนข้างมันใจว่าเป็นภาษานี้อนาคตไกลแน่นอน

ref: https://www.toptal.com

ส่วนใครยังไม่แน่ใจว่าจะหันมาใช้ดีไหม? มันทำงานบน production ได้จริงรึป่าว? kotlin จำเป็นขนาดนั้นเลยหรอ? เราก็เคยเป็นหนึ่งใน user ที่ชอบถามคำถามแบบนี้ แต่จากที่ลองเล่นดูตอนนี้เปลี่ยนความคิดละ และเป็นที่มาของบล๊อกในวันนี้ด้วยเช่นกัน ฮาๆๆๆ

คำตอบคือใช้งานได้จริง(นานแล้วด้วยครับ) เพราะสุดท้ายมันจะถูกแปลงเป็น .java อยู่ดีคับ เราจะมีความรู้สึกว่า kotlin มันไปครอบ JAVA อีกทีหนึ่ง และ tech startup หลายเจ้าก็ใช้ kotlin เป็น production อยู่นะ บวกกับ google ตกลง support kotlin เป็นที่เรียบร้อยแล้วด้วย 😎

ส่วนถามว่าจำเป็นไหม เราขอมองในมุมคนเขียน JAVA มาก่อน บางอย่างเราไม่สามารถใช้ใน JAVA ได้เราเลยมองว่าไม่จำเป็นขนาดนั้น (ซึ่งจริงๆก็เพราะเราไม่เคยใช้ต่างหากเลยบอกว่าไม่จำเป็น) แต่ถ้ามองกลับกัน ถ้าเกิดวันหนึ่งมี feature ที่ดีกว่า สะดวกกว่า เราจะใช้ไหม? เช่นเดียวกับ kotlin คนมองผิวเผินเหมือนมันจะไม่จำเป็นขนาดนั้น เพราะไม่เคยลองจับกันจริงๆถึงไม่เห็นประโยชน์ของมัน มิเช่นนั้นคงไม่มีภาษานี้เกิดขึ้นมา

และหลังจากที่เราใช้เวลาในการศึกษาอยู่ประมาณ 3 วัน เห็นข้อดีหลายๆอย่างของตัว kotlin ที่ JAVA ไม่สามารถทำได้อยู่หลายอย่างด้วยกัน แล้วทำไมเราจะไม่ใช้หละ?

Killing feature สิ่งที่ JAVA ไม่มี

  • non-private field โลกของ kotlin ไม่จำเป็นต้องประการ private + getter/setter อีกต่อไปเพราะมัน auto generate ให้
  • Auto-casting / Smart cast
  • Default and named arguments ใส่ค่า default ให้กับ param ได้เลย ทำให้ลดเรื่อง method overloading ไปได้เยอะ
  • High order function: lambda kotlin build-in มาให้เลยครับ
  • Null safety มีการเรียกใช้ตัวแปรที่จัดการเรื่อง NullPointerException ให้
  • Extension function ทำให้ลด Utility class ได้เยอะ
  • Data class: equal( ), hashCode( ), toString( ), destructuring object ไม่ต้องเขียนเองอีกต่อไป kotlin generate ให้หมด
  • kotlinc compiler ใหม่กว่า และเป็นที่มาทำไม kotlin ถึงใช้ feature ของ java 8 ได้อย่างสบายๆ (ไม่มีปัญหาเรื่อง backward compatibility เหมือน JAVA) และยังลดจำนวนโค้ดลงได้ 40% ถ้าเทียบกับ program ที่ใช้ Java เขียน
  • Google support 😜
  • Online compiler
  • …

Kotlin ≈ Swift ≈ Scala ≈ Python ≈ JAVA (มั้ง 😜)

ในบล๊อกนี้เราขอพูดแค่เกรินให้บาง feature เท่านั้นเพื่อให้เห็นว่าแตกต่างจาก JAVA อย่างไร เนื่องจากเราทำ code lab ไว้ให้ไปศึกษาต่อกันแล้วทุกอย่างที่เป็น basic อยู่ในนั้น

Null safety

kotlin เห็นปัญหาของ JAVA เรื่อง NullPointerException เลยคิดเรื่อง null safety ขึ้นมาก

คือ ถึงตัวแปรจะมีค่าเป็น null b.length ก็ยังสามารถเรียกใช้งานได้แต่ค่าที่ได้จะเป็น null เช่นกัน ซึ่งถ้าเป็น JAVA คงหนีไม่พ่น NullPointerException แน่นอน

ทำให้ลดแอปบึ้มลงไปได้เยอะ และไม่ต้องมานั่งใส่

if( var == null) return; 

ให้เสียเวลา

Data class

kotlin ทำได้เหมือน JAVA หมดแต่แค่บรรทัดเดียวชิวๆ

Extension function

นึกภาพถ้าเราต้องการจะจัดการกับ String เพิ่มเติมเราคงหนีไม่พ้น StringUtility.java เป็นแน่แต่ kotlin ไม่ต้องสร้าง class ครับแค่ประกาศ

ไว้ global String ทุกตัวในโปรเจคจะสามารถเรียก

"every string can".encodeSpaces()

ได้ทันทีทำให้ลด Utility class ลงไปได้เยอะ


อย่างที่เราบอก kotlin เห็นปัญหาของ JAVA หลายๆอย่าง kotlin เลยออกแบบมาเพื่อแก้ปัญหา pain ต่างๆเหล่านี้

feature เหล่านี้เป็นแค่ส่วนเดียวของ Kotlin มันยังทำอะไรได้อีกค่อนข้างเยอะมาก ไปศึกษาต่อกันเองได้เนาะใน code lab

Learning curve

ถ้ามาพูดถึง learning curve ใครมีพื้นฐาน JAVA มาก่อนจะสบายมากครับ

จากที่เราลองศึกษาจริงๆจังๆอยู่ 3 วันก็ cover basic เกือบทั้งหมดเพราะมัน concept เดียวกัน แค่เปลี่ยน syntax และเพิ่มบาง feature ที่ต้องเรียนรู้ใหม่ก็เท่านั้น อาจจะไม่ชินในตอนแรกๆอยู่บ้าง

แต่ตัว kotlin syntax ค่อนข้างอ่านง่ายอยู่ครับ และพวก resource หาอ่านก็เริ่มเยอะมากแล้ว โดยส่วนตัวเริ่มแรกแนะนำให้อ่านผ่าน kotlinlang.org เลยครับเพื่อปูพื้นฐานมันก็ไม่ได้เหมือนกับ JAVA ซะทีเดียว มีบาง concept ที่เราควรทำความเข้าใจก่อนไปลงโค๊ดกับโปรเจคจริงๆ

Kotlin ≈ Swift ≈ Scala ≈ Python

Try Kotlin
Try Kotlin right in the browser.try.kotlinlang.org
Reference — Kotlin Programming Language
Kotlin is a statically typed programming language for the JVM, Android and the browser, 100% interoperable with Javakotlinlang.org
From Java to Kotlin
final int x = // value; final String xResult; switch (x){ case 0: case 11: xResult = “0 or 11”; break; case 1: case 2:…fabiomsr.github.io

Kotlin Code lab for Android

nontravis/kotlin-android-codelab
Contribute to kotlin-android-codelab development by creating an account on GitHub.github.com

ลักษณะ code lab ที่เราทำไว้ให้เพื่อให้เป็นพื้นที่ลองผิดลองถูกของภาษา kotlin กัน เราเชื่อว่าอ่านอย่างเดียวยังไงก็ไม่พอมันต้องลองเขียนโค๊ดจริงๆไปด้วย

วิธีที่เราทำคือเปิดเว็บ kotlinlang.org/docs/reference/ และลองโค๊ดจริงๆกับ code lab ไปพร้อมๆกัน สงสัยส่วนไหนก็ลองเล่นใน code lab ได้เลยมันจะช่วยให้เราเข้าใจมากขึ้น

โดย code lab เรา follow หัวข้อตาม doc reference ของทาง kotlinlang.org/docs/reference/

มาดูตัวโปรเจคกัน

class แทนหัวข้อ lecture ต่างๆ

ซึ่งใน class ก็จะมีอยู่ 2 ส่วนหลักๆคือ

  • Lecture section จะเป็น code ตัวอย่าง เนื้อหาในแต่ละ lecture นั้นๆ
  • Try section ไว้ให้เราลอง code กันเวลาสงสัย โดยต้อง return String กลับไปมันจะไป show อยู่บน logcat ให้

ปุ่ม จะแทน class หรือ lecture นั้นๆเวลากดมันจะเอา message ใน

fun setupLogcatMessage(): String {
...
}

ไปโชวใน logcat ให้เลยเพื่อดูผลลัพธ์ทำความเข้าใจ

code lab นี้จะเป็นประโยชน์ให้กับคนที่อยากหันมาฝึก Kotlin กันนะครับ เพื่อเอาไปต่อยอดทำอย่างอื่นกันต่ออ่าน blog หรือ ดู VDO conference หรือ ทำโปรดัก

วันนี้คงไว้เท่านี้ก่อนเจอกันบล๊อกหน้าครับ

 

อย่าลืม share ให้มนุษย์ที่จะหัด kotlin คนอื่นด้วยหละ 😎

Share:

KNOWLEDGE

Related Articles

เข้าใจการทำ Selector แบบ Ripple effect
Nonthawit

Nonthawit

CEO | Engineer | Designer

เข้าใจการทำ Selector แบบ Ripple effect

20 สิ่ง ที่ได้หลังจากเป็น Android developer ที่ Nextzy 3 เดือน
Nonthawit

Nonthawit

CEO | Engineer | Designer

20 สิ่ง ที่ได้หลังจากเป็น Android developer ที่ Nextzy 3 เดือน

บทความนี้แชร์ประสบการณ์ 3 เดือนแรกของการทำงานเป็น Android Developer ที่ Nextzy ครอบคลุมทั้งด้าน technical เช่น MVP architecture, Android Lifecycle, ProGuard, Git workflow และการเขียน Unit Test รวมถึงด้าน soft skill อย่างการสื่อสารกับทีม, การแชร์ความรู้, และการเขียนโค้ดให้ readable และยืดหยุ่น นอกจากนี้ยังสะท้อนวัฒนธรรมองค์กรที่เน้นทีมเวิร์ค การ review โค้ด และบรรยากาศการทำงานที่สนุกสนาน ซึ่งล้วนช่วยลด learning curve และพัฒนาทักษะได้เร็วกว่าการเรียนรู้คนเดียว

[Tip/Trick] วิธีติดต่อกับ WebView ผ่าน JavascriptInterface มันเท่มาก
Nonthawit

Nonthawit

CEO | Engineer | Designer

[Tip/Trick] วิธีติดต่อกับ WebView ผ่าน JavascriptInterface มันเท่มาก

NEXTZY Logo
NEXTZY
48/27 Ratchadaphisek Rd, Samsen Nok, Huai Khwang, Bangkok 10310

Base at Thailand

Thailand

Home

Crews

Success

Download press kits

Knowledges

Chat

Talk with team

SCHEDULE