15

ライブラリを pdepend でテストしていますが、一部の関数は非常に複雑です。三項演算子に由来することに気づきましたが、その理由はわかりません。

次のような関数を使用します。

  function test($a) {
        return $a > 10 ? 5:20;
  }

pdepend は 5 の複雑さ (npath) を返します。なぜ 5 つの異なるパスがあるのですか? 2しか見えない。

次のような関数を使用します。

   function test($a) {
      if($a > 10)
         return 5;
      else
         return 20;
   }

npath の複雑さは 2 です。これは理にかなっています。


編集:わかりました、私は他の質問を見ました: PMD - 三項演算子で非常に高いNPathの複雑さ(?

それはアルゴリズムの一部です..それでも、関数には2つの可能なパスしかありません。アルゴリズムは私には意味がありません。ノードの数はパスの数を反映しておらず、任意に値に 2 を追加します。

4

2 に答える 2

3

複雑さを決定するために pdepend が使用するアルゴリズムは、if else と同じように機能し、同じ数のパスを追加するため、同じである必要がありますが、三項演算子を使用するために 2 つ追加します。私の経験から、実際のアプリケーションで実際の違いがあったとしても、実際の違いはあまり見られないはずです。

于 2014-06-13T05:13:56.347 に答える
2

三項演算子は、オブジェクト以外の値のコピーを作成します。つまり、最初のコード サンプルでは、$a​​ がコピーされ、結果が返されます。ソース。2 番目のコード サンプルでは、​​そのようなコピーは作成されません。

したがって、私の推測では、関連する余分なパスはコピーを作成することによってもたらされるということです。

その他の参考資料:

http://fabien.potencier.org/article/48/the-php-ternary-operator-fast-or-not

https://drupal.org/node/1838368

http://www.mail-archive.com/internals@lists.php.net/msg51926.html

于 2014-06-13T05:16:49.767 に答える