1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

プログラムにおける空白の重要性 ー可読性の高いコードを目指してー

Last updated at Posted at 2022-03-10

はじめに

プラグラマにとって読みやすいコードを書くことは、かなり重要な責務です。なぜなら、そのコードは今の自分が読むだけでなく、未来の自分やほかの人が読むこともあるからです。

初心者のうちから、ただ動くだけのプログラムではなく、読みやすいプログラムを書くことを意識しましょう。

ここではコードの可読性を上げる方法のうち、空白を適切に入れる方法について書きます。
ここではPHPを使います。

あなたが思う、一番読みやすいコードを次の4つのうちから選んでください。

╍╍╍╍╍╍╍╍╍╍╍╍╍╍╮
╏    ↖を押してコード①を表示   ╏
╰╍╍╍╍╍╍╍╍╍╍╍╍╍╍╯
<?php
    for ($i = 1; $i <= 50; $i++) {
        if ($i % 3 == 0 || strpos($i, '3')) {
            echo 'Yeeh! ' . $i . 'でゅぇぇぇす!';
        }
        else {
            echo $i . 'です';
        }

        echo '<br>';
    }
?>
╍╍╍╍╍╍╍╍╍╍╍╍╍╍╮
╏    ↖を押してコード②を表示   ╏
╰╍╍╍╍╍╍╍╍╍╍╍╍╍╍╯
<?php
for($i=1;$i<=50;$i++){
 if($i%3==0||strpos($i,'3')){
                 echo    'Yeeh! '  .$i.'でゅぇぇぇす!';   }
      else{echo $i .
      'です';
        }   echo     '<br>';
  }?>
╍╍╍╍╍╍╍╍╍╍╍╍╍╍╮
╏    ↖を押してコード③を表示   ╏
╰╍╍╍╍╍╍╍╍╍╍╍╍╍╍╯
<?php for($i=1;$i<=50;$i++){if($i%3==0||strpos($i,'3')){echo'Yeeh! '.$i.'でゅぇぇぇす!';}else{echo$i.'です';}echo'<br>';}?>
╍╍╍╍╍╍╍╍╍╍╍╍╍╍╮
╏    ↖を押してコード④を表示   ╏
╰╍╍╍╍╍╍╍╍╍╍╍╍╍╍╯
<?php
for
(
$i
=
1
;
$i
<=
50
;
$i
++
)
{
if
(
$i
%
3
==
0
||
strpos
(
$i
,
'3'
)
)
{
echo
'Yeeh! '
.
$i
.
'でゅぇぇぇす!'
;
}
else
{
echo
$i
.
'です'
;
}
echo
'<br>'
;
}
?>

なお、これら4つのコードはすべて同じ、以下のような実行結果になります。

╍╍╍╍╍╍╍╍╍╍╍╍╍╍╮
╏    ↖を押して実行結果を表示   ╏
╰╍╍╍╍╍╍╍╍╍╍╍╍╍╍╯

1です
2です
Yeeh! 3でゅぇぇぇす!
4です
5です
Yeeh! 6でゅぇぇぇす!
7です
8です
Yeeh! 9でゅぇぇぇす!
10です
11です
Yeeh! 12でゅぇぇぇす!
Yeeh! 13でゅぇぇぇす!
14です
Yeeh! 15でゅぇぇぇす!
16です
17です
Yeeh! 18でゅぇぇぇす!
19です
20です
Yeeh! 21でゅぇぇぇす!
22です
Yeeh! 23でゅぇぇぇす!
Yeeh! 24でゅぇぇぇす!
25です
26です
Yeeh! 27でゅぇぇぇす!
28です
29です
Yeeh! 30でゅぇぇぇす!
31です
32です
Yeeh! 33でゅぇぇぇす!
34です
35です
Yeeh! 36でゅぇぇぇす!
37です
38です
Yeeh! 39でゅぇぇぇす!
40です
41です
Yeeh! 42でゅぇぇぇす!
Yeeh! 43でゅぇぇぇす!
44です
Yeeh! 45でゅぇぇぇす!
46です
47です
Yeeh! 48でゅぇぇぇす!
49です
50です

コード②③④、特に③か④を選んだ人は、プログラマではかなり苦労することになると思います。

インデントをそろえる

インデントとは「行頭に挿入されるスペースのこと」を指すことが多いので、ここでもその意味で使います。

入力方法

Tabキーを押してインデントを挿入します。
インデントのひとかたまりは半角スペース4つ分であることが多いです。しかし、スペースキーを使うのは手間がかかるだけでなく、個数のミスを生む原因にもなるので、スペースキーは使わないようにします。

インデントを増やす

PHPでは波かっこ{}で囲まれた部分をブロックと呼んでいいのかわかりませんが、ここではそう呼ぶことにします。
以下のようにブロックの中やコロン:のあとではインデントを1つ増やします。

{
    echo 'Hoge';
}
if (true) {
    echo 'Hoge';
}
elseif (true) {
    echo 'Fuga';
}
else {
    echo 'Piyo';
}
while (true) {
    echo 'Hoge';
}

do {
    echo 'Fuga';
} while (true);
for ($i = 0; $i < 100; $i++) {
    echo 'Hoge';
}

foreach ($lines as $line) {
    echo 'Fuga';
}
switch ($i) {
    case 0:
        echo 'Hoge';
        break;
    case 1:
        echo 'Fuga';
        break;
    case 2:
        echo 'Piyo';
        break;
}
$value = match ($i) {
    0 => 'Hoge',
    1 => 'Fuga',
    2 => 'Piyo',
};
function hoge($fuga) {
    echo 'Piyo';
}
class Hoge {
    public $fuga;
}
interface Hoge {
    public function Fuga($piyo);
}
trait Hoge {
    public function Fuga() {
        echo 'Piyo';
    }
}
enum Hoge {
    case Fuga;
}

スペースを入れて文字を詰めすぎないようにする

演算子

以下のように演算子の前後には半角スペース1つずつ入れます。
行頭からの文字数をそろえる場合は1つ以上入れます。

$hoge = 'Hoge';
$x = 1 + 2;
$x = 1 - 2;
$x = 1 * 2;
$x = 1 / 2;
$x = 1 % 2;
$x = 1 ** 2;
$x = 1 & 2;
$x = 1 | 2;
$x = 1 ^ 2;
$x = 1 << 2;
$x = 1 >> 2;
$b = $x == $y;
$b = $x === $y;
$b = $x != $y;
$b = $x <> $y;
$b = $x !== $y;
$b = $x < $y;
$b = $x > $y;
$b = $x <= $y;
$b = $x => $y;
$c = $x <=> $y;
$x = $b ? $y : $z;
$b = $b1 and $b2;
$b = $b1 or $b2;
$b = $b1 xor $b2;
$b = $b1 && $b2;
$b = $b1 || $b2;
$hoge = 'fuga' . 'piyo';
$b = $x instanceof $y;
$x += $y;
$x -= $y;
$x *= $y;
$x /= $y;
$x %= $y;
$x **= $y;
$x &= $y;
$x |= $y;
$x ^= $y;
$x <<= $y;
$x >>= $y;
$x .= $y;
$x ??= $y;

例外

ただし、加算子や減算子などの単項演算子、オブジェクト演算子、スコープ定義演算子などの場合はスペースを入れません。

$x = +1;
$x = -1;
$x = ~1;
++$x;
$x++;
--$x;
$x--;
$b = !$b;
$this->hoge = 'Fuga';
$hoge = Fuga::PIYO;

連続的な部分

以下のように複数の文を1行にまとめるときや関数の引数を区切るときなどは、セミコロン;やコンマ,のあとに半角スペース1つ入れます。
行頭からの文字数をそろえる場合は1つ以上入れます。

$hoge = 'Hoge'; $fuga = 'Fuga'; $piyo = 'Piyo';
hoge($fuga, $piyo);
$hoges = ['Hoge', 'HogeHoge', 'HogeHogeHoge'];

キーワード

「インデントをそろえる」の章にあったようにif文やfor文などの丸かっこ()の前後には半角スペース1つずつ入れます。

複数行のまとまりで分ける

以下のように、すべての行を詰めるのではなく、意味や処理的にまとまりのある部分の間に1行だけ空行を挟みます。

echo 'Hoge';
echo 'Fuga';
echo 'Piyo';

echo 'Foo';
echo 'Bar';

おわりに

ここではPHPで書きましたが、これらの空白を入れる方法はほかの言語にも使えます。
適切に空白を入れれば読み手の負担はかなり軽減されます。
可読性の高いコードを目指しましょう。

Pythonのインデント強制やSwiftの代入演算子の前後の空白強制などはとてもいいシステムだと思っています。

参照

1
1
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?