スポンサーリンク
技術関係

「行末改行って必要?」「インデントのタブとスペースってどっちがいいの?」とかのコード規約の話

「ATOM」「SublimeText」 「Intellij IDEA」「VS Code」など、多くのエディタには便利な機能が備わっています。

「行末改行挿入」や「タブのスペース変換」などもその機能に該当します。

 

そんな便利機能を

「とりあえず捗るらしいから設定しておく」

という感じで設定している方もエンジニア初心者の方も少なくないと思います。

 

自分も最初は分からず設定していましたが、ちゃんとした理由があります。

今回は「何でこんな設定をしているのか?」という疑問を解消するべく調べてみました。

スポンサーリンク

インデントはタブかスペースか論争(2個?4個?)

自分は主に「SublimeText」使いなのですが、Sublime Textでの設定はこんな感じ。

Preferences -> Settings 

"translate_tabs_to_spaces": true,
"tab_size": 2,

 

この設定で「Tab使用時」に「スペース2個でインデント」が行われるよう変換してくれます。

なぜタブ?スペース?

言語や好みによってインデントのスペースは「2個派・4個派・8個派」などが存在します。

 

更に、文化によっては

「スペースでのインデント」ではなく、「タブでインデント」

する事もあります。

 

Rubyからプログラミングを始めた自分は、勧められるがまま

「スペース2個のインデント」

を使用していました。

 

実際にRubyのスタイルガイドではスペース2個のインデントが推奨されています。

fortissimo1997/ruby-style-guide

言語とその規約次第で決まるものがほとんど

Rubyではスペース2個が主流です。

しかし、他の言語では全く違うインデントが主流の場合もあります。

つまりインデントのやり方で「スペースが悪い、タブが悪い」という話ではなく

 

「言語の規約やコミュニティの好み次第」

 

という話が結論です。

 

一番やってはいけないのは、使っている言語で「インデント方法を混同させる」ことです。

実際の自分が行うプロジェクトの規約に則って、統一しましょう。

参考

インデントにタブを使うことのデメリット

「teratail」の質問から。
回答が29も付いていて盛り上がってる議題

 

Rails coding standards – Why 2 space indentation? / StackOverflow

「Stack Overflow」の質問から
こちらでも慣習や規約の問題という回答あり。

行末の空白削除と改行

次は「行末の空白削除と改行」について。

no new line at end of file は何故起こる?

よくありがなのがこれ。

GitHub上でのファイルが「No new line at end of file」と警告が出されています。


理由は明白で「コード行末に改行がないから」です。

 

対処方法はエディタで「行末の空白削除と改行」を設定するだけです。

またしても「SublimeText」だとこんな感じの設定値(他エディタは別途)

"ensure_newline_at_eof_on_save": true,
"trim_trailing_white_space_on_save": true,

これで

「行末の不要なスペースがある場合削除」かつ「行末に改行を自動挿入」

されるようになります。

 

でも果たしてなんでこの設定が必要なんでしょうか?

なぜ行末空白削除と改行が必要なのか?

自分のプログラマーデビュー当初は、行末改行を入れずにレビューで指摘されていました。

手動で入れるのも手間なので、ここもエディタ側で設定しておいたほうがいいです。

 

しかし何で行末改行が必要なのか?と、疑問に思ったらこういうことらしいです。

テキストファイルとは、いくつかの行の集合である。そして、行とは改行コードで区切られるまでの、一連のテキストデータの連続である。

なぜ最終行に改行を入れるのですか? / teratail

 

この説明が一番しっくり来ました。

つまり、

 

「行+改行」があって初めて「行」になる

 

ということ。

POSIX

Stack Overflowにも同じような質問がありました。

Why should text files end with a newline? / StackOverflow

Because that’s how the POSIX standard defines a line:

それが「POSIX」という仕様に則った行の定義の仕方。

POSIXとは?
http://e-words.jp/w/POSIX.html

 

実際に「C, C++」では、改行なしのソースファイルだと未定義扱いになり誤作動を引き起こす、とのこと。

ちなみにRubyではそういった誤作動は起きませんが、慣習的に行末改行はしておきましょう。

参考

[迷信] ソースファイルの末尾に } / 株式会社きじねこ
CとC++の規格での行末改行の話

Why does Ruby on Rails generate add a blank line to the end of a file? / StackOverflow

「何故rails g で作ったファイルに行末改行があるのか」

まとめ

チームで開発するのであれば必ずそのプロジェクトの規約に則ってコードを書こう。

足並みを揃えないと無駄な差分発生など、開発に少なからず影響を与えます。

 

おわり

コメント

タイトルとURLをコピーしました