はじめに
ぐぐってもピンとこない、、、なくなくないみたいな日本語使ってる違和感がある、、、
という事で調べて見た僕なりの解釈で書きます
!
は論理演算子
論理演算子とはtrueかfalseを返す演算子の事
論理演算子には他にはand
やor
等もある
!
はオブジェクトを評価して
nilかfalseならtrueを返す
trueならfalseを返す
それが!
つまり否定の論理演算子
例
irb(main):018:0> !nil => true irb(main):019:0> !false => true irb(main):020:0> !true => false
!!
は否定の否定の論理演算子
!!
は否定の否定の論理演算子@scivola様より!!
という単体の論理演算子がるあけわけではないとコメントいただきました上記は適切な表現では無いと思われますので修正させていただきます、ありがとうございます!
!!
とは
!
を二回繰り返す事により1回目の!
で帰ってきたtrueかfalseをもう1回否定しています。
nilかfalseならfalseを返す
trueならtureを返す
つまり否定の否定をしている事になります
例
irb(main):025:0> !!false => false irb(main):026:0> !!nil => false irb(main):027:0> !!true => true
、、、とまぁこれだけだと余計になんのために使うのかわからないんですよね
なくなくない?みたいな日本語使ってる違和感と言いますか、、、
答えは、論理演算子である。という事でした
論理演算子は評価して論理値オブジェクト(true,false)を返す
当然ですが、全てのオブジェクトの返り値が必ずしも論理値オブジェクトになるわけではありません。
irb(main):001:0> a = "あ"
=> "あ"
irb(main):002:0> a
=> "あ"
ですので、trueかfalseが欲しい時に!!
を使わずに書くとこんな感じになります
irb(main):028:0> a = "あ"
=> "あ"
irb(main):029:0> a ? true : false
=> true
でも!!
を使うと
irb(main):031:0> a = "あ"
=> "あ"
irb(main):032:0> !!a
=> true
これで二文字でかけちゃうんですね!
すごいスマート!!
これが僕の考えるメリットでした〜以上です!