2. 型、型変換

JavaからRubyへ ―マネージャのための実践移行ガイド

JavaからRubyへ ―マネージャのための実践移行ガイド

JavaからRubyへ。という本がありますが、中をチラ見したら
コードを書くという所にはあまり触れてなかったので、コードの違いについて書いてみようかと思いました。
自分の勉強になるし。


ということで型変換です。
プログラムをしてない人には"1"と1って違うということが「は〜?」って感じだと思います。
例えていうなら、百十四足す50の答えは?
と言われると難しいのと同じで、コンピュータに計算させるときには、扱える単位を揃えてあげる必要があります。


で、javaの場合、この型を変換して揃えてあげるのがとても難解なのです。
以下は文字列型のa,bを足し算して、答えを求めるプログラムです。

Main.java

public class Main {
    public static void main(String args[]) {
        String a="1";
        String b="2";
        /* System.out.println("answer:" + (a + b)); */
        Main main = new Main();
        int answer = main.add(a,b);
        System.out.println("answer: " + answer);
    }

    private int add(String a, String b) {
        int i;
        int j;

        i = Integer.parseInt(a);
        j = Integer.parseInt(b);

        return i + j;
    }
}

この中で型変換にあたるのが、Integer.parseInt(文字列型の変数)です。
なんで、こんなややこしい処理をするのかは、ちと古いですがこの本が詳しいです。

Java 謎+落とし穴 徹底解明 (標準プログラマーズライブラリ)

Java 謎+落とし穴 徹底解明 (標準プログラマーズライブラリ)


前置きが長くなってしまいましたが、rubyではこんな風にかけます。
main.rb

class Main
  def add(a,b)
    i = a.to_i
    j = b.to_i
    return i + j
  end
end

main = Main.new
ans = main.add("1","2")
p ans


型変換の処理は.to_iです。
如何にスクリプト言語といえど、.to_iをしない場合には、"1"+"2"は"12"となってしまいます。


javaだとint型への変換に失敗すると例外が発生するのであまり良い例とは言えないのですが、
rubyだと"1"を"9999999999999999999999999999999999999999999"としても処理してくれます。
どうやら、Integerは抽象クラスで、桁が大きいものはBignumクラスとして処理されるみたいです。