split
https://gyazo.com/ca518f0eb596de0dab29478bfea4d52a
@koizuka
「与えられた文字列をカンマでsplitした結果を配列で返す」という仕様だけに従うなら0になることはないよね。空文字列とかの条件でもう一つ追加仕様が入ってることになる。
僕もこれ
@mattn_jp
ちょっと調べた感じ、JS/Python/Go/C# などは 1、Ruby/Perl は 0 なので、扱ってるプログラミング言語によって意見が分かれるっぽいです。
なぜRubyはそんな仕様なのか?
末尾の空要素を暗黙に取り除くようだ
code:Ruby.rb
"a,".split(",")
",a".split(",")
=> "a"
それはまあある種の合理性があるなぁ
"".split(',')は[]が好き派ですけど、改めてなぜかと考えるに、[1,2]は2要素のリストで[1]は1要素で[]は空リストという記法は自然と認めてるのと同じという気分かな。あと「joinすると戻るリストでどの要素も','を含まないもの」が宣言的な気分の時の要請なので複数候補があるときは最小をとって欲しい
@nishio
"1,"は1要素になって欲しい感じですか?
@kinaba
joinで元に戻って欲しいのでこれは2要素になって欲しい感じです。(私の発言の前半との関連としては、[1,2,3,]を3要素のリストにするようなよくある言語仕様については、とても不自然だが利便性のために仕方なくこうなっているという感覚でいます。)
Rubyと同じなのかなと思ったら違った
「joinで元に戻って欲しい」が優先されている
つまり今までのところ少なくとも3つのモデルがある
table::
"" "a" "a," "a,b"
(A) 1 1 2 2 Python
(B) 0 1 2 2 kinaba
(C) 0 1 1 2 Ruby