เรียนรู้ Kotlin part 1
ผมเริ่มศึกษาภาษา Kotlin นี้ก็ที่เวอร์ชัน 1.3.31 แล้ว คือจะเอาไปเขียน Spring Boot กับ Android ครับ
ส่วนตัวเป็นคนขี้สงสัย ปกติศึกษา Kotlin ก็จะเริ่มกับ IDEA อย่าง IntelliJ จึงคิดว่าไหนๆก็ได้มาเขียนบทความนี้แล้ว เรามาเริ่มที่ Command Line (ใน macOS คือ Terminal) เลยน่าจะท้าทายกว่า
บอกก่อนผมใช้ macOs เวอร์ชัน Mojave นะครับ เผื่อว่าเพื่อนๆคนไหนอยากลองทำตามแต่ใช้ Windows อย่างนั้น environment เราย่อมต่างกัน พาลเกิด error ก็อย่าดุผมล่ะ
เรามาเริ่มกันที่หน้านี้
https://kotlinlang.org/docs/tutorials/command-line.html
เขาพูดว่ามีหลายวิธีนะที่จะติดตั้ง Kotlin ผมเลือกแบบ Manual Install จึงเลือกดาวน์โหลด source จาก GitHub Releases
จากนั้นเลื่อนลงมาจนเกือบจะสุดหน้าจะพบกับ Kotlin Assets เลือก .zip
kotlin-compiler-1.3.31.zip
ผมได้ย้าย .zip ที่โหลดมาไปไว้ที่ Home ดังนี้
/Users/pros
ถัดมาคือการ Set Path ซึ่ง Windows กับ macOS กำหนดต่างกัน การ Set Path ทำเพื่อให้ OS รู้จักแหล่งของโปรแกรมที่เราต้องการอ้างอิงถึง ตัวอย่างเช่นโปรแกรม kotlinc เพื่อ compile โปรแกรมภาษา Kotlin
สำหรับเครื่อง Windows ให้ค้นหาวิธี Set Path เอง (เชื่อว่าทำได้ ถ้าเคยติดตั้งจาวา 1.8 มาแล้ว) ส่วน macOS ผมได้สร้างไฟล์ชื่อ .bash_profile ไว้ที่ Home จากคำสั่ง
touch .bash_profile
ใช้โปรแกรม vi เปิดไฟล์ดังกล่าว (พื้นฐานคำสั่ง vi ที่นี่)
vi .bash_profile
ใน vi กด i เพื่อแก้ไข (insert mode) เพิ่ม path ไปยังโปรแกรม kotlinc
export PATH=”$PATH:`pwd`/kotlin-native-macos-1.3.31/bin”
ออกจาก vi ด้วย Shift + ; พิมพ์ wq (คือ write และ quit)
แล้ว reload ไฟล์ .bash_profile ด้วย
source .bash_profile
ทดสอบเรียก kotlinc
kotlinc -help
ที่ Home ผมสร้างไฟล์ชื่อ hello.kt อยู่ใน folder ชื่อ my-kotlin/hello อีกที จากนั้นเขียน main function ของ Kotlin ด้วย vi ตามนี้
fun main(args: Array<String>) {
println(“Hello, World!”)
}
บันทึกแล้วออกจาก vi
สั่ง kotlinc compile ไฟล์ hello.kt
kotlinc hello.kt
ผลลัพธ์ที่ได้
เพื่อนๆจะเห็นว่าที่สุดแล้วเราก็ได้ไฟล์นามสกุล .class ซึ่งเป็นไปตามแนวทางของภาษาที่ทำงานได้บน JVM (เช่นเดียวกับภาษา Java) คือได้ Bytecode (.class files) นั่นเอง
ทีนี้ผมอยากให้เพื่อนมาดูรูปนี้กัน
kotlinc ก็คือ Kotlin Compilter ทำงานแล้วได้ไฟล์นามสกุล .class เราสามารถห่อประดา .class ทั้งหลายได้เป็นไฟล์นามสกุล .jar ด้วยคำสั่ง
kotlinc hello.kt -d hello.jar
-d
นี้เขาว่าเป็นการบอกกับ kotlinc ว่าจะให้สร้างผลลัพธ์อยู่ใน directory ชื่อและนามสกุลอะไร (ซึ่งภายในก็จะมี .class นั่นแหละ) ในกรณีนี้คือจะได้ hello.jar เป็นผลลัพธ์
ทีนี้หากเราสั่ง execute ไฟล์ .jar เช่น
java -jar hello.jar
เพราะเราเรียกโปรแกรม java มาอ่าน .jar มันจึงแจ้ง error ว่า
Exception in thread “main” java.lang.NoClassDefFoundError: kotlin/jvm/internal/Intrinsics at HelloKt.main(hello.kt)
เหตุผลคือ
java.lang.ClassNotFoundException: kotlin.jvm.internal.Intrinsics
ดูจากรูปข้างต้นเพื่อนๆจะเห็นว่ามันจำเป็นต้องมี Kotlin Runtime เข้ามาช่วย คือใส่เข้าไปใน .jar ด้วย ดังนั้นให้บอกแก่ kotlinc ว่าเพิ่ม (kotlin) runtime นะ ดังนี้
kotlinc hello.kt -include-runtime -d hello.jar
ทีนี้ลองใหม่
java -jar hello.jar
Hello, World!
มาถึงตรงนี้เราก็มีความเข้าใจว่าสามารถใช้ Terminal หรือ Command Line เขียนและรันโปรแกรม Kotlin ได้ ทว่าหากต้องจัดการกับโปรแกรมที่มีความซับซ้อนมากขึ้น ผมก็แนะนำและยินดี (อย่างยิ่ง) ที่จะเชื้อเชิญให้ใช้เครื่องมืออย่าง IntelliJ IDEA ครับ
โอกาสหน้าผมจะมาเล่าเกี่ยวกับ Kotlin syntax พร้อมกับตัวอย่างการสร้าง web site ที่แยก front และ back ends ผ่าน RESTful API ครับ