Kotlin

ข่าวสำคัญของโลกโปรแกรมมิ่งวันนี้คือ 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

หน้าตาของ Kotlin

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

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

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](http://www.infoworld.com/article/2622405/java/jetbrains-readies-jvm-based-language.html), [Oracle Technology Network](http://www.oracle.com/technetwork/articles/java/breslav-1932170.html)

ใครใช้ 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 เป็นต้น

ทำไมกูเกิลถึงสนับสนุน 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

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

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

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

Hiring! บริษัทที่น่าสนใจ

Carmen Software company cover
Carmen Software
Hotel Financial Solutions
Next Innovation (Thailand) Co., Ltd. company cover
Next Innovation (Thailand) Co., Ltd.
We are web design with consulting & engineering services driven the future stronger and flexibility.
KKP Dime company cover
KKP Dime
KKP Dime บริษัทในเครือเกียรตินาคินภัทร
Kiatnakin Phatra Financial Group company cover
Kiatnakin Phatra Financial Group
Financial Service
Fastwork Technologies company cover
Fastwork Technologies
Fastwork.co เว็บไซต์ที่รวบรวม ฟรีแลนซ์ มืออาชีพจากหลากหลายสายงานไว้ในที่เดียวกัน
Thoughtworks Thailand company cover
Thoughtworks Thailand
Thoughtworks เป็นบริษัทที่ปรึกษาด้านเทคโนโยลีระดับโลกที่คว้า Great Place to Work 3 ปีซ้อน
Iron Software company cover
Iron Software
Iron Software is an American company providing a suite of .NET libraries by engineer for engineers.
CLEVERSE company cover
CLEVERSE
Cleverse is a Venture Builder. Our team builds several tech companies.
Nipa Cloud company cover
Nipa Cloud
#1 OpenStack cloud provider in Thailand with our own data center and software platform.
Bangmod Enterprise company cover
Bangmod Enterprise
The leader in Cloud Server and Hosting in Thailand.
CIMB THAI Bank company cover
CIMB THAI Bank
MOVING FORWARD WITH YOU - CIMB is the leading ASEAN Bank
Bangkok Bank company cover
Bangkok Bank
Bangkok Bank is one of Southeast Asia's largest regional banks, a market leader in business banking
MuvMi (Urban Mobility Tech Co.,Ltd.) company cover
MuvMi (Urban Mobility Tech Co.,Ltd.)
Shape the future of urban mobility towards affordable, clean, and safe solutions
T.N. Digital Solution Co., Ltd. company cover
T.N. Digital Solution Co., Ltd.
TNDS has been involving in every first move of banking’s major digital transformation.
KBTG - KASIKORN Business-Technology Group company cover
KBTG - KASIKORN Business-Technology Group
KBTG - "The Technology Company for Digital Business Innovation"
Siam Commercial Bank Public Company Limited company cover
Siam Commercial Bank Public Company Limited
"Let's start a brighter career future together"
Icon Framework co.,Ltd. company cover
Icon Framework co.,Ltd.
Global Standard Platform for Real Estate แพลตฟอร์มสำหรับธุรกิจอสังหาริมทรัพย์ครบวงจร มาตรฐานระดับโลก
REFINITIV company cover
REFINITIV
The Financial and Risk business of Thomson Reuters is now Refinitiv
H LAB company cover
H LAB
Re-engineering healthcare systems through intelligent platforms and system design.
The Gang Technology Co., Ltd. company cover
The Gang Technology Co., Ltd.
We're a Digital Agency that helps our customers transform their business into digital with ease.
LTMH company cover
LTMH
LTMH มุ่งเน้นการพัฒนาผลิตภัณฑ์ที่สามารถช่วยพันธมิตรของเราให้บรรลุเป้าหมาย
Seven Peaks company cover
Seven Peaks
We Drive Digital Transformation
Wisesight (Thailand) Co., Ltd. company cover
Wisesight (Thailand) Co., Ltd.
The Best Choice For Handling Social Media · High Expertise in Social Data · Most Advanced and Secure
MOLOG Tech company cover
MOLOG Tech
We are Modern Logistic Platform, Specialize in WMS, OMS and TMS.
Data Wow Co.,Ltd company cover
Data Wow Co.,Ltd
We enable our clients to realize increased productivity by solving their most complex issues by Data
LINE Company Thailand company cover
LINE Company Thailand
LINE, the world's hottest mobile messaging platform, offers free text and voice messaging + Call
LINE MAN Wongnai company cover
LINE MAN Wongnai
Join our journey to becoming No.1 food platform in Thailand

บริษัทที่ผมทำอยู่ ตอนแรกพยายามค่อยๆ ย้ายจาก 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 มากกว่านั่งอ่านหนังสือ

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

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

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

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

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

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

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

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

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

คือ ฝั่ง 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 ไปเลยน่าจะดีกว่า

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

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

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

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