Project

General

Profile

Feature #2017

String#/(sep)

Added by naruse (Yui NARUSE) about 10 years ago. Updated over 8 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
-
[ruby-dev:39203]

Description

=begin
String#/(separator) を String#join(separator) の alias として追加しませんか?

以前から、Array#*(sep) との対称性から String#/(sep) の採用は求められてきました。
しかし、対称性だけでは根拠が弱く、入ることなく今に至っています。

今回は、String#split の出現頻度を調べてみました。
Rubyのソースで調べてみると、
% grep split */.rb|wc -l
1096
% grep gsub */.rb|wc -l
617
% grep push */.rb|wc -l
732
% grep to_i */.rb|wc -l
1034
% grep to_s */.rb|wc -l
2414
% grep each */.rb|wc -l
4752
という結果の通り、each や to_s には負けるものの、to_i に並び、
高順位が予想された gsub をも越える使用頻度を誇っています。

これだけの頻度ならば / を割り当てるに足と思うのですが、いかがでしょうか。
もし何かに String#/ をあてるならば、String#split 以外になる可能性は低いように思います。
=end

History

#1

Updated by matz (Yukihiro Matsumoto) about 10 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:39203] [Feature #2017] String#/(sep)"
on Mon, 31 Aug 2009 02:35:51 +0900, Yui NARUSE redmine@ruby-lang.org writes:

|以前から、Array#(sep) との対称性から String#/(sep) の採用は求められてきました。
|しかし、対称性だけでは根拠が弱く、入ることなく今に至っています。
|
|今回は、String#split の出現頻度を調べてみました。
|Rubyのソースで調べてみると、
|% grep split *
/*.rb|wc -l
| 1096

String#/は str.split(sep) の形式のものだけ数えるべきではない
でしょうか。もちろん、str / "" でも表現可能でしょうが、あま
り意図を表現しているとは思えませんから。

|これだけの頻度ならば / を割り当てるに足と思うのですが、いかがでしょうか。
|もし何かに String#/ をあてるならば、String#split 以外になる可能性は低いように思います。

それは認めます。

=end

#2

Updated by naruse (Yui NARUSE) about 10 years ago

=begin

String#/は str.split(sep) の形式のものだけ数えるべきではない
でしょうか。もちろん、str / "" でも表現可能でしょうが、あま
り意図を表現しているとは思えませんから。

ふむ、なるほど。.と(を入れてgrepするようにしてみました。
% grep '.split(' */.rb|wc -l
430
% grep '.gsub(' */.rb|wc -l
404
% grep '.unpack(' */.rb|wc -l
344
% grep '.unpack(' */.rb|wc -l
344
% grep '.sub(' */.rb|wc -l
640

合わせて Google Code Search で調べてみると、
lang:ruby .split( 約68,300件
lang:ruby .gsub( 約55,800件
lang:ruby .gsub( 約24,800件
lang:ruby .unpack( 約8,000件

なお、実際には String#split(sep, count) を抜かないといけないので、
仮に、lang:ruby .split([,)]+) とすると、約59,200件でした。
=end

#3

Updated by matz (Yukihiro Matsumoto) about 10 years ago

=begin
まつもと ゆきひろです

In message "Re: [ruby-dev:39208] [Feature #2017] String#/(sep)"
on Mon, 31 Aug 2009 20:25:40 +0900, Yui NARUSE redmine@ruby-lang.org writes:

|> String#/は str.split(sep) の形式のものだけ数えるべきではない
|> でしょうか。もちろん、str / "" でも表現可能でしょうが、あま
|> り意図を表現しているとは思えませんから。
|
|ふむ、なるほど。.と(を入れてgrepするようにしてみました。
|% grep '.split(' */.rb|wc -l
| 430
|% grep '.gsub(' */.rb|wc -l
| 404
|% grep '.unpack(' */.rb|wc -l
| 344
|% grep '.unpack(' */.rb|wc -l
| 344
|% grep '.sub(' */.rb|wc -l
| 640

いやいや、gsubその他は括弧は入れないで数えないと。
前回の数字と組み合わせるこうなります。

% grep split */.rb|wc -l
1096
% grep gsub */.rb|wc -l
617
% grep push */.rb|wc -l
732
% grep to_i */.rb|wc -l
1034
% grep to_s */.rb|wc -l
2414
% grep each */.rb|wc -l
4752

今回数えたものの中では最少ということになりますね。
いずれにしてもそれなりには需要はあるということは認めます。

=end

#4

Updated by runpaint (Run Paint Run Run) about 10 years ago

=begin
I don't object to this proposal, but note that it leads to unfortunate syntax when sep is a /-delimited regex. For example:

'f o o' / / /
=> ["f", "o", "o"]

Even adding the optional parentheses doesn't help readability. Short of simply recommending people don't write ugly code, a compromise could be for String#/ to only accept String separators. (Of course if this concern has already been addressed, then I apologise in advance for intruding).
=end

#5

Updated by naruse (Yui NARUSE) about 10 years ago

=begin
成瀬です。

Yukihiro Matsumoto wrote:

今回数えたものの中では最少ということになりますね。
いずれにしてもそれなりには需要はあるということは認めます。

String の中でも特に数の多そうなものを選んで挙げていますからね。
まぁ、この点はこれ以上述べる必要はないと思います。

つまり String#/ は、

  • alias 元である String#split は十分に使われている → 1文字メソッドを得る資格がある
  • String#/ の alias 元候補に挙がりそうな別のメソッドは見当たらない → 割り当てを後悔する可能性は低い までは少なくとも満たしているわけです。

で、思うにひっかかっているのは追加されて誰がうれしいの?
というところだと思うのですが、例えば
http://jarp.does.notwork.org/diary/200909a.html#200909012
の人とかはいいとして、

わたしがほしいと思ったのは、以下のような場合でしょうか。
IO.readlines("some.txt").map{|l|l.chomp!}.map{|l| l.split(",") }
IO.readlines("some.txt").map{|l|l.chomp!}.map{|l| l.split "," }
IO.readlines("some.txt").map{|l|l.chomp!}.map{|l| l / "," }
最初のものだとかっこが目立ち、かといってないのも落ち着かず、
三つ目だとシンプルにまとまるように見えます。

Run Paint Run Run さんの仰る通り、
またまつもとさんがおそらく懸念なさっている通り、
見づらく書く方法が増えるというのは確かにそうなんですが、
これがなくてもすでにそういったコードは書けるわけで、
それを懸念するよりは実際の使い分けは個々人に委ねた方が
よいのではないかと思っています。

--
NARUSE, Yui naruse@airemix.jp

=end

#6

Updated by naruse (Yui NARUSE) about 10 years ago

  • Status changed from Open to Rejected

=begin

=end

Also available in: Atom PDF