rubyでture、falseの入力を文字列(Stirng)として受け付けたとき、Boolean型のtrue、falseとして扱うために変換するコードを紹介します。
前提
Rubyではnillかfalse以外をtrueとして扱います。
そのため、文字列のfalseを条件文に利用すると、論理値としてはtrueになってしまいます。
bool = gets
p bool.class
if bool
p "Trueです!"
else
p "Falseです!"
end
=====入力・出力結果=====
false
String
"Trueです!"
String→Booleanの変換コード、動作の紹介
文字列のtrue、falseをBooleanに変換する方法を早速紹介します。
class String
def to_bool
# 関数の呼び出し元文字列がtureだったらBoolean型のtrueを返す
if self =~ /(true|True|TRUE)/
return true
# 関数の呼び出し元文字列がfalseだったらBoolean型のfalseを返す
elsif self =~ /(false|False|FALSE)/
return false
# 関数の呼び出し元文字列がtrue、false以外だったら元の文字列を返す
else
return self
end
end
end
コードの要点をひとつだけ補足すると、class String部分はオープンクラスというRubyの概念を利用して、元々存在していないメソッドを追加しています。
オープンクラスについてはページ下部で紹介しますので、一旦置いておいて、動作確認のコードも合わせて紹介します。
class String
def to_bool
# 関数の呼び出し元文字列がtureだったらBoolean型のtrueを返す
if self =~ /(true|True|TRUE)/
return true
# 関数の呼び出し元文字列がfalseだったらBoolean型のfalseを返す
elsif self =~ /(false|False|FALSE)/
return false
# 関数の呼び出し元文字列がtrue、false以外だったら元の文字列を返す
else
return self
end
end
end
str = gets.to_bool
if str.class == String
p 'Stringです!'
else
if str
p 'Trueです!'
else
p 'Falseです!'
end
end
=====入力・出力結果=====
例①
false
"Falseです!"
例②
true
"Trueです!"
例③
a
”Stringです!”
オープンクラスの補足
オープンクラスはざっくりいうと、クラスの再定義、メソッドの上書き、メソッドの追加を可能にしてくれる概念です。
メソッドの上書きかどうかはメソッド名で判別されるので、名前被りが発生していないかの確認はとても大切になります。
名前が被っていないかの確認は以下二つが簡単かと思います。
- コードを書いて検証(No methodがエラーが出るかどうかを確認)
- リファレンスを見る(Stringクラスはこちら)
Boolean→Stringの補足
String→Booleanは自らメソッドを追加しなければなりませんが、逆のBoolean(TrueClass、FalseClass)→Stringは用意されています。
bool = false
str = bool.to_s
p bool.class
p str.class
=====出力結果=====
FalseClass
String