文字列クラスのメソッド数

文字列(String)クラスのメソッド数。

Python: 37
Java: 65
Ruby: 119

圧倒的じゃないか、我が軍は。

ちなみに、実際に数えたらRuby 1.8で102、Ruby 1.9で103だった。

ruby -e 'p ((String.instance_methods - Object.instance_methods).size)'

Matzにっき - Number of Methods in the String Class

“圧倒的”とまで言われると気になるもので、Squeak Smalltalk(Squeak3.9)のも調べてみた。

(String allSelectors difference: Object allSelectors) size "=> 491 "

(´ー`)フッ… あえて言おう! カs……いや。やめとこ。w

文字列クラスのメソッド数比較 - Smalltalkのtは小文字です

.net framework 3.5 だと、

typeof(string).GetMembers().Count();    // 124

とのこと。

戦いは数だよ!とか言いたくなりそうだが、.net の場合オーバーロードもそれぞれカウントされているので、(Java はともかく)そのまま比較するのはフェアでないだろう。

名前が相異なるメンバを数えると、

typeof(string).GetMembers().Select((member) => member.Name).Distinct().Count();
    // 50

という訳で、実は .net の System.String のたいていのメンバは 2 つ以上のオーバーロードを持っているようだ。

また、Java と比べると、文字列のエンコーディング関連が分離されていたり、正規表現が別クラスだったり、ToString 系のメソッドは ToString する対象の型のメンバ*1になっていたり、で本質的には Java よりメンバが少ないってほどでもなさそう。

そういえば、以前 Java でコードを書いていたときは、int やらが Object でない&値型をユーザー定義出来ないのが気持ち悪かったり非常に困った*2りした記憶が・・・。今の Java だとどうなのか少し気になる・・・。

*1:というかあらゆる型のメンバ

*2:携帯 Java だとヒープ周りの制約が辛いのです