1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[Ruby]文字列(String)のtrue、falseをBoolean(TrueClass、FalseClass)へ変換

Last updated at Posted at 2021-07-26

rubyでture、falseの入力を文字列(Stirng)として受け付けたとき、Boolean型のtrue、falseとして扱うために変換するコードを紹介します。

前提

Rubyではnillかfalse以外をtrueとして扱います。
そのため、文字列のfalseを条件文に利用すると、論理値としてはtrueになってしまいます。

false.rb
bool = gets
p bool.class

if bool
  p "Trueです!"
else
  p "Falseです!"
end

=====入力・出力結果=====
false
String
"Trueです!"

String→Booleanの変換コード、動作の紹介

文字列のtrue、falseをBooleanに変換する方法を早速紹介します。

string→boolean変換.rb
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の概念を利用して、元々存在していないメソッドを追加しています。

オープンクラスについてはページ下部で紹介しますので、一旦置いておいて、動作確認のコードも合わせて紹介します。

動作確認.rb
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です!”

オープンクラスの補足

オープンクラスはざっくりいうと、クラスの再定義、メソッドの上書き、メソッドの追加を可能にしてくれる概念です。
メソッドの上書きかどうかはメソッド名で判別されるので、名前被りが発生していないかの確認はとても大切になります。

名前が被っていないかの確認は以下二つが簡単かと思います。

  1. コードを書いて検証(No methodがエラーが出るかどうかを確認)
  2. リファレンスを見る(Stringクラスはこちら)

Boolean→Stringの補足

String→Booleanは自らメソッドを追加しなければなりませんが、逆のBoolean(TrueClass、FalseClass)→Stringは用意されています。

Boolean→String.rb
bool = false
str = bool.to_s

p bool.class 
p str.class

=====出力結果=====
FalseClass
String
1
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?