2010年5月13日 星期四

為什麼同學會覺得程式不好學

關於同學會覺得程式不好學,總是弄不懂,只要條件稍微多一點點條件,腦袋就會打結,這個問題在偶然間閱讀程式碼的時候得到了一個觀點:也許是同學對於指定運算子(=)的使用和「等於」的意義並沒有完全弄清楚,甚至於會搞混,以至於在邏輯上完全無法接受,最後當然就是在大腦打上了一個很複雜的結。

例如就以下這個例子來講,
newnode->next=first;
first=newnode;
如果同學在解讀這段程式碼的時候,把它看作是「newnode->next等於first,然後first又等於newnode」,接下來你就準備頭昏腦脹了,因為這樣的解讀就好像在你的腦海裡產生無窮迴圈一樣。

實際在程式語言遇到 = 時,你的解讀方向必須從右到左,而且=必須唸作「指定給」,所以以newnode->next=first為例,它必須唸作「first指定給newnode->next」,所以「newnode->next擁有first的值」,但此時newnode->nextfirst仍然是各自獨立的變數,所以first可以重新被指定成newnode,而不會去影響到newnode->next的值。

如果這裡的說明還是看不懂,那就說明關於「等於」和「指定」的意思還沒有弄清楚。

「等於」就是相等的意思,在這樣的條件下,我們對於在相等關係裡的任何成員做任何事都是具有相同意義的,所以對任何一個成員做的任何事,等於是對其他成員做的意思。

但「指定」是「分派、安排」的意思,我可以把一個東西分派給A,也可以把它分派給B,甚至同時分派給A、B,但若要使用,在同一個時間裡只能有一個人使用,另外一方面,我可以指定一個全新的東西給A或B,而且它完全代替、取代原本分派的東西。所以在這個定義下,我們可以知道它的作用和「等於」有很大的不同,所以必須有不一樣的理解方式。

對於「=」的理解方式,你正如我所面所說的狀況嗎?如果是的話,重新理解一下「=」的意義吧。

2 則留言: