96236


Javaを勉強中の初心者です。  
下の【コード1】と【コード2】はどちらも同じ結果を表示します。

例題では【コード1】の方が掲載されていたのですが、【コード1】のnewArray[]の配列変数をわざわざ用意する理由は何かわかる方いらっしゃいませんか。  
【コード2】だとarray[]の配列だけで済むので分かりやすいと思うのですが。

【コード1】

[code]

        public static int[] makeArray(int size) {
    
            int[] newArray = new int[size];
            for(int i=0; i<newArray.length; i++) {
                newArray[i] = i;
            }
            return newArray;
    }
    
        public static void main(String[] args) {
            int[] array = makeArray(3);
            for (int i : array) {
                System.out.println(i);
            }
        }
    }
    
[/code]

【コード2】

[code]

        public static int[] makeArray(int size) {
    
            int[] array = new int[size];
            for(int i=0; i<array.length; i++) {
                array[i] = i;
            }
            return array;
    }
    
        public static void main(String[] args) {
            int[] array = makeArray(3);
            for (int i : array) {
                System.out.println(i);
            }
        }
    }
    
[/code]


CC BY-SA 4.0
2023-09-17T01:55:17.333
96233
2023-09-19T02:33:49.127
2023-09-17T03:51:53.057
7347
59812
question
java array
java メソッドの戻り値に配列を用いたコードの質問


【コード1】【コード2】の違いは, ローカル変数の変数名が異なるだけで, 内容は同じであり  
「`newArray[]` の配列変数をわざわざ用意」というわけではありません

【コード2】では `makeArray()` 内で使用したローカル変数名が, `main()` で使用するローカル変数名と,
(たまたま？)同じ変数名というだけです

処理内容は以下の通り

`makeArray()` で配列を作成する。  
使用する際に名前が必要 (名前は(扱えれば)何でもよい, 他所からのアクセスは(この時点では)できない)  
作成されたオブジェクトを返す

`main()` は `makeArray()` で作成されたオブジェクトを得て  
`array[]` と名付けて, アクセスする

* * *

**少し追記** update

  * `makeArray()` 内の `newArray[]`
  * `main()` 内の `array[]`

これらは, 名称(ローカル名)が異なるだけで, 実体は同じ(オブジェクト)です  
`new int[size]` で生成しているソースコードの箇所は一箇所

別のローカル名だからといって, 別物になるわけではありません  
(2つの存在になったり, ひとつになったりする訳ではない)

* * *

(個人的には)  
先に動くプログラムを作り  
大きくなってきたら関数に分割する, ような手順を踏むときには  
そのように変数名を `array` など(もともとの名前)で統一してしまうことはあります


CC BY-SA 4.0
2023-09-17T05:40:28.797
96236
2023-09-17T09:56:53.753
2023-09-17T09:56:53.753
43025
43025
96233
answer


そもそも関数って同じ処理を違うオブジェクト（変数と読み替えてヨシ）に適用するのに、同じコードを何度も手書きしたくないところから作られたものなので  
例題 [c++](/questions/tagged/c%2b%2b "'c++' のタグが付いた質問を表示") だけど / 説明のための説明としてるので
OO してなくてカッコ悪いけど

[code]

    money_type totalsaraly=0;
    totalsalary += calc_saraly(alice);
    totalsalary += calc_salary(bob);
    totalsalary += calc_salary(charlie);
    ...
    
[/code]

のように給料計算する処理があるとき、この `calc_salary()` の実装は

[code]

    money_type calc_saraly(employee_type& employee) { ... }
    
[/code]

のようになりそうです。 `calc_saraly()` の局所変数（仮引数）である `employee` を `alice` だの `bob`
だのと書きたいとは、少なくとオイラは微塵も思いません。

「名前を一緒にしたい」という発想に至る理由がよくわからないのですが、たぶん小規模なサンプルであるがゆえに関数を作る人物と使う人物が同一人物であるからでしょう。もっと大規模なプログラムになると関数を作る人と使う人が別人になるので、実引数と仮引数が全く別のブツで、呼ぶ側関数の局所変数と呼ばれる側関数の局所変数が全く別のブツで、たまたまソースコード上同じ名前になっても違う名前になっても互いに影響しないようになっている、のがどれだけうれしいか（＝バグが回避できる）わかるようになると思います。


CC BY-SA 4.0
2023-09-19T02:33:49.127
96258
2023-09-19T02:33:49.127
8589
96233
answer