funcの中身によっては1回だけ呼ぶようにしちゃうと結果が変わる場合がある
んだけどそこまで見て最適化してくれるものなのか?