Tabキーを打っても異なるコードを示す件
少し前に前任からとある仕事を引き継いで、プログラミングを進めていました。一通りコードを書き終わったので、使っていたbacklogで作業していた箇所を確認してみると、僕が触れていない前任者のコードにまで編集の記録が付いていました。
行の先頭をTabでインテンドしていたのですが、僕が触れていない箇所も変更した記録が残っていました。ネットで色々と調べてみたら新発見なことがあったので、まとめてみました。
調査
その時はAtomって言うエディターで作業していたのですが、Atom「不可視文字の表示」を有効にしたらエディターが以下の様に表示されました。
コードをよく見ると、上半分と下半分で各行の先頭のTabの中身が異なっていることが分かりました。前任者から貰ったコードの中身の扱いが「>>」になっているのに対して、僕が書いたインテンドは「 ··」という扱いになっていました。
原因
よくよく調べてみると、「>>」はTabで、「··」はスペースを表しているらしいです。なので「··」だった僕のインテンドはTabではなく、「スペース2つ分の空白」という中身でした。
これを更に深堀りしてみると、興味深い記事に出会いました。
なんとTabには2つの種類があるそうです。
- ハードタブ
- ソフトタブ
僕はこれらの単語は、この時に初めて聞きました。
ハードタブ
通常のタブ。これが元でソフトタブが派生したから、ハードタブに説明もクソもない。
ソフトタブ
タブに複数のスペースを用いるタブ。本来のタブ(=ハードタブ)に対して、ソフトタブはスペースを用いて表現するので、原義に厳密に従うとソフトタブを「タブ」とは呼ばない、と言う人もいる。(個人的には、その考え方に異論はありません)
結論
先輩が使っていたTabはハードタブで、僕が使っていたTabは厳密にはただにスペースの集まりでした。実はエディターでどちらのタブも幅を調節できるので、先輩のTabと僕の「タブ」がたまたま全く同じ見かけをしていました。
おしまい
どれだけエンジニア(?)の方が見ているか分かりませんが、プログラミング初心者の人には是非とも知っててほしい豆知識ですね。エンジニアじゃない人には全く関係ないですね!ばいばい~。