Help us understand the problem. What is going on with this article?

変数や配列の縦位置を揃えてはいけない!!(ほとんどの場合は)

More than 1 year has passed since last update.

「縦位置を揃える」というのは、空白を追加してカラム位置を揃えることです。

// こういう、複数の変数定義を
const marginTop = 16;
const marginBottom = 24;
const marginLeft = 16;
const marginRight = 24;

// こう整列する?
const marginTop    = 16;
const marginBottom = 24;
const marginLeft   = 16;
const marginRight  = 24;

たしかリーダブルコードでも、紹介されていたはず(今手元にないので、うろ覚えですが)。

でも、私は縦位置を揃えることを積極的には賛成しません

コードフォーマッタでは対応できない

私も実際、縦位置が揃っていた方が見やすいとは思います。
揃っていないよりは、揃っていた方が良い。問題は揃えるために支払うコストです。

Go言語のgo fmt を皮切りに、どの言語でもコードフォーマッタが普及してきているようです。コードフォーマッタを使うと、

  • 書く時に細かいコードの体裁を気にしなくてもいい
  • レビューでコードの体裁をレビューしなくてよくなる
  • 不毛な議論を避けられる(「ルールではインデントすることになってますが、ここではインデントするのが自然です!」なんて言い出す人が出てくる)

と、コードの体裁に関するコストを削減し、その分本質的な部分に時間をかけることができるようになります。

ところで、あなたが使っているコードフォーマッタは、「縦位置を揃える」ことができますか?

できるのなら、おめでとう。

できないとしたら・・・。

もし、どうしても縦位置を揃えたいのなら、コーディング規約を定めて、手動で入力しなければなりません。でもそれって、

  • 書く時にコードの体裁を気にしなければならない
  • レビューで、コードの体裁を気にしなければならない
  • 時々、不毛な議論になる(「ルールでは縦揃えすることになってますが、ここでは揃えないのが自然です!」なんて言い出す人が出てくる)

って、コードフォーマッタ以前に払っていたコストを、(部分的に)払い続けるってことですよ?

私としては、縦位置は揃っていた方が良いが、別に揃っていなくても我慢できなくはありません。むしろ、縦位置なんて諦めた方が総合的には幸せになれると思います。

(余談)縦位置を揃えない "間違った" 理由

ところで、縦位置を揃えない派の中には、

変更時に、レイアウト調整のために、無関係な行も変更しなければならない

って理由を挙げる人がいます。

こんな diff は嫌だ!ってことです:

-const marginTop  = 16;
-const marginLeft = 16;
+const marginTop    = 16;
+const marginLeft   = 16;
+const marginBottom = 24;
+const marginRight  = 24;

でも、これはコーディングスタイルの問題というより、どちらかというとツールの問題って気がします。

例えば、git diff では --word-diff-regex を使うと、空白の変更しかない行は無視できます:

$ git diff --word-diff-regex='\\w+|[^[:space:]]'
 const marginTop  = 16;
 const marginLeft = 16;
+const marginBottom = 24;
+const marginRight  = 24;

エイリアスとして登録しておくと便利です。

# ~/.gitconfig
[alias]
  diff-word = diff --word-diff-regex='\\w+|[^[:space:]]'
tonluqclml
エムスリーでソフトウェアエンジニアしています。仕事ではRubyもScalaもPythonもBashもなんでもやる雑食系。 Twitter:https://twitter.com/doloopwhile 昔の個人ブログ:http://doloopwhile.hatenablog.com/ 勤務先ブログ: https://www.m3tech.blog/
http://doloopwhile.hatenablog.com/
m3dev
インターネット、最新IT技術を活用し日本・世界の医療を改善することを目指します
https://m3.recruitment.jp/engineer/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away