プログラミング超入門(５)〜GO言語〜

#ブール型(Boolean型)
ブール型はTrue`「真」`またはFalse`「偽」`のうちどちらか一つを持つ値の形で文字列ではありません。よって`("")`ダブルクォーテーションなどの引用符は必要ありません。GO言語でブール型の値を宣言してみます。

```booleans.go
package main

import "fmt"

func main() {
    a := 10
    b := 1
    var num_bool bool = a > b
    
    fmt.Println(num_bool)
    fmt.Println(reflect.TypeOf(num_bool))
}
```
##実行結果
```
true
```
不等号を逆にしてみます。

```booleans.go
package main

import "fmt"

func main() {
    a := 10
    b := 1
    var num_bool bool = a < b
    
    fmt.Println(num_bool)
    fmt.Println(reflect.TypeOf(num_bool))
}
```
##実行結果
```
false
```
変数aにtrueを代入しPrintf関数でブール値を表す`「%t」`を使用して出力。次に変数bにfalseを代入して出力部分に`a == b`を表示させます。`「＝＝」`は**等価比較演算子**の一つで、左の値(a)と右の値(b)が等しければブール値がtrue、そうでなければfalseになります。対して、`「！＝」`は左の値(a)と右の値(b)が等しくない場合にブール値がtrueになります。変数cに３を代入、変数dに７を代入して両者のブール値を出力してみます。

```booleans２.go
package main

import "fmt"

func main() {
    a := true
    fmt.Printf("aの値は%t\n", a)

    b := false
    fmt.Printf("a==bの値は%t\n", a == b)

    c := 3
    d := 7
    fmt.Printf("c!=dの値は%t\n", c != d)
}
```
##実行結果
```
aの値はtrue
a==bの値はfalse
c!=dの値はtrue
```

#演算子
さて、ここで演算子について見て行きましょう。演算子とは、足し算や引き算などの四則演算や２つの値の大小を比較する時に使用する記号のことです。それぞれの効果（説明）と記号をグラフにしてみました。

|算術演算子|代入演算子|等価比較演算子|論理演算子|
|:----:|:----:|:----:|:----:|
|加算(かざん)[足し算]|代入|値が等しければtrue|ANDを返す|
|+|=|==|&|
|減算(げんざん)[引き算]|加算して代入|値が等しくなければtrue|ORを返す|
|-|+=|!=|｜|
|乗算(じょうざん)[掛け算]|減算して代入|値が大きければtrue|XORを返す|
|*|-=|>|^|
|除算(じょざん)[割り算]|乗算して代入|値が小さければtrue|指定論理を抽出して代入|
|/|*=|<|(&,｜,^)=|
|剰余(じょうよ)[余り]|除算して代入|値が同じか大きければtrue|論理積(且つ)条件が両方成立すればtrue[AND]|
|%|/=|>=|&&|
|累乗(るいじょう)[べき乗]|剰余して代入|値が同じか小さければtrue|論理和(または)どちらかの条件が成立すればtrue[OR]|
|**|%=|<=|｜｜|
|文字列結合|累乗して代入|値が厳密に等しければtrue|その他、ヒア演算子。指定キーワードまでの文字列を代入|
|.|**=|===|<<|
||文字列として結合|値が厳密に等しくなければtrue|インクリメント演算子|
||.=|!==|++|
|||文字列として等しければtrue|デクリメント演算子|
|||eq|--|
|||文字列として等しくなければtrue|連結演算子(文字列が絡むと連結する)|
|||ne|＋|
|||文字コードが大きければtrue|符号反転演算子|
|||lt|x = x *(ー1);←この前にあるマイナスのこと|
|||文字コードが小さければtrue||
|||gt||
|||文字コードが同じか大きければtrue||
|||le||
|||文字コードが同じか小さければtrue||
|||ge||
|||指定文字列があればtrue(正規表現)||
|||=~||
|||指定文字列が無ければtrue(正規表現)||
|||!~||
|||否定(真のときは偽、偽のときは真)||
|||!||
|||大きければ-1、等しければ0、小さければ1||
|||cmp||
|||値が大きければ-1、値が等しければ0、値が小さければ1||
|||<=>||

###上記のbooleans2.goに式を追加で記述し、ファイルを再度ビルドして実行してみます。

```booleans２.go
package main

import "fmt"

func main() {
    a := true
    fmt.Printf("aの値は%t\n", a)

    b := false
    fmt.Printf("a==bの値は%t\n", a == b)

    c := 3
    d := 7
    fmt.Printf("c!=dの値は%t\n", c != d)
    fmt.Printf("c<dの値は%t\n", c < d)
    fmt.Printf("(-c)<(-d)の値は%t\n", -1*c < -1*d)

    e := 2 < c && c < 4
    fmt.Printf("eの値は%t\n", e)

    f := d < 7 || d == 7
    fmt.Printf("fの値は%t\n", f)

    g := (c*d != 21)
    fmt.Printf("gの値は%t\n", g)
}
```
##ファイルをビルドして実行
```
aの値はtrue
a==bの値はfalse
c!=dの値はtrue
c<dの値はtrue
(-c)<(-d)の値はfalse
eの値はtrue
fの値はtrue
gの値はfalse
```
`c < d`は式「３＜７」に等価となるため値はtrueになります。`-1*c < -1*d`はそれぞれ-1を乗じていますので「ー３と−７」になり大小関係が逆転し値はfalseになります。`2 < c && c < 4`は変数cに代入されている値が２より大きく、且つ４より小さければtrueになる式の値を変数eに代入して出力させた結果です。`d < 7 || d == 7`は変数dに代入されている値が７より小さいか、または７に等しければtrueになる式の値を変数fに代入して出力させた結果です。`(c*d != 21)`は変数cの値とdの値を乗じた結果が２１でなければtrueになる式の値を変数gに代入して出力させた結果です。答えは２１なのでfalseが出力されました。

[←前回の記事](https://qiita.com/ume-bar/items/3f3daa402a2d4b7bcc88)　[次の記事へ→](https://qiita.com/ume-bar/items/4f870213dde4bfa381a4)