在如何突破新手階段中,好像沒有太深刻提到重構的部分
在被列為初階工程師應學的幾個項目中,重構是其中一項 搭配單元測試,能將發揮出高效率低Bug的產出
在這篇稍微筆記一下重構,順便想講一下Input/Output
在新手時期,我們習慣將程式一次性從頭寫到尾
習慣for迴圈包for迴圈
但這往往在除錯的時候造成作業困難
列一下重構的解釋 重構 Refactoring
重構為敏捷開發方法之一
指的是將原先寫的程式碼在不影響輸出的情況下做簡化,增加可讀性
這麼一來萬一出Bugs, 也比較好Debug,尤其是當你面對上萬條程式碼時
打個比方,假設我要連接db insert 五筆資料
一部分的程式碼開始會是這樣寫
engine = ...
connection = engine.connect()
engine.execute("INSERT INTO User(User,Email) VALUES ('Amy', 'Amy@123')")
connection.close()
如果要五筆資料那就
engine = ...
connection = engine.connect()
engine.execute("INSERT INTO User(User,Email) VALUES ('Amy', 'Amy@123')")
engine.execute("INSERT INTO User(User,Email) VALUES ('Amy', 'Amy@123')")
engine.execute("INSERT INTO User(User,Email) VALUES ('Amy', 'Amy@123')")
engine.execute("INSERT INTO User(User,Email) VALUES ('Amy', 'Amy@123')")
engine.execute("INSERT INTO User(User,Email) VALUES ('Amy', 'Amy@123')")
connection.close()
可是如果要五筆不同的資料呢?
engine = ...
connection = engine.connect()
engine.execute("INSERT INTO User(User,Email) VALUES ('Amy', 'Amy@123')")
engine.execute("INSERT INTO User(User,Email) VALUES ('Jason', 'Jason@123')")
engine.execute("INSERT INTO User(User,Email) VALUES ('Koff', 'Koff@123')")
engine.execute("INSERT INTO User(User,Email) VALUES ('Annie', 'Annie@123')")
engine.execute("INSERT INTO User(User,Email) VALUES ('Bob', 'Bob@123')")
connection.close()
複製五筆改一下就好,可是我就被罵了xDDDD
後來我改了程式碼
def insert_data():
sql = "INSERT INTO User(User,Email) VALUES "
engine.execute("{sql}('{user}', '{email}')".format(sql=sql, user=user, email=email))
def connection():
engine = ...
connection = engine.connect()
insert_data()
connection.close()
user_list = [Amy, Koff, Jason, Bob, Cathy]
for i in user_list:
user = i
email = "..."
connection()
我不知道這樣寫會不會work,不過範例是這樣
這還是蠻淺的部分
未來要是遇到更多更複雜的程式碼
「硬幹」不會是一個好方法,「硬寫」也不會
除了讓程式碼可讀性降低,容易出錯外,抓錯也很難抓
雖然現在手邊沒有比較好的例子
假設你寫了迴圈包迴圈,再加If/Else 的語法
亦或者寫的程式複雜度比這個更好
將你寫的程式做重構整理會比較好
雖然我現在也還是在很幼幼的階級,但會秉持著兩個原則去更改我的程式
-
不要寫重複的程式碼,若會有需重複作業的,看能不能抽出去為一個函式做共用功能
-
看到看起來覺得不好看的程式碼,就思考一下有沒有其他方法能好看點
剛進公司的時候我寫的程式碼也是很難看,也是經過很多練習到現在才”稍微“好一點
再來是** Input/ Output**
這部分分為兩個
-
當自己覺得很頭痛不知道該怎麼寫功能時
-
當後端與前端或其他做溝通/連接時
在寫程式的時候,會遇到很多次不知所措
前輩會跟我說,當你遇到開發一個新功能時,你只要關心程式的Input/ Output
也就是說,你會送怎樣形式的資料進程式,還有經過你寫的程式後,輸出的資料會長怎麼樣
若輸進(Input) 的指令是一個代碼(假設225),輸出(Output)得是對應到225的dataframe
輸進輸出都定好了,接下來的工作就是如何將225跟225的dataframe串起並輸出
然後就分細節去撰寫了
再來就是前端跟後端在溝通時,所使用的格式
通常前端跟後端使用的語言會不同,所以他們溝通的形式就是Json(或其他)
所以在寫程式的時候,後端要注意前端傳進什麼資料(Input),並注意前端要什麼資料(Output)
前端也是注意後端傳進什麼資料(Input),要做什麼功能(Output)
只要輸入輸出是對的,通常程式都是可以Work,至於其他的細節又是別的事了
只是說當需要開發新功能,或不知道程式怎麼做的時候:
-
先定好輸入輸出的規格
-
根據如何將輸入變成輸出做程式規劃
-
拆解程式細節並一一做撰寫
這篇先分享到這,有更新在後續做修改囉