質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

Q&A

解決済

1回答

479閲覧

ifの条件分岐で実行される処理について

ayapiss

総合スコア12

Go

Go(golang)は、Googleで開発されたオープンソースのプログラミング言語です。

0グッド

0クリップ

投稿2018/09/13 04:51

編集2018/09/13 04:55

golangのa tour of go勉強中に不明点があったため、質問させていただきます。
プログラミングの学習は初めてでかなり初歩的な質問になってしまうかと思いますが、
よろしくお願いいたします。
質問も初めてのため、不備等あればご指摘いただければと思います。

わからないこと

下記のコードを実行した際に、
27 >= 20
9 20
と、表示されるのですが、コードがどのような順番で実行されているのかわかりません。

・19行目が18行目よりも先に出力される理由
・14行目のreturnはどのような役割をしているのか
・14行目のreturnで18行目の10は返されないはなぜか

該当のソースコード

go

1package main 2 3import ( 4 "fmt" 5 "math" 6) 7 8func pow(x, n, lim float64) float64 { 9 if v := math.Pow(x, n); v < lim { 10 return v 11 } else { 12 fmt.Printf("%g >= %g\n", v, lim) 13 } 14 return lim 15} 16func main() { 17 fmt.Println( 18 pow(3, 2, 10), 19 pow(3, 3, 20), 20 ) 21} 22

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

そのページに(Both calls to pow are executed and return before the call to fmt.Println in main begins.)と書いてあります。

fmt.Println( pow(3, 2, 10), pow(3, 3, 20), )

上記の部分は、2つのpow関数呼び出しの処理が終わり、両方の値が返ってきてから、Printlnメソッドが実行されます。
すなわち、順番としては以下のようになっています。

  • pow(3, 2, 10)を実行 -> return vで9が返る(まだPrintlnはされない)
  • pow(3, 3, 20)を実行 -> fmt.Printf("%g >= %g\n", v, lim)が行われ、27 >= 20が出力される。その後、return limで20が返る
  • fmt.Printlnを実行 -> それぞれの返り値をもとに9 20が出力される

14行目のreturnは、if条件に該当しなかったときの返り値です。何を返すかはやりたいことによりますが、これを消すとelseのときに何も返されなくなり、返り値としてfloat64型を定義しているのに反します。

また、18行目のpow関数呼び出しはif条件に該当するので、14行目のreturnには行きません。10行目のreturnで関数から抜けます。

投稿2018/09/13 08:18

Udomomo

総合スコア1524

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ayapiss

2018/09/16 11:35

ご丁寧に解説いただき、ありがとうございます! 14行目のreturnが最大の疑問点だったのですが、おかげさまで、なぜ必要でどのように利用されているのかが分かりました。
EbiTT

2021/01/23 03:45

Tour of Go をやっている者です。同じところで躓いていました。丁寧なご回答で処理順を理解できました。ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問