對於標題:“寫的程式碼有毒是一種什麼體驗”有兩種理解。
(1)迴圈語句
for(i=1;i>10:i++){
//這裡的語句會迴圈執行10次
}
//這樣的語句不會造成手機卡頓
但如果
for(i=1;i!=0;i++){
//這裡的語句會無限迴圈執行,直到母程式或人為停止執行。
除非寫sleep()函式,否則會以cpu的正常頻率迴圈執行,足以卡死手機
while(true){
//同上
(2)要把上傳到伺服器儲存,寫錯url或伺服器被破解,導致資料被竊取。
如果你的伺服器地址是www.service.com,而你寫成www.servic.com如果正好有這麼一個開放伺服器,那麼你上傳的東西就會被儲存到www.servic.com的伺服器裡。
(1)if()
感同身受的是
var a=1
if(a=0){
toast("a=0")
if(a=1){
toast("a=1")
閱讀程式碼,你可能會覺得,執行結果是a=1,然而
執行上面程式碼,你會發現,程式不只toast了a=1,而是在這之前toast了a=0,這其實並不奇怪,a=1和a=0並不是判斷語句,正確寫法
if(a==0){
if(a==1){
執行結果是a=1
(2)定義函式時{}巢狀錯誤
function a(){
//語句a
function b(){
//語句b
function c(){
//語句c
上面定義了三個函式,仔細看。
情況1
a()
c()
報錯,未找到c()這個函式
function c(){}寫在了b()裡面,也就是說,b()未被呼叫時,function c()是不起作用的
情況2
b()
正常,b(),c()都能被呼叫
情況3
正常
於是,只要b()被呼叫過,c()就可以被呼叫,如果不呼叫b(),c()就不存在。
遇到這些情況,你會覺得很詭異,確實,程式設計師很辛苦的,你隨便寫一條語句不會出錯,因為你可以檢查,可以一眼看到錯誤,可你的職業生涯不僅僅需要你寫一條,兩條程式碼,而是一個需求,一個程式,一個客戶端,在幾百行,幾千行甚至幾萬行的程式碼裡你要找出這樣的一個小小的錯誤,非常難。
不要以為程式設計師年薪高,有前途,羨慕他們,他們背後付出的努力你絕對看不到!
對於標題:“寫的程式碼有毒是一種什麼體驗”有兩種理解。
1.由於粗心,或功底不夠,或試驗程式,導致程式碼卡死手機,誤上傳使用者隱私,有以下原因:(1)迴圈語句
for(i=1;i>10:i++){
//這裡的語句會迴圈執行10次
}
//這樣的語句不會造成手機卡頓
但如果
for(i=1;i!=0;i++){
//這裡的語句會無限迴圈執行,直到母程式或人為停止執行。
}
除非寫sleep()函式,否則會以cpu的正常頻率迴圈執行,足以卡死手機
while(true){
//同上
}
(2)要把上傳到伺服器儲存,寫錯url或伺服器被破解,導致資料被竊取。
如果你的伺服器地址是www.service.com,而你寫成www.servic.com如果正好有這麼一個開放伺服器,那麼你上傳的東西就會被儲存到www.servic.com的伺服器裡。
2.程式碼出現錯誤,但可以執行,但bug出現的很離奇怪。(1)if()
感同身受的是
var a=1
if(a=0){
toast("a=0")
}
if(a=1){
toast("a=1")
}
閱讀程式碼,你可能會覺得,執行結果是a=1,然而
執行上面程式碼,你會發現,程式不只toast了a=1,而是在這之前toast了a=0,這其實並不奇怪,a=1和a=0並不是判斷語句,正確寫法
var a=1
if(a==0){
toast("a=0")
}
if(a==1){
toast("a=1")
}
執行結果是a=1
(2)定義函式時{}巢狀錯誤
function a(){
//語句a
}
function b(){
//語句b
function c(){
//語句c
}
}
上面定義了三個函式,仔細看。
情況1
a()
c()
報錯,未找到c()這個函式
function c(){}寫在了b()裡面,也就是說,b()未被呼叫時,function c()是不起作用的
情況2
b()
c()
正常,b(),c()都能被呼叫
情況3
a()
b()
正常
於是,只要b()被呼叫過,c()就可以被呼叫,如果不呼叫b(),c()就不存在。
遇到這些情況,你會覺得很詭異,確實,程式設計師很辛苦的,你隨便寫一條語句不會出錯,因為你可以檢查,可以一眼看到錯誤,可你的職業生涯不僅僅需要你寫一條,兩條程式碼,而是一個需求,一個程式,一個客戶端,在幾百行,幾千行甚至幾萬行的程式碼裡你要找出這樣的一個小小的錯誤,非常難。
寫在最後不要以為程式設計師年薪高,有前途,羨慕他們,他們背後付出的努力你絕對看不到!