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

# はじめに

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

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

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

# 例

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

<details><summary><b><font color="#409202">╍╍╍╍╍╍╍╍╍╍╍╍╍╍╮<br>╏&nbsp;&nbsp;&nbsp;&nbsp;<font color="#409202">↖を押してコード①を表示</font>&nbsp;&nbsp;&nbsp;╏<br>╰╍╍╍╍╍╍╍╍╍╍╍╍╍╍╯</font></b></summary><div>

``` PHP
<?php
    for ($i = 1; $i <= 50; $i++) {
        if ($i % 3 == 0 || strpos($i, '3')) {
            echo 'Yeeh! ' . $i . 'でゅぇぇぇす！';
        }
        else {
            echo $i . 'です';
        }

        echo '<br>';
    }
?>
```

</div></details>

<details><summary><b><font color="#409202">╍╍╍╍╍╍╍╍╍╍╍╍╍╍╮<br>╏&nbsp;&nbsp;&nbsp;&nbsp;<font color="#409202">↖を押してコード②を表示</font>&nbsp;&nbsp;&nbsp;╏<br>╰╍╍╍╍╍╍╍╍╍╍╍╍╍╍╯</font></b></summary><div>

``` PHP
<?php
for($i=1;$i<=50;$i++){
 if($i%3==0||strpos($i,'3')){
                 echo    'Yeeh! '  .$i.'でゅぇぇぇす！';   }
      else{echo $i .
      'です';
        }   echo     '<br>';
  }?>
```

</div></details>

<details><summary><b><font color="#409202">╍╍╍╍╍╍╍╍╍╍╍╍╍╍╮<br>╏&nbsp;&nbsp;&nbsp;&nbsp;<font color="#409202">↖を押してコード③を表示</font>&nbsp;&nbsp;&nbsp;╏<br>╰╍╍╍╍╍╍╍╍╍╍╍╍╍╍╯</font></b></summary><div>

``` PHP
<?php for($i=1;$i<=50;$i++){if($i%3==0||strpos($i,'3')){echo'Yeeh! '.$i.'でゅぇぇぇす！';}else{echo$i.'です';}echo'<br>';}?>
```

</div></details>

<details><summary><b><font color="#409202">╍╍╍╍╍╍╍╍╍╍╍╍╍╍╮<br>╏&nbsp;&nbsp;&nbsp;&nbsp;<font color="#409202">↖を押してコード④を表示</font>&nbsp;&nbsp;&nbsp;╏<br>╰╍╍╍╍╍╍╍╍╍╍╍╍╍╍╯</font></b></summary><div>

``` PHP
<?php
for
(
$i
=
1
;
$i
<=
50
;
$i
++
)
{
if
(
$i
%
3
==
0
||
strpos
(
$i
,
'3'
)
)
{
echo
'Yeeh! '
.
$i
.
'でゅぇぇぇす！'
;
}
else
{
echo
$i
.
'です'
;
}
echo
'<br>'
;
}
?>
```

</div></details>

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

<details><summary><b><font color="#409202">╍╍╍╍╍╍╍╍╍╍╍╍╍╍╮<br>╏&nbsp;&nbsp;&nbsp;&nbsp;<font color="#409202">↖を押して実行結果を表示</font>&nbsp;&nbsp;&nbsp;╏<br>╰╍╍╍╍╍╍╍╍╍╍╍╍╍╍╯</font></b></summary><div>

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です

</div></details>

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

# インデントをそろえる

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

## 入力方法

[Tabキー](https://www.google.com/search?q=Tab%E3%82%AD%E3%83%BC)を押してインデントを挿入します。
インデントのひとかたまりは半角スペース4つ分であることが多いです。しかし、スペースキーを使うのは手間がかかるだけでなく、個数のミスを生む原因にもなるので、スペースキーは使わないようにします。

## インデントを増やす

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

``` PHP
{
    echo 'Hoge';
}
```

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

``` PHP
while (true) {
    echo 'Hoge';
}

do {
    echo 'Fuga';
} while (true);
```

``` PHP
for ($i = 0; $i < 100; $i++) {
    echo 'Hoge';
}

foreach ($lines as $line) {
    echo 'Fuga';
}
```

``` PHP
switch ($i) {
    case 0:
        echo 'Hoge';
        break;
    case 1:
        echo 'Fuga';
        break;
    case 2:
        echo 'Piyo';
        break;
}
```

``` PHP
$value = match ($i) {
    0 => 'Hoge',
    1 => 'Fuga',
    2 => 'Piyo',
};
```

``` PHP
function hoge($fuga) {
    echo 'Piyo';
}
```

``` PHP
class Hoge {
    public $fuga;
}
```

``` PHP
interface Hoge {
    public function Fuga($piyo);
}
```

``` PHP
trait Hoge {
    public function Fuga() {
        echo 'Piyo';
    }
}
```

``` PHP
enum Hoge {
    case Fuga;
}
```

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

## 演算子

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

``` PHP
$hoge = 'Hoge';
```

``` PHP
$x = 1 + 2;
$x = 1 - 2;
$x = 1 * 2;
$x = 1 / 2;
$x = 1 % 2;
$x = 1 ** 2;
```

``` PHP
$x = 1 & 2;
$x = 1 | 2;
$x = 1 ^ 2;
$x = 1 << 2;
$x = 1 >> 2;
```

``` PHP
$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;
```

``` PHP
$b = $b1 and $b2;
$b = $b1 or $b2;
$b = $b1 xor $b2;
$b = $b1 && $b2;
$b = $b1 || $b2;
```

``` PHP
$hoge = 'fuga' . 'piyo';
```

``` PHP
$b = $x instanceof $y;
```

``` PHP
$x += $y;
$x -= $y;
$x *= $y;
$x /= $y;
$x %= $y;
$x **= $y;
```

``` PHP
$x &= $y;
$x |= $y;
$x ^= $y;
$x <<= $y;
$x >>= $y;
```

``` PHP
$x .= $y;
$x ??= $y;
```

### 例外

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

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

## 連続的な部分

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

``` PHP
$hoge = 'Hoge'; $fuga = 'Fuga'; $piyo = 'Piyo';
```

``` PHP
hoge($fuga, $piyo);
```

``` PHP
$hoges = ['Hoge', 'HogeHoge', 'HogeHogeHoge'];
```

## キーワード

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

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

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

``` PHP
echo 'Hoge';
echo 'Fuga';
echo 'Piyo';

echo 'Foo';
echo 'Bar';
```

# おわりに

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

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

# 参照
https://qiita.com/miso_develop/items/10103e1b7719198f7cc5