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

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

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

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

Q&A

解決済

2回答

1286閲覧

プログラミング初心者です。a tour of goでつまづいています。

pukupuku00

総合スコア1

Go

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

0グッド

0クリップ

投稿2020/08/30 22:52

前提・実現したいこと

ifステートメントの勉強をしていたのですが、以下のコードがどういう順番で処理されているのかが分かりません。

まず引き数の-4を自前関数sqrtに与えます。
0より小さいので4となり、if文内で文字連結が行われます。
自前関数ではstringで返すと設定されているので、returnによって、4iが文字列として出てきます。

しかし、xはif文内でiと連結されて文字列になったはずなのに、math.Sqrtに引数として与えることができていました。
そして文字列になってif文から出てきたはずの4の平方根を計算して2にすることができています。
結果は2iが出てきました。

プログラミングコードは上から順に処理されるのではないのですか?
いつ文字列に変換され、どのタイミングで文字連結されているのですか?

該当のソースコード

package main

import (
"fmt"
"math"
)

func sqrt(x float64) string {
if x < 0 {
return sqrt(-x) + "i"
}
return fmt.Sprint(math.Sqrt(x))
}

func main() {
fmt.Println(sqrt(2), sqrt(-4))
}

試したこと

Qiita等数値と文字列を連結する方法が書かれたサイトを調べましたが、求める情報は出ませんでした。

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

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

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

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

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

guest

回答2

0

ベストアンサー

return sqrt(-x) + "i"

x が -4 のとき、sqrt(-x) は sqrt(4) になります。

4 は負の数ではないので、sqrt(4) は文字列の "2" となり、戻り値は "2i" で合っています。

投稿2020/08/30 23:02

編集2020/08/30 23:09
Zuishin

総合スコア28662

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

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

pukupuku00

2020/08/30 23:17

回答ありがとうございます。 -4は0より小さいので、 (-x)で符号を逆転させ、iと文字連結させられたので4はfloat型から文字列に変わって4iがifから出てきた訳ですよね。 math.Sqrtの中にfloat型ではなく、文字列になった4を入れて平方根を求める事は可能ですか?
Zuishin

2020/08/30 23:18

いえ、順序がちがいます。i と連結する前に再帰呼び出しで "2" になっています。 次のような順序です。 x が -4 のとき、sqrt(-x) は sqrt(4) になります。 4 は負の数ではないので、sqrt(4) は文字列の "2" となり、戻り値は "2i" で合っています。
Zuishin

2020/08/30 23:21 編集

> return sqrt(-x) + "i" まず sqrt(-x) が呼び出されます。x が -4 の時、その結果は "2" になります。 この文字列 "2" と文字列 "i" が連結されて "2i" となり、return で返されます。
pukupuku00

2020/08/30 23:25

お返事いただきありがとうございます。本当に助かります。 -4なので”一度if文が実行されることは決まっている”けれど、(-x)で0より大きくなったので一度if文を出て平方根を求めて2になり、それが返され、また続きからif文を実行して連結して2iということでしょうか?
Zuishin

2020/08/30 23:47

再帰呼び出しと言って、sqrt の中でもう一度 sqrt が呼び出されています。 一度 if 文が実行されて 4 になったあと、その 4 を引数に sqrt が呼び出されています。 二回目に呼び出された結果は引数が 4 なので、"2" が返ってくることはわかりますか?
Zuishin

2020/08/30 23:48

> return sqrt(-x) + "i" この部分です。-x を引数に sqrt を呼び出していますよね?
pukupuku00

2020/08/31 00:00

ああ!意味がわかりました!私は重大な勘違いをしていたようです!!もう一度関数が呼ばれていたんですね!!
guest

0

sqrtの中に符号を逆転したxをsqrtに入れてもう一度処理して2をつくってから文字連結している

投稿2020/08/31 00:03

pukupuku00

総合スコア1

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.37%

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

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

質問する

関連した質問