お知らせ

  • 超科学戦隊オレ一人

JavaでByRef

noimage

JavaでByRef

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~ へー。 まったくどうでもええわ。 オレがやりたいのは、こんな作業ではないので、 こんなことを改めて知ったところで、まったくモチベーションはあがらんよ。 そうだ、会社を興そう。 以上。