เรียนรู้ Kotlin part 1

Phai Panda
2 min readMay 9, 2019

--

ผมเริ่มศึกษาภาษา 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) นั่นเอง

ทีนี้ผมอยากให้เพื่อนมาดูรูปนี้กัน

จาก https://www.manning.com/books/kotlin-in-action

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 ครับ

อ่านเรื่องอื่นๆ

--

--

No responses yet