pythonがインデント単位で処理する(C系の閉じる記号がない)というのは、なんとなく知っていた。
nfcpyとか見て、なんとなくわかった気になっていた。
で、今回BlueZのgatttoolを動かすpythonスクリプトを見ると、スペースのインデントとハードタブのインデントが混ざっていた。
これ、ありなの??
ありだった・・・。
検索するとすぐに出てきて、ハードタブは8スペース扱い、とのこと。
でも、言語仕様としてはわかったんだけど、いっそのことハードタブを禁止するとかの方がよかったんじゃないだろうか。
コーディングスタイルは人それぞれだから好みがあると思うけど、ハードタブの設定はテキストエディタで可変になるんで、ちょっと危険なような。
COBOLだかFORTRANだか忘れたけど、何桁目に書くとなんとか、みたいなタイプは、スペースだけの方がよいと思う。
まあ、こういうのは現場でやってる人からすると「わかってるから現場で回避するんだよ」という類のものだろう。
知っていれば回避できるし、個人で気に入らないコーディングをしなければ済むし、いざとなればastyleで見るときは書き換えてしまうとかもありだろう(astyleにpythonがあるか知らんが)。
まず、タブは (左から右の方向に) 1 つから 8 つのスペースで置き換えられ、置き換え後の文字列の終わりの位置までの文字数が 8 の倍数になるように調整されます (Unixで使われている規則と同じになるよう意図されています)。
- タブは、コンパイラというか実行時というかのときにスペースに変換される。
- そのスペースの数は、1~8。
- 終わりが8の倍数になるように調整
ということだ。
だから、
- スペース6個+タブ1個=スペース8個
- スペース7個+タブ1個=スペース8個
- スペース8個+タブ1個=スペース16個
- スペース9個+タブ1個=スペース16個
となるはずだし、
- タブ1個+スペース5個=スペース13個
- タブ1個+スペース6個=スペース14個
となるだろう。
タブの前にスペースがなければ、あるいはちょうど8の倍数であれば8スペース扱い。
タブの前にスペースがあれば、それを含めて8の倍数になるよう調整。
式にするとめんどくさそうだ。
まあ、検索するとだいたい「混ぜるな危険」になってる。
私も混ぜないように気をつけよう。
0 件のコメント:
コメントを投稿
コメントありがとうございます。
スパムかもしれない、と私が思ったら、
申し訳ないですが勝手に削除することもあります。
注: コメントを投稿できるのは、このブログのメンバーだけです。