和歌山のプログラミング・システム開発ならシステムキューブ
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~
へー。
まったくどうでもええわ。
オレがやりたいのは、こんな作業ではないので、
こんなことを改めて知ったところで、まったくモチベーションはあがらんよ。
そうだ、会社を興そう。
以上。