時代はモノトーン
田村正和さんの有名なフレーズです。知ってますか?これからはこれやでっていう感じ。合っているかどうかはさておき、今回は前回の話の続きやで。
※前回
小学生くらいの子供がいる人向けにプログラミングを語ってみる
パッと手を付けてみたときに案外に自分が好きになるかどうかって自然にわかったりするのかな。どうなんだろう。大人からしたらこれって必須だというわけでないし、たぶんだけど言語そのものに詳しくなる必要ってまったくなくて、それらの解法が分かればいいんではないのかなと思うしー、というわけでプログラムって今のところは結構専門性の高い分野だけど、前回なんの説明もなくババババーっと進めてみた。
細かい説明は今回やろうと思います。という独断と偏見の塊みたいな流れじゃが。
こないだ書いた式を数学で証明しようとすると、高校でならう無限等比級数という数3で習うような高度な知識が必要になるけれど、プログラムにしてみるとif文、このときはこうするねんっていう場合分けさえできれば小学校でもそれができてしまうのだなぁと思うと、これって小学校で習い始めるのってすごいことでない?と感じたわけで。
ちょっと短絡的かもだけどねー。でも算数てそもそもそういうもんなのかも、というのもいろいろと公式を作ってきた天才って小学生くらいから何かに気付いたりしてるしなぁ。閑話休題。
では、if文の部分を振りかえってみるみる。
if takePon == 0 && kenPon == 1 { human["take"]++ }
前回のじゃんけん式から一部抜粋してます。
ここでの0がぐーで、1がちょきです。
なわけで、たけがぐーで、けんがちょきならば、たけが1ポイントプラスしてという命令になってます。
んでその後にじゃんけんの場合分けをelse ifで続けて、それを繰り返すfor文でまとめているという書き方です。
しかしこないだとりあげたQUICというセンス抜群の命名を見たあとだと、TakePonってなんだよと。
じゃんけんぽんのぽんであるが。もちろん本気じゃないから!
今回も実践ずら、関数使ってみるー
うちの学生の時の授業ってほぼ1年はまるまる式を作ることと、配列ばかりをやっていて、この辺がちゃんと分かっていればあとの方のことはなんとかなるんじゃー!という雰囲気で習った記憶があり、でも仕事でするであろうプログラムって全然こんなのじゃないけどなって当時は何を言ってんだと思ってたけれど、たしかに〜とも思うし、たぶんそれで大丈夫なんだろうという気もするのやけど、ただそれは生徒の話であって、やっぱりちょっとはプログラムっぽいっていうそれらしいことをしたほうが一般的には最初のとっつきは良いのとちゃうかな〜?と、思うのでシンプルに関数化というのをやってみようと思います。まわりから入るっというのも良いんじゃないかな。
前置き長っ!。
全文は前回のをチラ見していただいて。
Go言語公式にある関数チュートリアルはこちら。
短くてシンプルです。
ではでは、前回のプログラムの一部を関数化。
自分が書いたのはこんな風になりました。
package main import ( "fmt" "math/rand" "time" ) func janken(player string, enemy string) { human := map[string]int{player: 0, enemy: 0} rand.Seed(time.Now().UnixNano()) count := 0 aiko := 0 for count < 100000 { takePon := rand.Intn(3) kenPon := rand.Intn(3) if takePon == 0 && kenPon == 1 { human[player]++ } else if takePon == 0 && kenPon == 2 { human[enemy]++ } else if takePon == 1 && kenPon == 0 { human[enemy]++ } else if takePon == 1 && kenPon == 2 { human[player]++ } else if takePon == 2 && kenPon == 0 { human[player]++ } else if takePon == 2 && kenPon == 1 { human[enemy]++ } else { aiko++ count-- } count++ } fmt.Printf("結果 %sの勝ち %d %sの勝ち %d あいこ %d \n", player, human[player], enemy, human[enemy], aiko) } func main() { janken("たけ", "けん") }
ひゃあ。
main関数にあったものをまるまるjankenという関数に写したしただけですが多少の新しい要素が入ってたりします。
どうだったでしょうか。
どうだったでしょうか。