何がしたいか
例えば、
def validate_some_str(str)
/\A[a-z]*\z/ =~ str
end
validate_some_str("doge") #=> 0
validate_some_str("doge2") #=> nil
これを
validate_some_str("doge") #=> true
validate_some_str("doge2") #=> false
こうしたい。
疑問
if validate_some_str("wow")
って書いてる分には問題ないし特に困ることはないけど、
どうしてもtrue
かfalse
だけを返したいとき、正しい方法ってなんだろう
(データベースに値をつっこんでるときなど、0
がtrue
と認識されないコンテキストがあるときに役に立ちそうですね)
どうするか
解法その1
def validate_some_str(str)
(/\A[a-z]*\z/ =~ str)? true : false
end
シンプルでとてもわかりやすい
解法その2
def validate_some_str(str)
!!(/\A[a-z]*\z/ =~ str)
end
なんかかっこいい。Stack Overflowではこれをやっている人が多かった。俺も便乗して使ってました。
解法その3
def validate_some_str(str)
/\A[a-z]*\z/ === str
end
探していたのはこれですわ。そういえばcase
文で知らない間にいつも使ってました。これから使っていきます。
最後に注意
解法1,2はString
とSymbol
以外が与えられるとTypeError
を吐きます。
解法3はまとめてfalse
を返します。ちょっと挙動が違う。