日本人を悩ます複数形問題
はじめに
これまで s の有無でわりと時間を無駄にしてきた。コードを書く上でストレスにもなっている。そういうのを集めた。
exist と exists
Ruby は File#exist?
なので自然な感じはする。File.exists?
も用意されていたが非推奨になったのち最近では File.exist?
だけになった。これで exist と exists が混合する気持ち悪さから開放される。
一方、英語圏では exists がやたら使われる。exists(user)
のようなコードを見かけるたびに user は単数形なのにと疑問が沸く。翻訳すると exist は存在で exists は存在するらしい。複数形の s ではない? (ますます混乱)
start_with と starts_with
これも Ruby だと start_with? でわかりやすいのだが、
- Python → startswith[1]
- Rust → starts_with
- ググるとだいたい starts_with 系
- ActiveSupport → すでに start_with? があるにもかかわらず starts_with? にエイリアス
- もともと ActiveSupport が先だとはいえ
といったように starts が多い。start って動詞なのに複数形にしていいのだろうか?
また複数形問題とは関係ないけど論理型を返すならプレフィクス is_
をつけてほしい。starts_with だけじゃわからない。
end_with と ends_with
同上
result と results
articles や items と書いてあって配列でなかったことはないが results の場合配列かどうか怪しい。主観として多めというだけで results の型は予想がつかない。いや、多めですらない場合もある。ただの小さな文字列だったりする。自分でこの単語を使いそうになったときはどっちが適切なのか永遠と悩んで先に進めなくなるので使わないことにしている。
state と status
だいたい同上
equal と equals
例えば assert_equals と assert_equal の何が違うのか。assert_equals(1, 1)
のどこに複数形の要素があるのだろうか?
util と utils
英語圏ではなんでもかんでも複数形にしたがるはずがこれは逆になっている。node.js の組み込みメソッドがブラウザ上でも使える util パッケージは単数形になっている。
一方 Ruby の FileUtils は複数形になっている。英語圏では utility が money と同様に、複数なのはあたりまえなので常に単数形とする説を仮定したが、そのような言及はどこにも見つからなかったので結局基準はわからない。
strip と trim
もう複数形問題と関係なくなっちゃってるけど Ruby の strip に相当する機能が英語圏ではかたくなに trim になっている。Ruby のメソッド軍を参考にしているように見えなくもない他言語のライブラリでも strip は trim になっていた。でも Python は strip っていう。Ruby の strip は Python からとった?
-
単語と単語を繋げるんじゃない(小声) ↩︎
Discussion
existsとかstartsのsは三単現のsですね
真偽値を返す場合必ずisを前につけるというのは英語的には自然じゃない場面が多いです。
1.is_number()
は英文にすると”1 is a number?”で意味が通ります。同じように
exists
やstarts
、他にはhas
といったプレフィックスも英文に直してみると自然になるようになっています。また、sをつけるのは冗長に思われるかもしれませんが、もしsをつけない形で統一するなら、
is_number
はbe_number
にするべきです。utilityは手元の辞書で調べると複数形になるのが普通のようです。私の勘ですがはutilsはutilitiesの略であり、utilはutility moduleの略だと思ってます。
stripとtrimについても辞書を引いてみると全然違う単語ということがわかりました。
stripは何かから衣服や皮などを剥がすニュアンスが強く、
trimは何かについて余分なところを切り取るという意味合いが強いです。
文字列における余分なもの(空白など)を皮のように連想したのがstripだと言えるかもしれません。trimは特に連想なくそのままの意味です。
三単現……? (急いでぐぐる)
動詞の s は複数形と関係なかったんですね
もやもやが少し晴れました
他にも有用な情報ありがとうございます