3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【出力引数】引数を出力値として扱ってはいけない

Posted at

Javaのサンプルコードから、引数を出力値として扱ってはいけないことを理解する

出力引数とは

以下のadd()メソッドの引数sumは、メソッド内部で値が変更されている
このように出力として用いる引数を出力引数と呼ぶ

public class Main {
    public static void main(String[] args) {
        int sum = 0;
        add(3, 5, sum);
        System.out.println(sum); // 出力結果: 8 ←だと思うじゃん?
    }

    public static void add(int a, int b, int sum) {
        sum = a + b;
    }
}

出力結果は8じゃない

Javaでは値渡しが採用されており、引数に渡した変数はsumのコピーである
そのため、sumabの和を代入しても、main()メソッド内部のsumは変更されない

つまり、add()メソッドの中でsum変数に何を代入しても、main()メソッド内部のsumには影響せず、出力結果は0となる

引数は入力値として受け渡すべきである
引数を出力値として扱うと、想定していない挙動が起こる可能性が高まる

『良いコード/悪いコードで学ぶ設計入門』では、以下のように言及されている

引数は入力値として受け渡すのが普通です。このように出力値として扱ってしまうと、引数が入力なのか出力なのか、メソッド内部のロジックを読んで確認しなければなりません。メソッドの中身をいちいち気にしなければならない構造は、ロジックを読み解く時間をいたずらに増大させ、可読性の低下を招きます。1

参考文献

良いコード/悪いコードで学ぶ設計入門

  1. 良いコード/悪いコードで学ぶ設計入門 p.70

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?