え~、Go です。
前回の続きです。
というわけで、If の使い方その2ってことで進めていきます。
今回のお題は「If with a short statement」と「If and else」
なんとなく訳してみると、「If と 短いステートメント(手続き)」、それと「If とelse」といった感じでしょうかね?
前回進めた If から、もう少し踏み込んだ内容が書かれているようです。
そして今回の進めるページのURLはこちらね。(´・ω・)つhttps://go-tour-jp.appspot.com/flowcontrol/6

もういっこはこちら。(´・ω・)つhttps://go-tour-jp.appspot.com/flowcontrol/7

じゃ~中身を見ていきまーす。
内容を見ていく
今回は2ページ分まとめて進めますが、どちらもそれほど難しいことは書いてないようです。
ポイントを抜き出してみると…
- If の条件式の前に簡単なステートメントが書ける
- そのステートメントで宣言された変数は If のスコープ内で有効
ですね。
それでは順番に詳しく見ていきます。
If の条件の前に簡単なステートメントが書ける
前回やりましたが、If を書くときには<条件式> を書く必要があります。
Go言語では、この<条件式>の前に簡単なステートメントを追記できるようです。

実際にプログラムで書いてみると…
package main
import (
"fmt"
)
func main() {
// ① if でステートメントを一緒に書く
if fmt.Println("①Ifのステートメントですよ~") ; true {
// <条件式>の部分が true なので中に入る
fmt.Println("①Ifの中ですよ~")
}
// ②こんどは条件を false にする
if fmt.Println("②Ifのステートメントですよ~") ; false {
// <条件式>の部分が false なので中には入らない
fmt.Println("②Ifの中ですよ~")
}
}
と、こんな感じになります。
そして Run してみると気づくと思いますが、If に書いたステートメントは <条件式> の真偽に関わらず実行されるようですね。
そのステートメントで宣言された変数は If のスコープ内で有効
続いて If のステートメント部分で変数を宣言したときのお話ですね。
結論から言っちゃえば、ステートメント部分で宣言された変数は If のスコープ内(中括弧内)のみで有効なようです。

実際に試してみます。
まずは If のスコープ内で変数を使ってみます。
package main
import (
"fmt"
)
func main() {
// ① Ifのステートメントで変数を宣言する
if v := "①変数が使えるかな~?" ; true {
// 変数 v を出力する
fmt.Println(v)
}
// ② 今度は else 側で試してみる
if v := "②変数が使えるかな~?" ; false {
// 何もしない
} else {
// 変数 v を出力する
fmt.Println(v)
}
}
else の方も含めて変数を使うことができました。
さて、今度は if のスコープ外で使ってみます。
package main
import (
"fmt"
)
func main() {
// ① Ifのステートメントで変数を宣言する
if v := "①変数が使えるかな~?" ; true {
// 何もしない
}
fmt.Println(v)
}
Run するとわかりますがエラーが表示されます。
prog.go:14:14: undefined: v
これは、変数 v が undefined(未定義)です、って言われています。
というわけで、if のスコープ外では使えませんでした。
サンプルプログラムについて
ここまでに使ったことのないファンクションなどがあり、ポイントがブレそうなので触れないことにします。
とは言いつつも、完全にスルーするのもアレなので、、、コメントを差し込んだものくらいは載せておきます。
If with a short statement のサンプルプログラム
package main
import (
"fmt" // 標準的なI/Oをまとめたパッケージ
"math" // 数学的な関数をまとめたパッケージ
)
// x(値1), y(値2), lim(リミット)が引数
// x を y の数だけ累乗した結果が、
// lim より小さければ 計算結果を返す
// lim と同じかそれ以上なら lim を返す
func pow(x, n, lim float64) float64 {
// math.Pow ← これは累乗計算用のファンクション
if v := math.Pow(x, n); v < lim {
return v
}
return lim
}
func main() {
fmt.Println(
pow(3, 2, 10), // 3 * 3 = 9 → 結果が lim より小さいので 9 となる
pow(3, 3, 20), // 3 * 3 * 3 = 27 → 結果が lim より大きいので lim (20) となる
)
}
If and else のサンプルプログラム
package main
import (
"fmt" // 標準的なi?Oをまとめたパッケージ
"math" // 数学的な関数をまとめたパッケージ
)
// x(値1), y(値2), lim(リミット)が引数
// x を y の数だけ累乗した結果が、
// lim より小さければ計算結果を返す
// lim と同じかそれ以上なら比較結果を出力し lim を返す
func pow(x, n, lim float64) float64 {
if v := math.Pow(x, n); v < lim {
return v
} else {
fmt.Printf("%g >= %g\n", v, lim)
}
// can't use v here, though
return lim
}
func main() {
fmt.Println(
pow(3, 2, 10), // 3 * 3 = 9 → 結果が lim より小さいので 9 が出力される
pow(3, 3, 20), // 3 * 3 * 3 = 27 → 結果が lim より大きいので 比較結果 が出力され lim (20) が出力される
)
}
今回のまとめ
前回に引き続いての If。
今回やったことをまとめてみますと…
- ステートメントを一緒に書く場合は、if <ステートメント> : <条件式> { … }、と書くんです
- Ifのステートメントで定義された変数は、If のスコープでしか使えないんです
こんなところでしょうか。
If については今回で終わりなようで、次回は…実習?的な内容みたいです。
というわけで今回はここまで。
それじゃまた次回~。٩(๑´3`๑)۶
コメント