何かを書き留める何か

数学や読んだ本について書く何かです。最近は社会人として生き残りの術を学ぶ日々です。

黒か、青か

先日、blueなるコードフォーマッタの存在を知った。

github.com

blueはLinkedinの従業員がBlackに影響されて作ったフォーマッタのようである。 README.mdに興味深い記述がある。

blue defaults to single-quoted strings. This is probably the most painful black choice to our eyes, and the thing that inspired blue. We strongly prefer using single quoted strings over double quoted strings for everything except docstrings and triple quoted strings (TQS). Don't ask us why we prefer double-quotes for TQS; it just looks better to us! For all other strings, blue defaults to single quoted strings. In the case of docstrings, those always use TQS with double-quotes.

"This is probably the most painful black choice to our eyes" とは思い切った記述である。 二重引用符に対してどのような感情を抱いているのかが気になるところである。 とはいえ、穿鑿したところで意味はない。 意味はないと思うが、自分なりに想像を試みる。

1つ目は、キーボード配列の違いではないかという仮説。 USキーボードの場合、単一引用符と二重引用符は同一のキーである。 単一引用符の場合はただ単にそのキーを打鍵すればよいが、二重引用符の場合は左手でシフトキーを押しながら打鍵する必要がある。 つまり、二重引用符の場合は1手余計に入力にかかる。 一方、JISキーボードの場合は単一引用符も二重引用符も数値キーにあり、いずれもシフトキーを押す必要があり、手数に差はない。

ちなみに、私はJISキーボードを愛用している、というよりUSキーボードが使えない。 また、シフトキーは右手小指で押す癖があるので、右手小指でシフトキー押しつつ左手中指で二重引用符を入力している。 つまり、二重引用符の方が打鍵しやすいのでBlackのフォーマットに違和感を感じない。

もう1つは他言語の経験者が困惑するからではないかという仮説。 たとえば、PHPRubyでは単一引用符による文字列リテラルと二重引用符による文字列リテラルは動作が異なる。 単一引用符と二重引用符で意味が異なる言語に慣れ親しんだ人が、Pythonでは同じ意味の文字列リテラルとはいえ二重引用符に強制されるのは驚くかもしれない。 しかし、この説はblueの単一引用符に寄せる理由の説明にはなっていない。

結局、作者に聞いてみるしかないのだが、 "the most painful black choice to our eyes" という言葉を使ってしまっている以上、自転車置き場の議論を超えるような話は出てこない気がする。 PEP 8にも次のような記述がある。

A style guide is about consistency. Consistency with this style guide is important. Consistency within a project is more important. Consistency within one module or function is the most important.

結局、プロジェクトで何らかの合意が取れていれば、何色でもそれでいいのである。

ただ、Blackは個人の好みが入る余地を徹底的に排除することでプロジェクトに導入しやすくなり、Blackが流行している、と私は推測している。