[llfuture]Rubyでtitleメソッド作った
浜地さん(id:shinichiro_h)が LL futureのキミならどう書く? LL Golfのイベント中に
「(略)PythonのStringにtitle()とistitle()というメソッドがあって大変、ショックを受けた(略)」
みたいな事をおっしゃっていました。
Rubyにはcapitalizeというメソッドがあるけど、ちょっとばかり挙動が違うので
すぐに"本当のタイトル"を作れないし、タイトルかどうかが一発で判断できないし残念!
と、言う訳でtitleメソッドを作ってみました。
Rubyらしくメソッド名は title と title! と title? にしてみました。
これで文字列がタイトルかどうかの判別が一瞬でできてこれは便利!
自由に使ってね!
# ruby_string_title.rb class String def title ret = self.downcase c = /[a-z]/ =~ ret return ret unless c ret[c] = ret[c..c].upcase ret end def title! self.replace title end def title? return false unless /[A-Z]/ =~ self return self == self.title end end
上記スクリプトを ruby_string_title.rb とした場合、
テストは適当にこんな感じです。
require 'test/unit' require 'ruby_string_title.rb' class StringTitle < Test::Unit::TestCase def test_title assert_equal "Title" , "Title".title assert_equal "Title" , "title".title assert_equal "Title" , "tiTle".title assert_equal "Title " , "title ".title assert_equal "Title0" , "title0".title assert_equal "1.1 Title " , "1.1 titlE ".title assert_equal "これはTestです" , "これはteStです".title assert_equal " " , " ".title end def test_title! assert_equal "Title" , "Title".title!;self assert_equal "Title" , "title".title!;self assert_equal "Title" , "tiTle".title!;self assert_equal "Title " , "title ".title!;self assert_equal "Title0" , "title0".title!;self assert_equal "1.1 Title " , "1.1 titlE ".title!;self assert_equal "これはTestです" , "これはteStです".title!;self assert_equal " " , " ".title!;self end def test_title? assert_equal true , "Title".title? assert_equal true , "Title 0 ".title? assert_equal true , "1.1 Title ".title? assert_equal true , "これはTestです".title? assert_equal false , "title".title? assert_equal false , "TITLE".title? assert_equal false , "tiTle".title? assert_equal false , "title0".title? assert_equal false , "1.1 titlE ".title? assert_equal false , "これはtestです".title? assert_equal false , " ".title? end end