ข่าวสำคัญของโลกโปรแกรมมิ่งวันนี้คือ 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 ให้เล่นจากหน้าเว็บได้โดยไม่ต้องติดตั้งโปรแกรมอะไรก่อน
You've been waiting for this: Google just announced that Kotlin has become a first-class language on Android! https://t.co/4OMODKPIy7 pic.twitter.com/M9IEYmfO8s
— Kotlin (@kotlin) May 17, 2017
แนวคิดของ 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 เป็นต้น
ทำไมกูเกิลถึงสนับสนุน 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 ได้เลย
ข้อมูลเพิ่มเติม:
Comments
บริษัทที่ผมทำอยู่ ตอนแรกพยายามค่อยๆ ย้ายจาก 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 มากกว่านั่งอ่านหนังสือ
ขอบคุณครับผม ;)
ดีเลยครับ ขอบคุณครับ หลังจากดู IO เมื่อคืนวันนี้ก็นั่งอ่าน Kotlin อยู่เหมือนกัน เจอแบบนี้น่าจะไปไวขึ้นอีก
ขอบคุณครับ เสาร์อาทิตย์นี้มีของเล่นใหม่แล้ว
ถ้าอยากเริ่มเรียน ภาษา Kotlin จะต้องมีพื้นฐานอะไรมาบ้างครับ
หรือ สามารถเริ่มเรียนได้เลย
จากคนที่ไม่เคยเขียนโปรแกรมมาก่อนครับ
บริษัทที่ผมทำก้ใช้ Scala ครับ เรียนรู้ยากจริง แต่พอทำเป็นเเล้ว ฟินมากครับ ชอบในรูปแบบ ความท่ายาก ท่าง่าย ท่าที่ภาษาอื่นทำไม่ได้ โดยเฉพาะ จาวาพอผมกลับมาเขียนแอนดรอยด์แล้วแอบหงุดหงิดในความเยอะ วุ่นวาย ของภาษา จาวา ทั้งๆ ที่ก่อนหน้านี้ไม่เคยบ่น 555 ตอนนี้ก็เริ่มหัด Kotlin ล่ะครับ
ต้องจัดซักหน่อยแล้ว
ลองให้ google translator อ่าน kotlin ภาษาไทยบอก โขด-ลิน ภาษาอังกฤษบอก คอทแลน
ตกลงอ่านออกเสียงว่าอย่างไรหรือครับผม?
โค-ตะ-ลิน
java = เกาะชวาkotlin = เกาะก๊อตลิน
ผมว่ามันแอบเหมือน Swift อยู่เหมือนกันนะ
ผมเคยอ่านเจอว่า ทีม Eclipse เคยพยายามเสนอ Xtend ไปให้ทีม Android ดูอยู่แต่เหมือนกับว่าไม่ได้รับความสนใจเอาซะเลย ทั้ง ๆ ที่จริง ๆ ก็ทำได้พอ ๆ กับ Kotlin ตอนนี้ ทั้งเรื่องความเข้ากันได้และฟีเจอร์ของภาษา
ส่วนนึงเดาว่า คงเพราะ Eclipse เองไม่ค่อยดันเท่าไหร่ด้วย (ทีมที่ใช้จริง ๆ จัง ๆ ก็มีแค่ทีม XText ที่เป็นคนสร้างเอง) ใช้ Dependency เยอะ และมีฟีเจอร์บางตัวที่ใช้งานลำบากกว่าภาษา Java เช่นการทำ bit-wise operator หรือ array (แต่ผมชอบ syntax array ของ Xtend นะ)
อีกส่วนคงเพราะเห็นว่า ตอน transpile ไปเป็น java แล้วโค๊ดมันดูไม่ค่อยดี อาจจะเกรงเรื่องของ performance มั้ง ?
ส่วน Kotlin นี่ ฝั่ง Jetbrains ดันเต็มตัว ก็เลยได้รับความนิยมมากกว่า
หน้าตาภาษาสวยดีครับ กำหนด type เหมือน pascal เลย
แจ้งคำผิดครับ
เคียงคู่ไปกับภาษาตระกูล JVM ตัวอื่นๆ เช่น Groovy, Closure, Scala
เคียงคู่ไปกับภาษาตระกูล JVM ตัวอื่นๆ เช่น Groovy, Clojure, Scala
ตัว s เป็นตัว j ครับ
Clojure ก็เป็นอีกภาษานึงที่นักพัฒนาไทยเริ่มใจกันแล้วน่ะครับ
แก้ตามนั้น ขอบคุณครับ
ตัวอย่างโค้ตภาษา kotlin ที่เทียบกับ java มันมีอยู่แค่บรรทัดเดียวจริงๆเหรอครับ
ในทางเทคนิคแล้ว JavaScript ที่ minified แล้วก็บรรทัดเดียวนะครับ
ขอโทษครับ ผมเมาโค้ด
Java มันต้องสร้าง method set get เองครับ มันเลยบานตะไทขนาดนั้น
คือ ฝั่ง Java นี่เป็น Boilerplate ซะเยอะ (ดูแล้วมันเป็น Java Bean) พอจับมาเป็น Kotlin ก็ย่อหายไปเยอะครับ แต่ถ้าเป็น Code ที่เป็น Logic ก็คงไม่สั้นกว่าขนาดนั้น
ถ้าใช้พวก Annotation Processor บางตัว อย่าง Project Lombok ก็ตัด Boilerplate ทิ้งไปได้เยอะเหมือนกันครับ เพียงแต่ว่าไอ้ Project Lombok มันดันไปใช้ Private API ของตัวคอมไพล์เลอร์ทำให้อาจจะมีปัญหาในอนาคตได้
ยกตัวอย่างประมาณนี้ (อันนี้ผมไม่ได้เทสต์นะ)
ทั้งนี้เจ้านี่มีเรื่องวุ่นวายเยอะครับ ... ผมล่ะคนนึงไม่ค่อยชอบเท่าไหร่ เล่นภาษา JVM ไปเลยน่าจะดีกว่า
อันนี้เป็นโค้ดของกูเกิลเองครับ ตามลิงก์ที่ให้ไว้ท้ายบทความ
เป้าหมายหลักของ Google สำหรับ Kotlin น่าจะอยู่ที่ Native ครับ เพราะมันทะลายกำแพง
ความยุ่งยากของ Android NDK ที่ใช้ C/C++ เพราะ NDK พัฒนาไม่ค่อยคืบหน้ามากถ้าเลือกไปใช้ Kotlin จะได้ประโยชน์หลายๆ อย่างเช่น Kotlin มี Application Framework ค่อนข้างเยอะ
เป็นทางเลือกแทน NDK ได้อีกทาง และเป็นทางด่วนอีกต่างหาก
เอาจริง ๆ จุดประสงค์ของ NDK คือการใช้โค๊ดเก่า กับการแชร์โค๊ดกับแพลตฟอร์มอื่น (เช่น iOS, Windows) ครับ Google เหมือนจะไม่แนะนำให้เขียนโค๊ดใหม่ด้วย NDK เลย
ซึ่งมองว่า Kotlin ไม่น่าจะช่วยอะไรในกรณีนี้
ตอนแรกผมตาลายอ่านเป็นภาษา ก๊อปลิน ครับ เกือบเอาแหวนซ่อนไม่ทัน
"ก๊อปลิน"ของผมต้องดึงดาบออกจากอก"ลุง" เท่านั้น
เดี๋ยว "ยมทูต" มารับ
แล้วภาษา GO หล่ะครับ ได้ไปต่อใน android ไหมหล่ะเนี่ย ของกูเกิลเองแท้ๆเลย
Go น่าจะยากครับ ต้องเขียน binding ใหม่เยอะอยู่
Java ร่างอัพเกรด คู่แข่ง Swift
ถ้าอยากเริ่มเรียน ภาษา Kotlin จะต้องมีพื้นฐานอะไรมาบ้างครับ
หรือ สามารถเริ่มเรียนได้เลย
จากคนที่ไม่เคยเขียนโปรแกรมมาก่อนครับ
ลุยได้เลยคับ ติดอะไรก็ค่อยแก้ค่อยหาวิธีกันไปก้าวแรกสำคัญเสมอ สู้ๆคับ
ไม่เคยเขียน java ข้ามไป kotlin เลยดีมั๊ยครับปลพื้นฐาน ANSI C ครับไม่ใช่ C++ เสียด้วย