原來我還是不會寫程式
從平面轉職前端也快一年了,以為切切版,寫個 CSS 跟套個 jQuery 就是有跟程式碰到邊,結果不是,在進入專案開始處理 API 資料,get 跟 post 都傻傻分不清楚,拿到資料也不太會處理的時候,才知道我根本還不會寫程式。
新手寫程式問題
其中提到新手遇到的幾個問題,那就是我啊!
我就是那 1-3…
看不懂需求或題目…
是不是也有這種困擾,
所以要有一個橋梁幫助我,
用虛擬碼來寫。
先想流程,再想動作
以我自己為例,我拿到資料就想直接處理它,但卻忽略我為什麼要處理,該怎麼處理,哪個流程才需要處理資料,例如我今天從起床到睡覺,寫出一行一行的步驟,並把握以下原則:
- 一行只做一件事。
- 善用跳轉。(等等會說明)
實際例子說明:
學生的一天
- 早上八點起床。
- 吃早餐。
- 如果公車來了,搭公車。
- 如果公車沒來,搭捷運。
- 到學校上課。
- 放學。
- 吃晚餐。
- 睡覺。
- 回到步驟 1。
可以發現有幾項為敘述,有幾項為條件判斷,有一項是跳轉。
- 早上八點起床。(敘述)
- 吃早餐。(敘述)
- 如果公車來了,搭公車。(條件判斷)
- 如果公車沒來,搭捷運。(條件判斷)
- 到學校上課。(敘述)
- 放學。(敘述)
- 吃晚餐。(敘述)
- 睡覺。(敘述)
- 回到步驟 1。(重複,也就是跳轉)
透過重複的選項,可以製造出一個不斷循環的行為。
等人
- 人來了嗎?(敘述)
- 還沒,滑手機五分鐘。(條件判斷)
- 來了,跳到第五步。(條件判斷)
- 跳到第一步。(重複)
- 一起去逛街。(敘述)
分析一下會有兩個狀況產生,
如果人還沒來,會是:
- 人來了嗎?
- 還沒,滑手機五分鐘。
- 跳到第一步。
會一直重複。
如果人來了,會是:
- 人來了嗎?
- 來了,跳到第五步。
- 一起去逛街。
所以可以看到,如果沒有符合判斷條件的狀況下,就會略過幾個步驟,也就是之後會很常使用的迴圈加上條件判斷的應用。
找出 1~100 的偶數
一開始看到這個題目的時候,就會很快想把心中的偶數得到,然後就卡住了…
但其實應該要拆解問題,變成下方步驟:
- 找出 1~100 的數字。
- 可以被 2 整除的就是偶數。
找出 1~100 的數字
似乎問題就變單純,且可以被執行,把這個題目寫成一步步可執行的步驟,先來找出 1~100 的數字。
- 令 i 為 1。
- 如果 i > 100,結束。
- 印出 i 。
- i = i+1。
- 跳回第二行。
其中,第四個步驟非常重要,可以印出 1~100 的關鍵就是這個,因為如果沒有 i+1 的步驟,會一直重複只出現 1 這個數字,就永遠不會達到 100。
找出偶數
找到 1~100 的數字了,再來是要找偶數。
什麼是偶數,也就是可以被 2 整除的叫做偶數,若有餘數為 1 的稱為奇數。
EX. 2 除以 2 為 0,3 除以 2 為 1。
所以步驟可以改寫成這樣,
- 令 i 為 1。
- 如果 i > 100,結束。
- 如果可以被 2 整除的為偶數,印出 i。
- i = i+1。
- 跳回第二行。
再更直覺一點可以改成這樣。
- 令 i 為 1。
- 如果 i > 100,結束。
- 如果 i % 2 === 0,印出 i。
- i = i+1。
- 跳回第二行。
什麼是虛擬碼
虛擬碼就是把腦袋的想法轉成一步步可執行的步驟,然後再透過比較像程式碼的形式寫出來。
例如剛剛提到找出 1~100 的步驟。
- 令 i 為 1。
- 如果 i > 100,結束。
- 印出 i 。
- i = i+1。
- 跳回第二行。
改成虛擬碼的話會是這樣,
- let i = 1
- if i > 100 then exit
- print i
- i = i+1
- jump to line2
喔!好像跟程式碼有點像喔!
可以感覺得出來好像有迴圈加上條件判斷。
把虛擬碼改成程式碼
試著改寫成程式碼的話應該是:
1 | for (let i = 1; i < 100; i++) { |
有發現到一件事情,似乎就是把中文的意思改寫成類似程式碼的敘述,
步驟的流程建議使用英文,因為要讓敘述的過程更貼近程式碼。