Pada artikel instalasi perlengkapan coding kotlin, penulis telah membahas sedikit mengenai bagaimana cara instalasi kotlin dengan sdkman. Oke, pada artikel ini, penulis akan membahas mengenai dasar - dasar dari bahasa pemrograman kotlin. Project yang akan kita buat adalah berbasis gradle, jika anda pengguna linux dan windows silahkan ikutin tutorial langsung dari websitenya disini. Untuk penggunakan OSX, anda dapat melakukan instalasi dengan bantuan Homebrew seperti berikut.
brew install gradleSeperti biasa, penulis menggunakan IDE IntelliJ IDEA, anda dapat menggunakan versi community maupun versi ultimate karena dua - dua nya telah mendukung bahasa pemrograman kotlin.
Silahkan buka IDE anda, lalu untuk membuat sebuah project silahkan pilih menu create new project, lalu pilih gradle dan cek list di bagian kotlin seperti gambar berikut.

Lalu pilih next, di bagian groupid silahkan isikan org.rizki.mufrizal.belajar.kotlin dan pada bagian artifact nya isikan dengan Belajar-Kotlin, lalu klik next hingga akan muncul project location, silahkan sesuaikan dengan folder project anda dan klik finish. Berikut adalah project yang berhasil digenerate oleh IntelliJ IDEA.

Secara default, project belum memiliki package untuk class - class kotlin, silahkan akses project anda dengan menggunakan terminal, lalu jalankan perintah berikut.
mkdir -p src/main/kotlin/org/rizki/mufrizal/belajarKotlin
mkdir -p src/test/kotlin/org/rizki/mufrizal/belajarKotlinSilahkan lihat kembali project anda yang ada di IntelliJ IDEA, maka akan terbentuk 2 sub directory dari src yaitu main untuk source code nya, sedangkan test untuk keperluan testing. Langkah selanjutnya silahkan buka file build.gradle lalu ubah menjadi seperti berikut.
group "org.rizki.mufrizal.belajar.kotlin"
version "1.0-SNAPSHOT"
buildscript {
ext.kotlin_version = "1.1.2-4"
repositories {
mavenCentral()
}
dependencies {
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
classpath "org.junit.platform:junit-platform-gradle-plugin:1.0.0-M4"
}
}
apply plugin: "kotlin"
apply plugin: "org.junit.platform.gradle.plugin"
junitPlatform {
filters {
engines {
include "spek"
}
}
}
repositories {
mavenCentral()
maven { url "http://dl.bintray.com/jetbrains/spek" }
}
dependencies {
compile "org.jetbrains.kotlin:kotlin-stdlib-jre8:$kotlin_version"
testCompile "com.winterbe:expekt:0.5.0"
testCompile "org.jetbrains.kotlin:kotlin-reflect:$kotlin_version"
testCompile("org.jetbrains.spek:spek-api:1.1.2") {
exclude group: "org.jetbrains.kotlin"
}
testRuntime("org.jetbrains.spek:spek-junit-platform-engine:1.1.2") {
exclude group: "org.junit.platform"
exclude group: "org.jetbrains.kotlin"
}
}Pada konfigurasi diatas, terdapat beberapa tambahan yaitu penulis menambahkan library test untuk kotlin yang disupport langsung dari jetbrains yaitu spekframework. Untuk fungsi assert, penulis menggunakan framework expekt.
Silahkan buat sebuah class App di dalam package org.rizki.mufrizal.belajarKotlin, silahkan sesuaikan dengan package anda, lalu masukkan codingan seperti berikut.
package org.rizki.mufrizal.belajarKotlin
import java.math.BigDecimal
/**
* Created by rizkimufrizal on 6/3/17.
*/
class App {
fun extensionMoney(extension: String, money: BigDecimal): String {
return "$extension $money"
}
companion object {
@JvmStatic
fun main(args: Array<String>) {
val money = App().extensionMoney(extension = "Rp", money = BigDecimal(5000))
println("saya mempunyai uang sebesar $money")
}
}
}Berikut adalah beberapa penjelasan dari codingan diatas :
funberfungsi untuk mendeklarasikan sebuah function / method pada kotlin. Jika anda tidak mendeklarasikan sebuah type data maka secara default method tersebut adalah berupaUnitatauvoid."$extension $money"adalah contoh dari string interpolation, sehingga yang memiliki tanda$akan dieksekusi.companion objectsebagai static jika anda menggunakan bahasa pemrograman java.@JvmStaticjuga sebagai static, akan tetapi berbeda dengan companion object, dimana companion object hanya dapat diakses melalui instance, sedangkan jika menggunakan@JvmStaticmaka anda dapat langsung memanggil suatu fungsi dari class nya langsung. Contoh penggunaan ini akan dibahas pada artikel selanjutnya.valberfungsi untuk mendeklarasikan variabel yang bersifat immutable / jika object nya telah dibuat maka isi dari vaeriabel tersebut tidak dapat dirubah, sedangkanvarkebalikan darivalyaitu bersifat mutable.moneyadalah variabel dengan type data string. Mengapa type string ? karena return dari functionextensionMoneyadalah string. Tanpa mendeklarasikan type data, kotlin dapat dengan mudah menebak type data yang ada di dalam variabelmoney.
Untuk menjalankan codingan diatas, silahkan klik pada icon kotlin dibagian kiri, lalu pilih menu run seperti berikut.

Oke, langkah selanjutnya kita akan melakukan test, silahkan buat sebuah file AppTest di dalam package test anda. Lalu masukkan codingan seperti berikut.
package org.rizki.mufrizal.belajarKotlin
import com.winterbe.expekt.should
import org.jetbrains.spek.api.Spek
import org.jetbrains.spek.api.dsl.given
import org.jetbrains.spek.api.dsl.it
import org.jetbrains.spek.api.dsl.on
import java.math.BigDecimal
/**
* Created by rizkimufrizal on 6/3/17.
*/
class AppTest : Spek({
given("a extension money") {
val app = App()
on("set extension and money") {
val money = BigDecimal(7000)
val extensionMoney = app.extensionMoney("Rp", money)
it("should return extension and money") {
extensionMoney.should.equal("Rp $money")
}
}
}
})Untuk menjalankan test diatas, silahkan akses project anda dengan terminal lalu jalankan perintah berikut.
gradle testJika berhasil maka akan muncul output seperti berikut.
:compileKotlin UP-TO-DATE
:compileJava NO-SOURCE
:copyMainKotlinClasses UP-TO-DATE
:processResources NO-SOURCE
:classes UP-TO-DATE
:compileTestKotlin
Using kotlin incremental compilation
:compileTestJava NO-SOURCE
:copyTestKotlinClasses UP-TO-DATE
:processTestResources NO-SOURCE
:testClasses UP-TO-DATE
:junitPlatformTest
Test run finished after 5066 ms
[ 4 containers found ]
[ 0 containers skipped ]
[ 4 containers started ]
[ 0 containers aborted ]
[ 4 containers successful ]
[ 0 containers failed ]
[ 1 tests found ]
[ 0 tests skipped ]
[ 1 tests started ]
[ 0 tests aborted ]
[ 1 tests successful ]
[ 0 tests failed ]
:test SKIPPED
BUILD SUCCESSFUL
Total time: 9.272 secsSekian artikel mengenai setup project kotlin, jika ada saran dan komentar silahkan isi dibawah dan terima kasih :)