很多人在寫程式的時候會有些壞習慣,如:

1
2
3
4
5
6
7
X = rand(3, 4)
for i = 1:3
for j = 1:4
X[i, j]
...
end
end

可能多數人看以上這段程式碼並沒有什麼特別的感覺,但是如果要維護的時候就會發現你突然不太理解這段程式碼。

有人知道這邊的 3 是什麼意思嗎?嗯…或許可以從上下文猜出來是陣列的列數的意思。

一旦要更改陣列的大小的時候勢必就要更改這些數字,甚至這些數字散落在程式碼的各個角落就會更加頭痛。

這些數字稱為魔術數字(magic numbers),因為沒有人知道他的意義是什麼!

解法一:使用常數

如果這些數字很常被使用到,而且不會在程式中被變更,請使用常數,像:

1
2
3
4
5
6
7
8
9
const ROWS = 3
const COLUMNS = 4
X = rand(ROWS, COLUMNS)
for i = 1:ROW
for j = 1:COLUMNS
X[i, j]
...
end
end

如此,以後要更改陣列大小只需要更改常數即可,也讓程式碼的可讀性上升。

如果你的程式會更改到這些數字,那麼就用變數。

1
2
3
4
5
6
7
8
9
rows = 3
columns = 4
X = rand(rows, columns)
for i = 1:rows
for j = 1:columns
X[i, j]
...
end
end

解法二:動態

如果陣列的大小不是事先知道的,或是需要動態取得,那麼可以用 size

1
2
3
4
5
6
for i = 1:size(X, 1)
for j = 1:size(X, 2)
X[i, j]
...
end
end

如此可以用在未知大小的陣列上。