2

コードをできるだけ簡潔にするのが好きですが、これは読めないのでしょうか?

var filters = {};
function addFilter(type, name) {
  filters[type] && filters[type].push(name) || ( filters[type] = [name] );
}

または(回答で指摘されているように):

var filters = {};
function addFilter(type, name) {
  filters[type] ? filters[type].push(name) : ( filters[type] = [name] );
}

-編集 -

読めませんが、スタイルが悪いのでしょうか?別の方法は、書き出すことでした

var filters = {};
function addFilter(type, name) {
  if (!filters[type]) {
    filters[type]= [];
  }
  filters[type].push(name);
}
4

6 に答える 6

9

言語には、正当な理由からイディオムとパターンがあります。特に、Javascript には、まさにこの目的のために設計されたif/ステートメントがあります。コードは読みelseやすいように書く必要があります。将来的には、書かれるよりもはるかに頻繁に読まれることになるからです。

コードレビューで上記の「簡潔な」コードを受け入れません。

于 2013-08-04T23:36:15.810 に答える
2

少なくとも三項を使用できます:

filters[type] ? filters[type].push(name) : ( filters[type] = [name] );

または、コードの拡張バージョンを使用することもできますが、もう少し簡潔に:

if ( ! filters[type] ) filters[type] = [];

filters[type].push(name);

これにより、配列が最初に作成されたときに2つのステートメントが実行されますが、この方法の方が読みやすいと思います。

于 2013-08-04T23:36:47.447 に答える
0

私は不必要に読めないと言います。また、何に取り組んでいるのか、誰のために働いているのかにもよります。あなたがこのアプリケーションをサポートする唯一の人であると確信している場合は、おそらくこれで問題ありません。

于 2013-08-04T23:36:43.720 に答える
0

読みやすいが誤解を招く。addFilter という関数に期待するのは、いくつかのフィルターを追加することです。または、そのようなフィルターが存在する場合は、例外または false または -1 を取得する必要があります (重複していることを示すもの)。

于 2013-08-04T23:36:53.763 に答える
0

あなたは;アフターvar filters = {}を欠いています.2番目の形式は、新しいコーダーがすぐに(または将来あなた自身が)理解するのが簡単になるため、はるかに優れています。最初のフォームを使用してコメントすることもできますが、Sammy Larbi がCommon Excuses Used To Comment Codeで述べたように、コードが複雑すぎてコメントなしでは理解できないと感じた場合、そのコードはおそらく単に悪いものです。

于 2013-08-04T23:39:46.357 に答える
0

&& と || の使用 三項に精通している Javascript の人にとっては、少し混乱するかもしれません。

function addFilter(type,name) {
    filters[type] ? filters[type].push(name) : filters[type] = [name];
}
于 2013-08-04T23:41:28.617 に答える