Исходный код
func Pic(dx, dy int) [][]uint8 {
picture := make([][]uint8, dy, dy)
for y := 0; y < dy; y++ {
picture[y] = make([]uint8, dx, dx)
for x := 0; x < dx; x++ {
picture[y][x] = uint8(x)
}
}
return picture
}
Что не так в исходном коде
Эта функция — моё решение упражнения из тура по Go. Несмотря на то, что этот код написан мной, он не соответствует моему же канону. Здесь одна функция решает две задачи: выделить память под изображение и собственно отрендерить изображение.
Как лучше распределить ответственности
func AllocatePicture(dx, dy int) [][]uint8 {
picture := make([][]uint8, dy, dy)
for y := 0; y < dy; y++ {
picture[y] = make([]uint8, dx, dx)
}
return picture
}
func RenderPicture(picture [][]uint8) {
for y := 0; y < len(picture); y++ {
for x := 0; x < len(picture[y]); x++ {
picture[y][x] = uint8(x)
}
}
}
Теория
- Принцип единственного знания
- Рефакторинг «извлечение метода»