Project

General

Profile

Actions

Feature #2017

closed

String#/(sep)

Added by naruse (Yui NARUSE) over 14 years ago. Updated almost 13 years ago.

Status:
Rejected
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

Actions #1

Updated by matz (Yukihiro Matsumoto) over 14 years ago

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

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

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

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

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

それは認めます。

=end

Actions #2

Updated by naruse (Yui NARUSE) over 14 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

Actions #3

Updated by matz (Yukihiro Matsumoto) over 14 years ago

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

In message "Re: [ruby-dev:39208] [Feature #2017] String#/(sep)"
on Mon, 31 Aug 2009 20:25:40 +0900, Yui NARUSE 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

Actions #4

Updated by runpaint (Run Paint Run Run) over 14 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

Actions #5

Updated by naruse (Yui NARUSE) over 14 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

=end

Actions #6

Updated by naruse (Yui NARUSE) over 14 years ago

  • Status changed from Open to Rejected

=begin

=end

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0