ブログ

JavaでByRef

2013年1月29日 02:06 | 超科学戦隊オレ一人 | | 498 views
タグ: , , ,

このエントリーをはてなブックマークに追加
はてなブックマーク - JavaでByRef
reddit にシェア
Pocket
LINEで送る

JavaでByRef

ByRef・・・つまり参照渡し。
要は、あるメソッドに対し、パラメータとして渡しつつも、
その値を変更したいって場合の話よ(o´・∀・)y~

Javaにはこれがない。
結論からいうと、配列とかコレクション型を使うと、これに似たことができるって話よ。
下の方にサンプルを載せておきます。

.NETばっかりやってると、
あまりにも至れり尽くせりなので、「ほえ~」てな気分で、
なーも考えないでポコポコ作ってしまえる場面がいくつかあって、
そのひとつが、ByRefだと思ふ。

久しぶりにJava触って、ByRefしたいときがあったので、それをメモる。
そういえば、JavaにはByRefなんてねーわ!ちゅう話です。

そうです。ByRefなんて、そもそも、普通の、プリミティブな言語には、ねーのです。
.NET Framework様は、お便利なので、ByRefがあるのです。そーいうことです。

そもそも、そんなお便利なものがあること自体、どうか、と思い始めた。
つまり、ある関数に対し、渡したはずのパラメータの値を、関数自身が変えやがるってことです。
よう考えたら、これは、恐ろしいことです。

たとえば、こういうことです。
親が、アホの息子に、1000円札を渡して、お使いに行かせたら、
アホの息子は5万円のレアなトレカを買ってきたよ。むろん、支払いは親のカードでな!

くらいの恐ろしさです。
わかるな(o´・∀・)y~

でも、まぁ、それが必要なときもあるわけよ。
JavaでByRefしたいときもあるわけよ。

配列の要素に対しては、ByRef的な動きが実現できる。
以下、サンポォ(sample)

———————————————————-
/**
* 親の金を、親に黙って勝手に使ったりしない一般的なガキのプログラム
*/

publis static void main(String[] args) {

// プリミティブなint型変数i
    int i=0;

// ガキに渡す前
    System.out.println(“金=” + i);

// NotByRefというガキに、iという小遣いを渡してみる
    NotByRef(i);

// ガキは小遣いを変更していない件
    System.out.println(“金=” + i);
}

// パラメータiを勝手に変更しそうでしない一般的なガキ
private static void NotByRef(int i) {
// iを変更してみるものの…実はこれは呼び出し元では変更されない
    i += 1;
}
———————————————————-

———————————————————-
/**
* 親の金を勝手に変更しくさるクソガキのサンプルプログラム
*/

publis static void main(String[] args) {

// 配列変数i
    int[] i = new int[1];
// iの0番目を0円で初期化
    i[0] = 0;

// ガキに渡す前
    System.out.println(“金=” + i[0]);

// メソッドByRefというクソガキに、iという小遣いを渡してみる
    ByRef(i);

// ガキによって小遣いが変更されている件
    System.out.println(“金=” + i[0]);
}

// パラメータiを勝手に変更するクソガキ
private static void ByRef(int[] i) {
// 親にもろた金を自在に操る
    i[0] += 1;
}
———————————————————-

というわけで、配列とかを渡してやると、ガキはこの内容を変更しまくり(o´・∀・)y~

へー。

まったくどうでもええわ。
オレがやりたいのは、こんな作業ではないので、
こんなことを改めて知ったところで、まったくモチベーションはあがらんよ。

そうだ、会社を興そう。

以上。