2011年7月31日日曜日

java7とIntellij

Java7がリリースされたので、Intelijへの設定のまとめ。

SDKの追加

1.Project Structureを開く(「File」→「Project Structure」)
2.左側のメニューから「SDKs」を選択する。
3.「+」ボタンからjava7をSDKとして追加する。下の画像のように「+」ボタンで出てきたメニューから「JSDK」を選択する。
    4.Select Pathのサブウィンドウが表示されるので、java7のインストールディレクトリ(JAVA_HOME)を設定する。

    java7用のモジュールを作成

    1.Dependenciesタブを選択して、モジュールで使用するJDKを1.7に変更する。

    2.Sourcesタブを選択して、Language levelを7.0に変更する。

    java7用のInspectionを使ってみる

    Autoclosableへの置換え

    java6までのリソース管理(try-finallyでのリソース解放処理)を、java7のautoclosableに置き換えるInspectionを有効にすると、Quick Fixからautoclosableへの自動置き換えが可能となる。

    【変更前のコード】
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Hoge {
    
        public static void main(String... args) throws IOException {
    
            FileOutputStream stream = new FileOutputStream("hoge.txt");
            try {
                stream.write(0);
            } finally {
                stream.close();
            }
        }
    }
    

    【Quick Fixの実行】
    「Replace with 'try' with resources」を実行する。

    【置き換え後のコード】
    自動で下のコードに置き換えが実行される。
    import java.io.FileOutputStream;
    import java.io.IOException;
    
    public class Hoge {
    
        public static void main(String... args) throws IOException {
    
            try (FileOutputStream stream = new FileOutputStream("hoge.txt")) {
                stream.write(0);
            }
    
        }
    }
    

    これ以外のもこんなこともできるメモ。
    http://se-bikou.blogspot.com/2011/04/intellijjdk7.html

    2011年7月2日土曜日

    rubyのメソッド引数

    rubyのメソッド引数のまとめ

    通常の引数

    通常の引数をもつメソッド。当然ながら最も多く利用されると思われる。
    def print_message message
      print "[#{message}]"
    end
    

    デフォルト値をもつ引数

    デフォルト値をもつことでクライアントコードを簡略化できる。
    javaでオーバーロードを行い、引数の多いメソッドに固定値を渡すパターンの場合この実装で代用することが可能。
    ※rubyではオーバーロードを行うことができないので、デフォルト値を持つ引数をつかって実現するほかない。
    # p2を省略するとデフォルト値の0が適用される。
    def m1 p1, p2 = 0
      p1 + p2
    end
    
    m1 1      # p2を省略した場合
    m1 1, 2   # 明示的に指定した場合
    
    # p1を省略するとデフォルト値の1が適用される。
    def m2 p1 = 1, p2
      puts p1 + p2
    end
    
    m2 1      # p1を省略した場合
    m2 1, 2   # 明示的に指定した場合
    
    # p1を省略するとデフォルト値の1が適用される。
    # p2を省略するとデフォルト値の2が適用される。
    def m3 p1 = 1, p2 = 2
      puts p1 + p2
    end
    
    m3        # p1、p2を省略した場合
    m3 1      # p1を省略した場合
    m3 1, 2   # 明示的に指定した場合
    
    # 引数は、左から設定されるのでp1を省略してp2のみ値を指定することはできない。
    

    可変引数

    # 可変長引数は、変数名の前に「*」をつける。
    def hoge(*hoge)
      hoge.each do |val|
        puts val
      end
    end
    
    hoge("1", "2", "3")
    

    名前付き引数

    名前付き引数というのかわからないけど、引数を指定する際に名前をつけることができる。
    実際には、Hashで受け渡しを行うのだけれど、RubyのHashは簡易的にインスタンス化できるので、
    あたかも引数名に値を設定するかのように実装することができる。
    def m(args)
      puts "p1 : #{args[:p1]}"
      puts "p2 : #{args[:p2]}"
    end
    
    m p1:"hoge", p2:["fuga1", "fuga2"]