4

2つの方法があります:

 String salary = company.getPerson(id).getData().getSalary();      
 String postcode = company.getPerson(id).getData().getPostCode();

また

Data data = company.getPerson(id).getData();    
String salary = data.getSalary();     
String postcode = data.getPostCode();

どちらが好ましい方法であり、その理由は何ですか?読みやすさ以外に何か利点はありますか?

4

8 に答える 8

7

その人が存在しない場合に備えて、実際には3番目のオプションを好む

Person person = company.getPerson(id);
if(person != null) {
    Data data = person.getData();
    if(data != null) {
        String salary = data.getSalary();
        String postcode = data.getPostCode();
    }
}

null 値があるかどうかによって異なります。null 値が存在しないことを保証できる場合は、null チェックの一部またはすべてを削除できます。

以下のコメントで別のユーザーが指摘したように、パフォーマンスが問題でない限り、どのメソッド呼び出しも null を返せない場合があるかもしれません。

nullチェックがなくても、私が持っているように、おそらくそれらを別々の呼び出しに分離することを好むでしょう。

于 2012-07-11T12:03:31.780 に答える
3

中間変数が null である可能性がある場合は、null チェックとともに 2 番目のオプションを使用する必要があります。

Data data = company.getPerson(id).getData();    
if (data != null){
    String salary = data.getSalary();     
    String postcode = data.getPostCode();
    // other code here
}
于 2012-07-11T12:00:45.030 に答える
2

ゲッター メソッドの複雑さによって異なります。たとえば、getPerson(id) メソッドが複雑な場合、または getData() メソッドが複雑な場合、パフォーマンスの問題が発生する可能性があります。

スマート コンパイラは、コード部分の繰り返しを除いて、この問題を解決する可能性があります。しかし、一般的に、私の観点からは、2 番目の方法の方が優れています。

于 2012-07-11T12:02:56.243 に答える
2

真に優れたスタイルというものはありません。コンテキストとニーズによって異なります。

使用する :

 String salary = company.getPerson(id).getData().getSalary();      
 String postcode = company.getPerson(id).getData().getPostCode();

メモリ使用量を改善する必要がある場合。

それ以外の場合:

Data data = company.getPerson(id).getData();    
String salary = data.getSalary();     
String postcode = data.getPostCode();

パフォーマンスを向上させたい場合。

読みやすさについては、私には主観的すぎます。正直なところ、どちらも読みやすいです。

2 番目の例には屈折の利点がcompany.getPerson(id)あり、変数を使用すると、再度呼び出す必要なく、いくつかの検証を実行することもできますcompany.getPerson(id)。私はこの種のスタイルを好むことがよくありますが、必要に応じて、 null を返すことができない場合は最初のソリューションの方が良い場合 がgetPersonne(id)ありgetData()ます。

于 2012-07-11T12:11:30.047 に答える
1

リファクタリング/読みやすさとパフォーマンス上の理由から、私は個人的にこれが最良の解決策だと思います:

Data data = company.getPerson(id).getData();    
String salary = data.getSalary();     
String postcode = data.getPostCode();
于 2012-07-11T12:00:55.497 に答える
1

パフォーマンスを考慮する必要があります。「見栄えの良いコード」は素晴らしいものですが、取得するのに費用がかかるものがある場合は、それへの参照を保持して再利用してください。

company.getPerson(id)データを取得するためにデータベース クエリが必要になる可能性が高いため、最初のオプションの方が「きれい」に見えますが、2 番目のオプションの方がおそらく優れています。

しかし、答えは「場合による」です。各通話が安い場合は、最初のオプションを使用できます。

于 2012-07-11T12:02:21.793 に答える
1

考慮すべきことの 1 つは、getPerson(...) または getData() が null を返す可能性がある場合です。これらのいずれかが null を返す場合、NullPointerException が返されるため、答えは読みやすさ以外の他の隠れた要因に依存する可能性があります。

于 2012-07-11T12:03:39.810 に答える
1
 String salary = company.getPerson(id).getData().getSalary();      
 String postcode = company.getPerson(id).getData().getPostCode();

これは読みにくく、返されるデータの範囲はcompany.getPerson(id).getData()実行時のみであるためgarbage collected、その時点でそうなります。

また

Data data = company.getPerson(id).getData();    
String salary = data.getSalary();     
String postcode = data.getPostCode();

上記はより読みやすいですが、タイプの参照変数をもう1つ作成しているDataため、garbage collection コレクターはヒープ内の「データ」の参照をチェックし、適格であることが判明した場合は収集します。

于 2012-07-11T12:03:47.987 に答える