LoginSignup
1
1

More than 3 years have passed since last update.

【Ruby】結局`!!`って何のために使うの?

Last updated at Posted at 2020-08-28

はじめに

ぐぐってもピンとこない、、、なくなくないみたいな日本語使ってる違和感がある、、、

という事で調べて見た僕なりの解釈で書きます

!は論理演算子

論理演算子とはtrueかfalseを返す演算子の事

論理演算子には他にはandor等もある

!はオブジェクトを評価して

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

これで二文字でかけちゃうんですね!
すごいスマート!!

これが僕の考えるメリットでした〜以上です!

1
1
2

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
1