共にJavaVMを使用するスクリプト言語であるGroovyとKotlinの文法は非常によく似ています。
ほとんどの制御構文が共通する他、
DateTimeFormatterなどJava標準APIを使う処理の書き方は当然ながら全く同一です。
ただし、文字列長はlengthではなくlength()、配列長はsizeではなくsize()です。
また正規表現の演算子がPerlとほぼ同じ書き方で使えます。
/*============================*
* 複数行のコメントは
* このように
* 書けます。
*============================*/
// 1行コメントはこのように書けます。
import java.text.DecimalFormat
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter
println("Hello, World.")
println("こんにちは。")
// 変数はdefで宣言する、Integer、Doubleなどで宣言する、
// 何もつけない、Java10以降のvarで宣言する、の各方法が可能
var1 = 42
var2 = 35
var3 = var1 + var2
var4 = var1 - var2
println("結果は${var3}と${var4}")
msg = "結果は" + var3.toString() + "と" + var4.toString()
println(msg)
// C言語式の代入とインクリメント演算子もある
var2 += 18
var3--
var4++
println("${var2} ${var3} ${var4}")
// 初期化時の値は 42 53 76 8
arr1 = [var1, var2, var3, var4]
// 分岐と反復
for(v in arr1){
if(v >= 50){
println(v.toString() + "は50以上です。")
} else if(v >= 40 && v < 50){
println(v.toString() + "は40以上50未満です。")
} else {
println(v.toString() + "は50未満です。")
}
}
// 1..10は1から10まで(10も含む)。Pythonと違い、Kotlinと同じ。
// Groovyの[]は配列ではなくArrayListなので、配列長の取得はsize()
Double var5 = 1
for(i in 0 .. arr1.size()-1){
var5 *= arr1[i]
}
// 整形出力。JavaのFormatterを使った例
df = new DecimalFormat("###,###,##0.00")
println(df.format(var5))
// Groovy組み込みのsprintfも使える。カンマ区切りも可能
println(sprintf("計算結果:%,15.2f", var5))
str1 = "Hello,Power,Shell,World"
// lengthに括弧は必要(Kotlinと違う)
println("文字列の長さは" + str1.length().toString())
// 大文字に変換
println(str1.toUpperCase())
// 配列の分割はJavaのString#split()を使う
arr2 = str1.split(",")
// 配列を表示
println(arr2)
for(v in arr2){
if(v =~ /^.[opqr]/){ // 2文字目がopqrのいずれか
println("${v}はマッチします。")
} else {
println("${v}はマッチしません。")
}
}
// 現在時刻の取得
// DateやDateFormatではなく新しいjava.time.*を使用
df1 = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss")
dstr1 = df1.format(LocalDateTime.now())
// 指定した年月日の値を取得
df2 = DateTimeFormatter.ofPattern("yyyy/MM/dd")
dstr2 = df2.format(LocalDateTime.of(2020, 4, 26, 0, 0, 0))
// ヒアドキュメント。"""の直後/直前で改行すると改行文字も入る点に注意
s = """現在時刻は${dstr1}です。
特定の日付とは…${dstr2}です。"""
println(s)
// end.