2. 型、型変換
- 作者: Bruce A. Tate,角谷信太郎
- 出版社/メーカー: オライリー・ジャパン
- 発売日: 2007/04/21
- メディア: 単行本(ソフトカバー)
- 購入: 3人 クリック: 53回
- この商品を含むブログ (119件) を見る
コードを書くという所にはあまり触れてなかったので、コードの違いについて書いてみようかと思いました。
自分の勉強になるし。
ということで型変換です。
プログラムをしてない人には"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 謎+落とし穴 徹底解明 (標準プログラマーズライブラリ)
- 作者: 前橋和弥
- 出版社/メーカー: 技術評論社
- 発売日: 2001/12/01
- メディア: 大型本
- 購入: 8人 クリック: 40回
- この商品を含むブログ (21件) を見る
前置きが長くなってしまいましたが、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クラスとして処理されるみたいです。