groovy を試してみる

groovy を初めてさわってみて、ループ処理を試してみました。



package vesselsch.grtst

/**
 * groovy テストクラス
 * @author MyName
 */
public class testclass {
  
  private final def name='MyName'
  
  
  // デフォルトコンストラクタ //
  public testclass () {  
  }

  public def hello() {
    println "Hello $name!"
  }
  
  // 九九表 in loop //
  public def kuku_in () {
    
    println ('-- kuku_in --')
    
    // 99 //
    for (i in 1..9) {
      for (j in 1..9) {
        println "$i X $j = ${i * j}"
      }
    }
    
  }
  
  // 九九表 each loop //
  public def kuku_each () {
    
    println ('-- kuku_each --')
    
    def l
    (1..9).each {
      l = it
      (1..9).each {
        println "$l X $it = ${l * it}"
      }
    }
    
  }
  
  // 九九表 array loop //
  public def kuku_array () {
    
    println ('-- kuku_array --')
    
    def iary = [1, 2, 3, 4, 5, 6, 7, 8, 9]
    def jary = [1, 2, 3, 4, 5, 6, 7, 8, 9]

    def ipos = 0
    def jpos = 0
    def itmp
    def jtmp
    iary.each {
      //println iary[pos++]
      itmp = iary[ipos]
      jpos = 0
      jary.each {
        //println "$iary[ipos] X $jary[jpos] = ${iary[ipos] * jary[jpos++]}"   // <== これはばつ
        // [1, 2, 3, 4, 5, 6, 7, 8, 9][ipos] X [1, 2, 3, 4, 5, 6, 7, 8, 9][jpos] = 5
        jtmp = jary[jpos]
        println "$itmp X $jtmp = ${iary[ipos] * jary[jpos]}"
        //println "${iary[ipos]} X ${jary[jpos]} = ${iary[ipos] * jary[jpos]}"
        jpos++
      }
      ipos++
    }
    
  }
  
  // 型推論テスト うるう年判定 //
  public def is_leap_year(y) {
    
    def isleap = false;     // デフォルト //

    if (y % 100 == 0) {
      if (y % 400 == 0) {
        isleap = true;
      }
    }
    else if (y % 4 == 0) {
      isleap = true;
    }
    return isleap
    
  }
  
  // 文字列反転 //
  public def reverseTxt (src) {
    
    def res = ""
    def len = src.length() - 1
    
    //println "$len"
    
    def tmp
    len.downto(0) {
      //tmp = src.getAt(it, ${it + 1})
      //println "$tmp"
      //println "$it"
      //tmp = src.getAt(it..(it + 1))
      //tmp = src.getAt($it..($it + 1))
      //tmp = src.getAt(it)
      //println "$tmp"
      
      res += src.getAt(it)
    }
    return res
    
    
  }
  
  public static void main(String[] args) {
    
    // インスタンス化 //
    def tst = new testclass ();
   
    
    // voidメソッド呼出し //
    tst.hello()
    tst.kuku_in()
    tst.kuku_each()
    tst.kuku_array()
    
    def isLeap = tst.is_leap_year(2018)
    
    println "$isLeap"
    
    
    // 関数呼び出しテスト //
    // その1:変数化 //
    def rev = tst.reverseTxt ("あいうえお")
    println "$rev"   
    // その2:直接化 //
    println "${tst.reverseTxt ('あいうえお')}"
    
    //def testclass tst2 = new testclass();   // <=== これは間違い
       
  }
  
  
}