Rの変数名についての議論まとめ(ライト版)
天下のHadleyさんとGoogle先生で言ってることが違う!
という話があったので、軽くまとめてみます。
(あんまガチな話はついていけないので、ほんと軽くです)
参考文献
元ネタ
歴史的経緯の話
とりあえず比較してみる
Camel Case
rStyle
みたいなやつです。 これについての評価はそれぞれ以下のような感じです。
Hadleyさん
- これは「Bad」
- 変数名も関数名も小文字にしよう!
Googleのスタイルガイド
- まあ「OK」
- でもキャメルケースは関数用だよ!
ということで、まあ避けれるなら避けた方がいい?という感じ。
Snake Case
r_style
これは評価が分かれます。
Hadleyさん
- 「Good」!
Googleのスタイルガイド
- 「Bad」!
むむむ、どちらを信じればよいのでしょう。。
Googleが「_」をダメと言ってる理由の推測は後述します。 ひとまず、次。
ドットつなぎ
r.style
Googleはこれを勧めてますが、、
Hadleyさん
- (コメントすらしていない)
Googleのスタイルガイド
- 「Good」!
うむむ。 Hadleyさんの沈黙の真相は?
ここまでのまとめ
HadleyさんもGoogleさんも「Good」だと合意している書き方はない、という衝撃の事実が判明しました。ひえー!
これについて、知識のない私ながら思ったことをいちおう書いてみます。
Snake Caseがだめだ、と思い込む人がいる理由
これは多分、歴史的経緯によります。
私も先日知ったのですが、過去Rでは、_
が<-
(代入)の意味を持っていた時代があったそうです。
You can put underscores in names
It used to be that
_
was a shortcut for<-
. (That was always a bad idea. And it led me to use dots in function names, likecalc.genoprob
, which has been problematic due to the S3 class system.)Then they started allowing
=
in place of<-
.And then they got rid of
_
as a shortcut for<-
. Good idea, and now we can have functions named likecalc_genoprob
.(出典:hipsteR)
あ、「Snake Caseがだめだ、と思い込む人がいる理由」だけではなくて、
「ドットつなぎがいいと思い込む人がいる理由」も書いてますね。
ドットつなぎがだめな理由
上の引用に書いてあるように、S3オブジェクトの仕組みとぶつかるからです。
S3オブジェクトとはなにか、についての解説は私には荷が重すぎるので、
↓でも読んでください。
(…と思ったらいちおうこのブログにちらっと書いてました。興味ある方はどうぞ。
data.frameを拡張するには 失敗編(S3でゆるふわ) - Technically, technophobic.)
S3の仕組みで、.
は関数が所属?するクラスを指定する意味を持っています。
ドットを変数名(特に関数名)に使うことで、予想外の動作を引き起こす可能性があります。
むしろGoogleはなんでこれを進めてるのか理解できない。。
結論
- Hadley信者は迷わずスネークケースで!
- それ以外の人は、キャメルケースでもいいけど、とりあえずドットつなぎはやめときましょう!