92546


以下の2つのJavaScriptのコードがあるとします。  
細かいパフォーマンスを除けば、どちらも同じ出力が得られるはずです。  
違いは、変数isMorningがtruthyなら関数morningGreeting()をコールするか、関数morningGreeting()は必ずコールしてその中で分岐するか、ということです。

[code]

    if (isMorning) morningGreeting();
    
    function morningGreeting() {
      console.log('Good morning!');
    }
    
[/code]

[code]

    morningGreeting();
    
    function morningGreeting() {
      if (isMorning) {
        console.log('Good morning!');
      }
    }
    
[/code]

一般的に、どちらのコードの方が保守性・可読性の点で優れているか、というのはあるでしょうか？  
プロジェクトで統一されていればどちらでもいいという意見もあるかもしれません。  
皆さんのご意見を伺いたいです。


CC BY-SA 4.0
2022-12-02T14:21:23.970
92542
2022-12-03T08:07:50.417
2022-12-03T08:07:50.417
3054
41605
question
javascript
条件分岐は呼び出し元と呼び出し先、どちらに書くのが良いでしょうか


`console.log('Good
morning!');`を実行するのは`isMorning`が偽のときに限るのか、そうでないのかで決まる話だと思います。  
限るのであれば、モジュール強度の観点でfunctionの中で実行するのがよいと思います。


CC BY-SA 4.0
2022-12-02T23:24:51.983
92546
2022-12-02T23:24:51.983
35558
92542
answer


  1. 設計によるところと思います。  
質問の例であれば、「ある条件の時にある関数(`morningGreeting`)を呼ぶ」設計とするのか「常にある関数(`morningGreeting`)を呼ぶ設計にするのか、という観点です。  
この考え方によって、拡張性の点で考慮するところが変わると思います。後者の設計であれば、その関数に別の処理を追加するのは妥当と考えることができますが、前者だと追加する処理は限定されるでしょう。

  2. 前述の考え方とは別に、質問の例の後者(関数内で条件判定する)において、関数のスコープ外の変数「`isMoring`」を参照するのは関数の独立性の点で良くないと思います。  
引数で渡す実装ができるのであればどちらの実装もありだと思いますが、渡せないのであれば、前者の実装(呼び出し元で条件判定する)のが適切と思います。


CC BY-SA 4.0
2022-12-03T06:51:59.323
92551
2022-12-03T06:51:59.323
20098
92542
answer