kotlinc -scriptで実行するスクリプトです(末尾のmain()を削れば通常のKotlinソースになると思います)。
import java.io.File
// ◆デフォルト引数を持つ関数の定義
// 処理の記述はBeanShell(Java)と全く同じ
fun getFileNames(dir: String, ext: String=""): ArrayList<String> {
val d = File(dir)
val files: ArrayList<String> = ArrayList<String>()
d.listFiles().forEach {
if(it.isFile() && (ext == "" || it.name.endsWith(ext))){ files.add(it.name) }
}
return files
}
// ◆可変長引数を持つ関数の定義。varargを付けて引数を宣言する
fun getSum(vararg nums: Int): Int {
var sum : Int = 0
nums.forEach{ sum += it }
return sum
}
fun main(){
// ◆文字列から"b"の文字が最初に現れる位置(先頭が0)を得る
val a = "orange melon strawberry grape"
val n = a.indexOf("b")
println("${n}")
// ◆その位置から5文字を切り出す
val b = a.substring(n, n+5)
// berry
println(b)
// ◆文字列の一部置き換え
println(a.replace("mel", "lem"))
// ◆数値と文字列をそれぞれ加算、文字列連結する
// Pythonと同じ。数値のデータ型が異なる変数は+できない。必ず型変換が必要
val v1 = 10.2
val v2 = "15.3"
// 25.5 10.215.3 25.5 15.310.2
val v3 = v1 + v2.toDouble()
// 文字列+数値は暗黙に文字列連結になるが、数値+文字列はNG。明示的な変換が必要
val v4 = v1.toString() + v2
val v5 = v2.toDouble() + v1
// 文字列+数値は暗黙に文字列連結になるので、以下はどちらでもOK
//val v6 = v2 + v1.toString()
val v6 = v2 + v1
println("${v3} ${v4} ${v5} ${v6}")
// ◆配列の3番目の要素から3個を取り出し、文字列に連結して出力する
val arr = arrayOf("orange", "melon", "strawberry", "grape", "apple", "banana")
val arrsub = arr.slice(2 .. 2+3-1)
// strawberry grape apple
println(arrsub.joinToString(" "))
// ◆要素の追加。配列やtoList()で変換できるListでは要素を追加できない。
// MutableListに変換する
// ちなみにMutableListとArrayListは別物なので相互に代入はできない
val mlist : MutableList<String> = arr.toMutableList()
mlist.add("peach")
// ◆要素の検索。indextOfは配列にも〜Listにも使える
//println(arr.indexOf("apple"))
println("index of 'peach' is:" + mlist.indexOf("peach"))
// ◆配列要素を変数に一括代入する
val (e1, e2, e3) = arrsub
println("${e1} ${e2} ${e3}")
// ちなみにデータ型を付けるならこうする必要がある
// val (e1: String, e2: String, e3: String) = arrsub
// mapOfで作成すると要素を後から追加できない。mutableMapOfで作成する
val harr = mutableMapOf("orange" to 80, "melon" to 1200, "strawberry" to 350)
harr["grape"] = 450
// ◆配列キーの存在有無をチェックする
// yes
println(if(harr["melon"] == null) "no" else "yes")
// no
println(if(harr["lemon"] == null) "no" else "yes")
// ◆配列キー一覧をソートして、キーと値を出力する
harr.toSortedMap().forEach { k,v -> println("${k}\t${v}") }
// ◆デフォルト引数を持つ関数を使う
println(getFileNames(".").joinToString())
println(getFileNames(".", ".txt").joinToString())
// ◆可変長引数を持つ関数を使う
println(getSum(10,11,12,13))
}
main()