A Tour of Go の split関数

  • 投稿日:
  • by
  • カテゴリ:

A Tour of GoというGo言語のチュートリアルがあるのでそれを見ていたら、サンプルコードにsplit関数というのがあった。 split関数に17という値を渡すと、7と10の二つの値を戻り値として返す関数なのだが、1の位と10の位に分けられたの!?と驚いたので整理。

func split(sum int) (x, y int) {
    x = sum * 4 / 9
    y = sum - x
    return
}

上記関数に17を与えると x = 7, y = 10 のそれぞれの値が返る。 x は4/9を掛けているだけで、yはxを引くだけ。なんでそれで7と10に分けられるのか。。 単純に計算すると以下の通り。

x = 17 * 4 / 9
  = 68 / 9
  = 7 余り 5
  = 7 (intなので切り捨て)

y = 17 - 7
  = 10

ふーむ。

一つ目のxの式をyの式に代入してみる。

y = sum - sum * 4 / 9
  = sum * 5 / 9

sum = 17
y = 17 * 5 / 9
  = 9 余り 4
  = 9(intなので切り捨て)
  != 10

一致しない。 今度はsumの式として二つ目の式を一つ目の式に代入。

x = ( x + y ) * 4 / 9
5x = 4y

ふーむ。 やはり。。単に4:5くらいに分けているだけで、intで計算しているので一方の値はもう一方の値を引いた値にしているというだけか。。 17だとたまたま10と7という意味ありげな分かれ方をするというだけね。