0
0

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 5 years have passed since last update.

垂直方向の位置揃え

Posted at

インデントと垂直方向の位置揃えについて、使い方を誤ると辛いことになるので注意したい。
サンプルはjsだけど言語によって変わるものでもないのでなんのタグつければいいかわからん:confounded:

要約

垂直方向の位置揃えをするなら半角スペース!!!!

表現の定義

正式な名称がわからないのでここで使う表現について以下のように定義しておく。

インデント

字下げ。{}()などで囲まれた間の行について空白やタブで1段下げること。

例:インデント
function fnNankaShutokusuruKansu(param) {
    return 'なんか' + param + 'が渡された';
}

垂直方向の位置揃え

The Art of Readable Codeだとcolumn alignmentと呼ばれているやつ。
類似処理が連続するコードにについて、違いのある部分がわかりやすいよう、同じ部分は同じ位置に書くこと。
なんかスマートな呼び方あるんだろうか……:thinking:
垂直方向の位置揃えを行うかどうかも好みが分かれる。

例:垂直方向の位置揃え
垂直方向の位置揃えなし
const hoge1 = fnNankaShutokusuruKansu('hoge');
const hensu1 = fnNankaShutokusuruKansu('piyo');
const chottonagaihensu1 = fnNankaShutokusuruKansu('chottonagaihensu');
const foo1 = fnNankaShutokusuruKansu('bar');
const bar1 = fnNankaShutokusuruKansu('bar');
垂直方向の位置揃えあり
// "="の位置を揃えることでパラメタ以外同じfnNankaShutokusuruKansuを呼び出していることがわかりやすい
const hoge2             = fnNankaShutokusuruKansu('hoge');
const piyo2             = fnNankaShutokusuruKansu('piyo');
const chottonagaihensu2 = fnNankaShutokusuruKansu('chottonagaihensu');
const foo2              = fnNankaShutokusuruKansu('foo');
const bar2              = fnNankaShutokusuruKansu('bar');

よくある間違い

インデントにタブ文字を使用しているコードで、垂直方向の位置揃えにもタブを使っている。

タブ文字を幅4で表示しながら垂直方向の位置揃えをした
function main() {
	const hoge				= fnNankaShutokusuruKansu('hoge');
	const piyo				= fnNankaShutokusuruKansu('piyo');
	const chottonagaihensu	= fnNankaShutokusuruKansu('chottonagaihensu');
	const foo				= fnNankaShutokusuruKansu('foo');
	const bar				= fnNankaShutokusuruKansu('bar');
}

コードブロック内でタブ文字使ってもスペースに置換されるんですね:confounded:

垂直方向の位置揃えにもタブを使うと、タブのメリットである「見る人の好みのサイズでインデントできる」というメリットが死ぬ。
垂直方向の位置揃えをした人のダブサイズに合わせないと崩れる。

タブ幅を変えた場合のイメージ
幅2のタブ:sweat_smile: ![幅2のタブ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64415/2ef09639-12ef-03c0-1f27-23ec932a5efa.png) 幅4のタブ:smile: ![幅4のタブ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64415/519ff663-ee3d-fb20-9568-7cd6298e9a82.png) 幅8のタブ:sweat_smile: ![幅8のタブ](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64415/11075981-693b-3ac4-acc0-31139c0c4a55.png)

悩ましいところ

長くなるif文やパラメタの多い関数の途中で改行したくなったときのこれはインデントなのか垂直方向の位置揃えなのか。
1段下げることが目的ではなく垂直方向を揃えることが目的なので、垂直方向の位置揃えだと思っている。

if (hoge === 1 && piyo === 1 ||
    foo  === 2 && bar  === 2) { // ここのfooの位置とか
    fnParametaOoiKansu(param1, param2, param3,
                       param4, param5); // ここのparam4の位置とか
}

結論

インデントに半角スペースを使うかタブを使うかはチームで決めればいいが、どちらをちゅかう場合でも垂直方向の位置揃えをするなら半角スペースを使う。

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?