引き続きGo公式のチュートリアル「A Tour of Go」を読み進めています。その中に練習問題がいくつか用意されています。当記事は、Sliceに関する練習問題「Exercise: Slices」を解いた記録です。
コード
package main
import "golang.org/x/tour/pic"
func Pic(dx, dy int) [][]uint8 {
ret := make([][]uint8, dy)
for i := 0; i < dy; i++ {
ret[i] = make([]uint8, dx)
for j := 0; j < dx; j++ {
// 式によって表示される画像が変わる
ret[i][j] = uint8(i^j)
// ret[i][j] = uint8((i^2) * (j^2))
// ret[i][j] = uint8((i + j) / 2)
// ret[i][j] = uint8(i * j)
}
}
return ret
}
func main() {
pic.Show(Pic)
}
解説
処理は
- main関数がPic関数を呼び出す
- 二次元でサイズdyのスライスret(可変長配列)を定義
- retの各要素をサイズdxの配列に調整
- forのインデックスによってretの各要素を更新
- main関数に戻り描画
の流れです。
ret[i][j] = ?
上式の?によって表示される画像が変わるので色々試してみると面白いです。
最後に
main関数が呼び出しているpic.Showには立ち入っていないので、余裕ができたらこちらも確認してみたいと思います。