0

プログラミングの初心者である私は、(コードの) 行数が少ないほど良いという (自己課した) 概念を保持してきました。したがって、何かをプログラミングするときは、断片ごとに個別の変数を用意するのではなく、可能な限りすべてを 1 つの行にネストしてきました。例えば:

preg_match('~><a href=~', substr(file_get_contents($match[1])), strpos($match[1], "help")), $match_rating)

上記の行を個別の変数チャンクに分割する方がより専門的/一般的に好ましいので、次のようになります。

 preg_match($regExp, $bigString, $matches)

..各変数/ピースが独自の行(および変数)で上記で定義されていますか?

他の誰かがそれを読んで解読するのを難しくするように見えるので、これは本当に良くないか、より効率的ではないかどうか疑問に思いました. おそらく個人的な好みの取引だと思いますが、どちらの側に傾くべきかについて一般的に保持されている(専門家の)基準はありますか?


4

3 に答える 3

3

何よりもまず第一の目標は、(一般的なイディオムを使用して) 意図を明確に示す読み取り可能なコードを作成することです。

2 番目の目標は、プログラムが意図したとおりに機能することを確認することです (目標 1 を念頭に置いてください)。

最初の目標を達成し、パフォーマンス/メモリの問題があることがわかった場合はコードをより効率的にする方法を考える必要があります。この部分にたどり着いた場合、最初のステップは問題がどこにあるかを測定することです。次に、その一部を修正します (上記の目標 1 から逸脱している可能性があります)。パフォーマンス/メモリの問題がまだある場合は、すすぎを繰り返します。

あなたの特定の例では、部分式を変数に格納すると便利なことがよくあります (たとえば、デバッガーで簡単に検査したり、デバッグ時に出力したりできます)。適切なコンパイラを使用している場合、これは効率に大きな影響を与えないはずです (必要に応じて、コンパイラはコードを最適化できます)。

また、読みやすいように行を短くすることをお勧めします。最初のコード サンプルは、少なくとも複数の行に分割する必要があります (1 つの式を保持する場合でも)。

部分的な式の結果を格納するために変数を使用する場合は、その変数の役割を示す名前を選択してください。使用できる reg.ex が複数ある場合は、それがどれであるかを示す名前を選択してください。このようにして、読者があなたの意図をよりよく理解できるようにします

: 1) と 2) の順序は好みに依存しますが、「読みやすさ」を無視して「正確さ」を求めると、理解しにくく、デバッグしにくく、保守しにくいことに気付くでしょう。コード

于 2012-06-20T17:48:37.687 に答える
1

(ほとんどの場合) 最も重要なことは、コードが読みやすく、管理しやすいことだと思います。ですから、誰もがあなたのやっていることを問題なくよく理解してくれると思うなら、そのままにしておいてください。

個人的に変数を使用するのは、変数を別の場所で再利用する必要がある場合、または式が非常に大きく、変数なしでは読みにくくなる場合のみです。また、コードのブロックが何であるか、または何をするかを理解するのに役立つ「ラベル」として機能することもできます (コメントは必要ありません)。

しかし、細かいことごとに変数を作成するのは良くありません。コードに不必要な行が追加されます。あなたの特定のケースでは、私はそれらを使用しません。

効率について...変数の作成自体はCPUをあまり消費しません。ほとんどの場合、メモリ内の既存のオブジェクトへの参照を作成するだけであり、参照は多くのスペースを占有しません(間違っている場合は誰かを修正してください...)。

于 2012-06-20T17:51:02.607 に答える
0

コードの行数が少ないほど良いという意見には同意しません。問題のドメインに不慣れな人があなたのコードを見た場合、最初にさまざまなショートカット関数に飛び込むことなく理解できるでしょうか?

後で最適化を行う必要がある場合、「作業」が行われている場所もより明確になります。ループの依存関係はコンパイラによって簡単に最適化されませんが、配列で動作する関数と、値を保持する構造体/クラスの配列で動作する関数を記述したかどうかは簡単にわかりますが、明らかに配列を直接操作すると、より多くのコードが必要になります。ポインターの誤指示などで計算を覆い隠した場合よりも。

あなたの具体的な例については、preg_matchに入り、関数に渡された値で何が行われていたかを正確に伝えることができる限り、値を保持する変数宣言を持つことは完全に受け入れられると思います. 値を変更して preg_match を繰り返し呼び出す場合は、特に 2 番目の方法を実行する必要があるため、関数呼び出しごとに初期化を行う必要はありません。

于 2012-06-20T19:46:29.400 に答える