: programming style1970The Elements of Programming StyleFORTRANElements

 "The Practice of Programming" [1] "Software Tools" 

PythonPEP-8PHPPEAR

良いスタイルとは

編集





使







使使goto










見た目

編集






空白類

編集

FORTRAN80調1




字下げ

編集

PascalCbegin  end {}
オールマン
if (hours < 24 && minutes < 60 && seconds < 60)
{
    return true;
}
else
{
    return false;
}
K&R
if (hours < 24 && minutes < 60 && seconds < 60) {
    return true;
} else {
    return false;
}
GNU
if (hours < 24 && minutes < 60 && seconds < 60)
  {
    return true;
  }
else
  {
    return false;
  }
読みにくい例
   if (hours < 24 && minutes < 60 && seconds < 60) {
return true;
   }
   else {
return false;
   }

上の2つの例の方が最後の例よりも読みやすいと感じる人が多い。字下げスタイルは複数の構造が入れ子になっている場合に特に重要となる。

また、上記の例は

複文でなく単文とする
if (hours < 24 && minutes < 60 && seconds < 60)
    return true;
else
    return false;

とも書けるし、

条件式の値をそのまま返す
return hours < 24 && minutes < 60 && seconds < 60;

とも書ける。

どのスタイルが読みやすいかは、いくつかの評価基準があり優劣を付けられるものではないが、同じプログラム(少なくとも同じソースファイル)に複数のスタイルが混在するのは好ましくないことは自明であろう。

桁位置合わせ

編集

隣接する行の桁位置を合わせると、誤字を見つけやすくなることがある。例えば次のコードを比較してみよう。

$search = array('a', 'b', 'c', 'd', 'e');
$replacement = array('foo', 'bar', 'baz', 'quux');
$search      = array('a',   'b',   'c',   'd',   'e');
$replacement = array('foo', 'bar', 'baz', 'quux');

2

search  replacement 

search 1

[2][3]

使2

使23

改頁

編集

ASCII 0x0C^L[?][]使[?]PostScriptHTML

その他の空白

編集

次のC言語のコードを比較してみよう。

int count;
for(count=0;count<10;count++)
{
  printf("%d",count*count+count);
}
int count;
for (count = 0; count < 10; count++)
{
  printf("%d", count * count + count);
}

2

命名、論理、その他

編集

適切な変数名

編集




get a b c 
if a <24and b <60and c <60return true
else
  return false


get hours minutes seconds 
if hours <24and minutes <60and seconds <60return true
else
  return false

24 true false 


判断構造におけるブーリアン値

編集


return (hours < 24) && (minutes < 60) && (seconds < 60);

[?]


ループと制御構造

編集


 count = 0
 while count <5print count * 2
   count = count + 1
 endwhile

for使
 for count = 0, count < 5, count = count + 1
   print count * 2


 for count = 0 to5print count * 2
 print "Ended loop";

PerlGo
 for (count = 0 to5) {
   print count * 2;
 }
 print "Ended loop";


 for (count = 0 to5);  // この行の最後のセミコロンがバグ
   print count * 2;
 print "Ended loop";


 for (count = 0 to5)
   log "loop reached " + count;
   print count * 2;  // この行が「実はループ内ではない」のがバグ
 print "Ended loop";


 for (count = 0 to 5)
 print "Ended loop";

リスト

編集

2





[?]
何かのカタマリ(
  要素1 ,
  要素2 ,
  要素3 ,
)

C使C
void
f(int cond1, int cond2)
{
  for (;;) {
    if (cond1) { /* NOP */ }
    if (cond2) { /* NOP */ } else { /* NOP */ }
  }
}

一方で行内の場合は、セパレータのほうが自然だと感じられることが多いようである。[独自研究?]

func_call(arg1 , arg2 , arg3)

[]UnixAWKJavaScriptJavaScript

脚注

編集


(一)^ 

(二)^ Robert C.MartinClean Code2009128-130ISBN 978-4-04-867688-5 

(三)^ . POSTD (2015120). 2015531

関連項目

編集

外部リンク

編集

各種言語のコーディング規約

編集

プロジェクトにおけるコーディング規約

編集