Tags:
Node Thumbnail

ข่าวสำคัญของโลกโปรแกรมมิ่งวันนี้คือ Android รองรับภาษา Kotlin อย่างเป็นทางการ และถือเป็นภาษาที่สองถัดจาก Java

หลายคนอาจเพิ่งเคยได้ยินชื่อภาษา Kotlin เป็นครั้งแรก บทความนี้จะพามาแนะนำตัวให้รู้จักกันครับ

กำเนิด Kotlin

Kotlin เป็นผลงานของบริษัท JetBrains บริษัทซอฟต์แวร์จากยุโรปตะวันออก (สำนักงานใหญ่อยู่ที่สาธารณรัฐเช็ก แต่ก็มีสำนักงานอยู่ในรัสเซียด้วย) ซึ่งเรารู้จักบริษัทนี้ในฐานะผู้สร้าง IntelliJ IDEA ซอฟต์แวร์ IDE ชื่อดังในโลกของ Java

JetBrains เห็นข้อจำกัดของภาษา Java (ที่ถือเป็นคนละส่วนกับ Java Platform และ JVM) จึงพัฒนาภาษาโปรแกรมตัวใหม่ขึ้นมาเพื่อใช้แทนภาษา Java แต่ยังคอมไพล์เป็นไบต์โค้ดเพื่อรันบน JVM อยู่เช่นเดิม

เนื่องจากทีมของ JetBrains ที่พัฒนาภาษานี้อยู่ที่เมืองเซนต์ปีเตอร์สเบิร์ก ประเทศรัสเซีย จึงนำชื่อของเกาะ Kotlin Island ที่อยู่ตรงอ่าวหน้าเมืองเซนต์ปีเตอร์สเบิร์ก มาตั้งเป็นชื่อภาษานั่นเอง (พิกัดเกาะ Kotlin ใน Google Maps)

ภาษา Kotlin ถือกำเนิดขึ้นในปี 2011 และค่อยๆ ได้รับความนิยมเพิ่มมากขึ้นในโลกของนักพัฒนาสาย Java เคียงคู่ไปกับภาษาตระกูล JVM ตัวอื่นๆ เช่น Groovy, Clojure, Scala

Kotlin ออกเวอร์ชัน 1.0 ในปี 2016 ส่วนเวอร์ชันปัจจุบันขณะที่เขียนข่าวนี้คือ 1.1.2 ที่เพิ่งออกในเดือนเมษายน 2017

No Description

หน้าตาของ Kotlin

เกริ่นกันมาพอสมควรแล้ว เพื่อไม่ให้เสียเวลาก็โชว์หน้าตาของ Kotlin กันดีกว่าครับ

Hello World

No Description

แบบยาวขึ้นมาอีกนิด

syntax ของ Kotlin เป็นลูกผสมของภาษาตระกูล C ที่ใช้วงเล็บปีกกา {} แต่ไม่จำเป็นต้องมี semicolon (;) เป็นตัวสิ้นสุดบรรทัด (จะใส่หรือไม่ใส่ก็ได้)

จุดต่างสำคัญอีกประการของ Kotlin คือการประกาศประเภทของตัวแปร (type) จะอยู่หลังชื่อตัวแปร (variable name) โดยมีเครื่องหมาย colon (:) คั่นกลาง เช่น a: Int หรือ s: String ตรงนี้จะคล้ายกับภาษาอย่าง Go หรือ TypeScript

สำหรับคนที่อยากลองเล่น Kotlin สามารถเข้าไปเล่นได้จากหน้าเว็บ Try Kotlin ที่มี console ให้เล่นจากหน้าเว็บได้โดยไม่ต้องติดตั้งโปรแกรมอะไรก่อน

แนวคิดของ Kotlin

Andrey Breslav หัวหน้าทีมออกแบบภาษา Kotlin ให้สัมภาษณ์ว่าตั้งใจออกแบบภาษา Kotlin ขึ้นมาเป็นภาษาใหม่เพื่อใช้แทนภาษา Java ที่มีจุดอ่อนหลายอย่าง แต่ไม่สามารถแก้ไขอะไรได้มากนักเพราะต้องทำ backward compatibility

ตอนแรก ทีมงาน JetBrains สำรวจว่ามีภาษาโปรแกรมที่ตรงกับความต้องการหรือไม่ และพบว่าในท้องตลาดมีเพียง Scala เท่านั้นที่ใกล้เคียงที่สุด แต่ปัญหาของ Scala คือคอมไพล์ช้าและเรียนรู้ยาก ส่งผลให้ทีมงานตัดสินใจสร้างภาษาใหม่ที่เข้าใจง่ายกว่าขึ้นมาแทน

แนวคิดของ Kotlin คือเข้ากันได้ 100% กับแพลตฟอร์ม Java เพื่อใช้ประโยชน์จากไลบรารี เฟรมเวิร์ค API และเครื่องมือจำนวนมากที่มีอยู่แล้วของโลก Java และสามารถผสมผสานโค้ดภาษา Java/Kotlin ได้ เป้าหมายของ Kotlin คือนำมาใช้แทน Java ในโครงการใหม่ๆ โดยรักษาโค้ด Java ในโครงการเก่าที่เขียนไปแล้ว แต่ก็ยังสามารถให้มันทำงานร่วมกันได้

Kotlin เป็นภาษาแบบ statically-typed หรือต้องประกาศชนิดของตัวแปรอย่างชัดแจ้งเสมอ ด้วยเหตุผลเรื่องความปลอดภัยจากปัญหาหน่วยความจำ (type safety) และประสิทธิภาพ ต่างไปจากภาษา Groovy, Jython, Ruby ที่เป็น dynamically-typed

จุดเด่นอีกประการของ Kotlin เหนือ Java คือสั้นกระชับกว่า ตัวเลขของ JetBrains ระบุว่าสามารถลดจำนวนโค้ดลงได้ 40% ถ้าเปลี่ยนโปรแกรมเดียวกันจาก Java เป็น Kotlin

ตัวอย่างโค้ดภาษา Java

ตัวอย่างโค้ดเดียวกันในภาษา Kotlin

ข้อมูลเพิ่มเติมอ่านได้จาก Infoworld, Oracle Technology Network

ใครใช้ Kotlin บ้าง

แพลตฟอร์ม

เดิมที Kotlin ออกแบบมาสำหรับแพลตฟอร์ม Java และคอมไพล์เพื่อรันบน JVM เป็นหลัก (Kotlin/JVM) แต่ในภายหลัง Kotlin ก็ขยายรูปแบบการใช้งานมาสู่ Android และแปลงเป็น JavaScript ได้ (Kotlin/JS)

ตอนนี้ทีมงาน Kotlin กำลังพัฒนาให้โปรแกรมภาษา Kotlin สามารถคอมไพล์ได้แบบเนทีฟ (Kotlin/Native) โดยไม่ต้องรันผ่าน virtual machine แต่อย่างใด

IDE

เครื่องมือ IDE ที่สนับสนุน Kotlin ก็หนีไม่พ้น IntelliJ IDEA ของบริษัท JetBrains เอง, มีปลั๊กอินสำหรับ Eclipse และปลั๊กอินสำหรับ Android Studio (ใน Android Studio 3.0 จะผนวกมาให้เลย ไม่ต้องมีปลั๊กอิน)

บริษัทที่นำ Kotlin ไปใช้งาน

บริษัทไอทีชื่อดังหลายราย ต่างนำ Kotlin ไปใช้งานในบางโปรเจคต์ เช่น Pinterest, Evernote, Uber, Pivotal, Atlassian, Expedia, Square เป็นต้น

No Description

ทำไมกูเกิลถึงสนับสนุน Kotlin

กูเกิลอธิบายว่าเหตุผลสำคัญที่เลือก Kotlin เป็นเพราะมันเข้ากันได้ 100% กับภาษา Java เดิม ช่วยให้หนึ่งโปรเจคต์สามารถผสมผสานโค้ดเก่าที่เป็น Java และโค้ดใหม่ที่เป็น Kotlin ได้ ช่วยลดงานของนักพัฒนาลง

เหตุผลอื่นๆ คือฟีเจอร์ของภาษา Kotlin เองทั้งในเรื่องความปลอดภัยและประสิทธิภาพ รวมถึงการยอมรับจากชุมชนนักพัฒนาด้วย

ประเด็นเรื่องเครื่องมือพัฒนาก็เป็นสิ่งที่กูเกิลให้ความสำคัญ เนื่องจาก Android Studio มีรากฐานมาจาก IntelliJ IDEA ที่เป็นโอเพนซอร์ส ทำให้มั่นใจได้ว่าการสนับสนุน Kotlin ใน IntelliJ IDEA จาก JetBrains ซึ่งเป็นบริษัทเดียวกัน ย่อมเดินหน้าต่อไปได้เป็นอย่างดี

สถานะของ Kotlin ในโลกของ Android

JetBrains จะเป็นฝ่ายเข้าไปพัฒนาฟีเจอร์ด้าน Kotlin ให้กับ Android Studio ร่วมกับทีมงานของกูเกิล และทั้งสองบริษัทจะร่วมกันตั้งมูลนิธิกลางมาดูแล Kotlin ต่อไปในฐานะองค์กรอิสระ (JetBrains ยืนยันว่าไม่ได้ขายบริษัทให้กูเกิลแน่นอน)

สถานะของ Kotlin ใน Android จะเป็นภาษาที่รองรับอย่างเป็นทางการเทียบเท่า Java (first-class supported language) ส่วนฟีเจอร์ของตัว IDE คือ Android Studio (เช่น autocomplete, refactorings) จะรองรับอย่างสมบูรณ์ในเวอร์ชัน 3.0

Kotlin ยังจะเรียกใช้โค้ด C++ ผ่าน JNI ได้เช่นเดียวกับ Java และตัว Android Studio จะสามารถแปลงโค้ด Java เป็น Kotlin ผ่านเมนู Code > Convert Java File to Kotlin File

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

ตัวอย่างโค้ด Android ในภาษา Kotlin

No Description

เริ่มต้นกับ Kotlin

ผู้ที่อยากเขียน Kotlin เฉยๆ สามารถเข้าไปดูรายละเอียดได้จาก เว็บไซต์ Kotlin

สำหรับคนที่อยากเขียนแอพ Android ด้วย Kotlin ตอนนี้ต้องดาวน์โหลด Android Studio 3.0 ที่ยังมีสถานะเป็นรุ่นทดสอบ (canary) แล้วเลือกให้รองรับภาษา Kotlin ได้เลย

No Description

ข้อมูลเพิ่มเติม:

Get latest news from Blognone

Comments

By: narok119
ContributoriPhone
on 18 May 2017 - 17:21 #987758

บริษัทที่ผมทำอยู่ ตอนแรกพยายามค่อยๆ ย้ายจาก Java มาใช้ Scala แล้วก็ไม่สำเร็จครับ
เพราะโดยรวมแล้วเรียนรู้ยากไป มีแค่บางทีมที่ใช้กันคล่องจริงๆ เลยถูกระดับตัดสินใจของฝั่ง Engineering บอกให้หยุดย้ายแล้วใช้ Java 8 แทน

แต่พอลองย้ายมา Kotlin แล้วดันโอเคกันซะงั้น
นี่ยังงงอยู่ว่าเป็นไปได้ไง แต่ก็เป็นเรื่องดีครับ แต่ยังแอบชอบ Scala มากว่าอยู่ดี

ใครที่อยากลองเรียนรู้ Kotlin วิธีที่เร็วและสนุกที่สุดคือผ่าน Kotlin-koans ครับ
https://kotlinlang.org/docs/tutorials/koans.html

เป็นคล้ายๆ Quiz ที่ให้ git clone มาทำในเครื่องเราเอง แบ่งออกเป็นบทๆ (หนึ่ง class = หนึ่งบท) ให้เราเขียนโปรแกรมลงไปใน class แล้วรัน unit test (ที่เขียนไว้เสร็จแล้ว) ให้ผ่าน พอผ่านแล้วก็ไปบทต่อไป

ทำแบบนี้ใช้เวลาไม่นานก็เขียน kotlin เป็นทันทีครับ ไม่เบื่อด้วย เพราะเหมือนนั่งทำ quiz มากกว่านั่งอ่านหนังสือ

By: ekaphop
iPhoneWindows PhoneAndroidBlackberry
on 18 May 2017 - 17:31 #987759 Reply to:987758

ขอบคุณครับผม ;)

By: mrmamon
ContributorAndroidWindows
on 18 May 2017 - 18:06 #987760 Reply to:987758

ดีเลยครับ ขอบคุณครับ หลังจากดู IO เมื่อคืนวันนี้ก็นั่งอ่าน Kotlin อยู่เหมือนกัน เจอแบบนี้น่าจะไปไวขึ้นอีก

By: whitebigbird
Contributor
on 18 May 2017 - 19:19 #987769 Reply to:987758
whitebigbird's picture

ขอบคุณครับ เสาร์อาทิตย์นี้มีของเล่นใหม่แล้ว

By: acharat on 19 May 2017 - 17:16 #987931 Reply to:987758

ถ้าอยากเริ่มเรียน ภาษา Kotlin จะต้องมีพื้นฐานอะไรมาบ้างครับ
หรือ สามารถเริ่มเรียนได้เลย
จากคนที่ไม่เคยเขียนโปรแกรมมาก่อนครับ

By: Mypandacm on 12 September 2018 - 16:05 #1070353 Reply to:987758
Mypandacm's picture

บริษัทที่ผมทำก้ใช้ Scala ครับ เรียนรู้ยากจริง แต่พอทำเป็นเเล้ว ฟินมากครับ ชอบในรูปแบบ ความท่ายาก ท่าง่าย ท่าที่ภาษาอื่นทำไม่ได้ โดยเฉพาะ จาวา
พอผมกลับมาเขียนแอนดรอยด์แล้วแอบหงุดหงิดในความเยอะ วุ่นวาย ของภาษา จาวา ทั้งๆ ที่ก่อนหน้านี้ไม่เคยบ่น 555 ตอนนี้ก็เริ่มหัด Kotlin ล่ะครับ

By: Jirawat
Android
on 18 May 2017 - 18:26 #987762
Jirawat's picture

ต้องจัดซักหน่อยแล้ว

By: takato
iPhoneWindows PhoneAndroidBlackberry
on 18 May 2017 - 18:29 #987763
takato's picture

ลองให้ google translator อ่าน kotlin ภาษาไทยบอก โขด-ลิน ภาษาอังกฤษบอก คอทแลน

ตกลงอ่านออกเสียงว่าอย่างไรหรือครับผม?

By: Jaddngow
AndroidUbuntuWindows
on 18 May 2017 - 18:36 #987764 Reply to:987763
Jaddngow's picture

โค-ตะ-ลิน

By: maxmin on 18 May 2017 - 18:50 #987765

java = เกาะชวา
kotlin = เกาะก๊อตลิน

By: dafty
AndroidWindowsIn Love
on 18 May 2017 - 19:18 #987768

ผมว่ามันแอบเหมือน Swift อยู่เหมือนกันนะ

By: mr_tawan
ContributoriPhoneAndroidWindows
on 18 May 2017 - 20:15 #987770
mr_tawan's picture

ผมเคยอ่านเจอว่า ทีม Eclipse เคยพยายามเสนอ Xtend ไปให้ทีม Android ดูอยู่แต่เหมือนกับว่าไม่ได้รับความสนใจเอาซะเลย ทั้ง ๆ ที่จริง ๆ ก็ทำได้พอ ๆ กับ Kotlin ตอนนี้ ทั้งเรื่องความเข้ากันได้และฟีเจอร์ของภาษา

ส่วนนึงเดาว่า คงเพราะ Eclipse เองไม่ค่อยดันเท่าไหร่ด้วย (ทีมที่ใช้จริง ๆ จัง ๆ ก็มีแค่ทีม XText ที่เป็นคนสร้างเอง) ใช้ Dependency เยอะ และมีฟีเจอร์บางตัวที่ใช้งานลำบากกว่าภาษา Java เช่นการทำ bit-wise operator หรือ array (แต่ผมชอบ syntax array ของ Xtend นะ)

อีกส่วนคงเพราะเห็นว่า ตอน transpile ไปเป็น java แล้วโค๊ดมันดูไม่ค่อยดี อาจจะเกรงเรื่องของ performance มั้ง ?

ส่วน Kotlin นี่ ฝั่ง Jetbrains ดันเต็มตัว ก็เลยได้รับความนิยมมากกว่า


  • 9tawan.net บล็อกส่วนตัวฮับ
By: sukjai
iPhoneAndroidRed HatUbuntu
on 18 May 2017 - 20:44 #987772

หน้าตาภาษาสวยดีครับ กำหนด type เหมือน pascal เลย

By: skyieo
Android
on 18 May 2017 - 20:51 #987773

แจ้งคำผิดครับ
เคียงคู่ไปกับภาษาตระกูล JVM ตัวอื่นๆ เช่น Groovy, Closure, Scala
เคียงคู่ไปกับภาษาตระกูล JVM ตัวอื่นๆ เช่น Groovy, Clojure, Scala
ตัว s เป็นตัว j ครับ
Clojure ก็เป็นอีกภาษานึงที่นักพัฒนาไทยเริ่มใจกันแล้วน่ะครับ

By: mk
FounderAndroid
on 18 May 2017 - 21:06 #987776 Reply to:987773
mk's picture

แก้ตามนั้น ขอบคุณครับ

By: pruet
WriterAndroidRed HatUbuntu
on 18 May 2017 - 21:22 #987779
pruet's picture

ตัวอย่างโค้ตภาษา kotlin ที่เทียบกับ java มันมีอยู่แค่บรรทัดเดียวจริงๆเหรอครับ

By: whitebigbird
Contributor
on 18 May 2017 - 21:43 #987784 Reply to:987779
whitebigbird's picture

ในทางเทคนิคแล้ว JavaScript ที่ minified แล้วก็บรรทัดเดียวนะครับ

ขอโทษครับ ผมเมาโค้ด

By: Hadakung
iPhoneWindows PhoneAndroidWindows
on 18 May 2017 - 23:07 #987802 Reply to:987779

Java มันต้องสร้าง method set get เองครับ มันเลยบานตะไทขนาดนั้น

By: mr_tawan
ContributoriPhoneAndroidWindows
on 18 May 2017 - 23:31 #987808 Reply to:987779
mr_tawan's picture

คือ ฝั่ง Java นี่เป็น Boilerplate ซะเยอะ (ดูแล้วมันเป็น Java Bean) พอจับมาเป็น Kotlin ก็ย่อหายไปเยอะครับ แต่ถ้าเป็น Code ที่เป็น Logic ก็คงไม่สั้นกว่าขนาดนั้น

ถ้าใช้พวก Annotation Processor บางตัว อย่าง Project Lombok ก็ตัด Boilerplate ทิ้งไปได้เยอะเหมือนกันครับ เพียงแต่ว่าไอ้ Project Lombok มันดันไปใช้ Private API ของตัวคอมไพล์เลอร์ทำให้อาจจะมีปัญหาในอนาคตได้

ยกตัวอย่างประมาณนี้ (อันนี้ผมไม่ได้เทสต์นะ)

import lombok.Data;

@Data public class Customer {
  private String name;
  private String email = "";
  private String company = "";
}

ทั้งนี้เจ้านี่มีเรื่องวุ่นวายเยอะครับ ... ผมล่ะคนนึงไม่ค่อยชอบเท่าไหร่ เล่นภาษา JVM ไปเลยน่าจะดีกว่า


  • 9tawan.net บล็อกส่วนตัวฮับ
By: mk
FounderAndroid
on 19 May 2017 - 08:26 #987826 Reply to:987779
mk's picture

อันนี้เป็นโค้ดของกูเกิลเองครับ ตามลิงก์ที่ให้ไว้ท้ายบทความ

By: syootakarn
iPhoneWindows PhoneAndroidBlackberry
on 18 May 2017 - 21:57 #987789
syootakarn's picture

เป้าหมายหลักของ Google สำหรับ Kotlin น่าจะอยู่ที่ Native ครับ เพราะมันทะลายกำแพง
ความยุ่งยากของ Android NDK ที่ใช้ C/C++ เพราะ NDK พัฒนาไม่ค่อยคืบหน้ามาก
ถ้าเลือกไปใช้ Kotlin จะได้ประโยชน์หลายๆ อย่างเช่น Kotlin มี Application Framework ค่อนข้างเยอะ
เป็นทางเลือกแทน NDK ได้อีกทาง และเป็นทางด่วนอีกต่างหาก

By: mr_tawan
ContributoriPhoneAndroidWindows
on 19 May 2017 - 11:44 #987862 Reply to:987789
mr_tawan's picture

เอาจริง ๆ จุดประสงค์ของ NDK คือการใช้โค๊ดเก่า กับการแชร์โค๊ดกับแพลตฟอร์มอื่น (เช่น iOS, Windows) ครับ Google เหมือนจะไม่แนะนำให้เขียนโค๊ดใหม่ด้วย NDK เลย

ซึ่งมองว่า Kotlin ไม่น่าจะช่วยอะไรในกรณีนี้


  • 9tawan.net บล็อกส่วนตัวฮับ
By: nhongcm77 on 18 May 2017 - 23:48 #987811

ตอนแรกผมตาลายอ่านเป็นภาษา ก๊อปลิน ครับ เกือบเอาแหวนซ่อนไม่ทัน

By: Aoun
AndroidWindows
on 19 May 2017 - 09:39 #987847 Reply to:987811

"ก๊อปลิน"ของผมต้องดึงดาบออกจากอก"ลุง" เท่านั้น

By: iCyLand
iPhoneAndroidRed HatUbuntu
on 19 May 2017 - 12:38 #987871 Reply to:987847
iCyLand's picture

เดี๋ยว "ยมทูต" มารับ

By: awachai
Android
on 19 May 2017 - 08:41 #987831
awachai's picture

แล้วภาษา GO หล่ะครับ ได้ไปต่อใน android ไหมหล่ะเนี่ย ของกูเกิลเองแท้ๆเลย

By: mr_tawan
ContributoriPhoneAndroidWindows
on 19 May 2017 - 11:42 #987861 Reply to:987831
mr_tawan's picture

Go น่าจะยากครับ ต้องเขียน binding ใหม่เยอะอยู่


  • 9tawan.net บล็อกส่วนตัวฮับ
By: Alios
iPhoneAndroidWindows
on 19 May 2017 - 09:31 #987846

Java ร่างอัพเกรด คู่แข่ง Swift

By: acharat on 19 May 2017 - 17:17 #987932

ถ้าอยากเริ่มเรียน ภาษา Kotlin จะต้องมีพื้นฐานอะไรมาบ้างครับ
หรือ สามารถเริ่มเรียนได้เลย
จากคนที่ไม่เคยเขียนโปรแกรมมาก่อนครับ

By: diewland
AndroidWindows
on 21 May 2017 - 17:48 #988179 Reply to:987932
diewland's picture

ลุยได้เลยคับ ติดอะไรก็ค่อยแก้ค่อยหาวิธีกันไป
ก้าวแรกสำคัญเสมอ สู้ๆคับ

By: neonicus
Android
on 22 May 2017 - 14:42 #988296

ไม่เคยเขียน java ข้ามไป kotlin เลยดีมั๊ยครับ
ปลพื้นฐาน ANSI C ครับไม่ใช่ C++ เสียด้วย