SunのJavaコードの規則では、演算子の前に改行を配置することが提案されていますが、他の多くのガイドラインは改行に同意しません。明らかな長所と短所はないので、これらのスタイルの1つを別のスタイルよりも使用する利点はありますか?
String longVarName = a + b + c + d +
e + f;
対
String longVarName = a + b + c + d
+ e + f;
SunのJavaコードの規則では、演算子の前に改行を配置することが提案されていますが、他の多くのガイドラインは改行に同意しません。明らかな長所と短所はないので、これらのスタイルの1つを別のスタイルよりも使用する利点はありますか?
String longVarName = a + b + c + d +
e + f;
対
String longVarName = a + b + c + d
+ e + f;
回答:
一行にしておき、意図を明らかにする変数名(および関数)の観点から読みやすさを考えます。
面倒になったら、リファクタリングします。
例
subtotal = price * (100 + tax_ratio) / 100`
対
tax = price * tax_ratio / 100
subtotal = price + tax
price * (100 + tax_ratio) / 100
またはちょうどprice * (1 + tax_ratio)
でなければなりませんtax_ratio
。
可読性が議論であると想像できます
result = longidentifier +
short -
alittlelonger -
c;
対
result = longidentifier
+ short
- alittlelonger
- c;
2番目の例では、演算子がきちんと並んでおり、変数が方程式に入る記号を簡単に確認できます。これは二項演算子にも意味があると思いますが、ブレースなどを使用すると、より明確なことを行う必要があります。
私は通常、最も一般的に使用されるスタイルガイドラインまたは特定のコーディング標準ツールに従います。一般的に使用されるスタイルを使用する利点は、他の人のコードを読んだり、スタイルガイドラインが設定されているオープンソースプロジェクトに関与している場合に利点があります。
私が見た最も一般的なスタイルは、質問の2番目のスタイルです。それらのリストについては、以下を参照してください。
代入演算子以外で行が切れると、記号の前に切れ目が来ます。
演算子の前で中断する
Checkstyle Operator Wrap checkのデフォルト値はnlです。
演算子は改行する必要があります
コードでは、演算子の後にブレークを配置する傾向があります。
foo = some_long_expression() +
some_other_long_expression();
ここで、行の終わりにあるぶら下がり演算子は、コードが続くことを読者に伝える大きな手がかりです。ステートメントターミネータを持たない言語では、そのぶら下がり演算子は、コンパイラ/インタープリタがコードを継続するための十分な手がかりとして機能します(そうでなければ、Iい継続行構造を使用する必要があります)。
その式を文書化するとき(文書化が必要な場合)、演算子の前にブレークを置く傾向があります。
あなたが一貫性を保っている限り、どちらの方法でも本当の利点がないことを知ってください。これは、コードのマージと空白を考慮する場合に特に重要です。
行は、ブレークするステートメントの解析ツリーの最上位のシンボルで始まる必要があると思います。式で最も重要な演算子を強調表示します。前の行の終わりではなく、行の先頭にelseを配置するのと同じ理由です。
次の例では、左マージンをスキャンすると、ステートメントの構造が3つの式のORとして表示されます。
if (ch>='A' && ch<='Z'
|| ch>='a' && ch<='z'
|| ch>='0' && ch<='9')
{...}
以下、|| 演算子はあまり強調されていません。||であることがあまり明らかではありません 式の。特に、線の長さが異なる場合。
if (ch>='A' && ch<='Z' ||
ch>='a' && ch<='z' ||
ch>='0' && ch<='9')
{...}
また、参考までに、これは非常に間違っています。|| 演算子はまったく強調表示されません。
if ( ch>='A' && ch<='Z' || ch>='a'
&& ch<='z' || ch>='0' && ch<='9')
{...}
私はめったにそれを見ていないにもかかわらず、行の先頭にコンマを入れたいです。共有コードでそれを行うことは控えます。
var note:Object =
{ key: key
, type: 'P'
, text: someLongProcedureCallGettingTheUserInitials()
+ ": " + getTheTextThatWasTyped()
};
長い算術方程式の場合、通常、次の2つのいずれかを実行します。
すべてを1行に残します。
foo = bar + baz - fizz + buzz + alpha - beta;
私は通常、加算と減算のみを含む方程式に対してこれを行います。演算子のスコープをひどく混乱させる可能性のある乗算と除算のタイプミスをするのは非常に簡単です。
私が使用する2番目の形式はプログレッシブ演算子です。
foo = bar;
foo += baz;
foo -= fizz;
foo += buzz;
foo /= alpha - beta;
foo *= spiff;
目立った方法でパフォーマンスを改善することが証明されない限り、1行に短縮する理由はありません。さらに、どこで何が起きているのかについてあいまいさはなく、/
and *
演算子の括弧を間違える可能性も少なくなります。
式を1行のままにして、長すぎる場合は、それをより小さな式に分割します。
days = ((year * months_per_year) + month) * days_per_month + day
になる:
months = year * months_per_year + month
days = months * days_per_month + day
これが不可能な場合は、演算子の前でブレークする方が読みやすく、演算子を前の割り当てのすぐ下から開始します(変数の下に置くと、考えて再センタリングする必要があります。読みやすくすることです):
random = years * months_per_year
+ month * days_per_month
+ day * hours_per_day
+ hour * minutes_per_hour
+ minute * seconds_per_minute
+ second