寫碼時應該縮排使用 tab 還是空格?
對於程式設計師來說,其實Tab和空格遠遠不只是“立場”問題那麼簡單。
在不同的編輯器裡tab的長度可能不一致,所以在一個編輯器裡用tab設定縮排後,在其它編輯器裡看可能縮排就亂了。空格不會出現這個問題,因為空格就佔一個字元的位置。
眾所周知,Tab在ASCII碼中,編碼是9,而空格是32。這也就是說,當我們按下一個Tab的時候,即使它看起來就是8個空格(或者4個空格,不同的環境下,Tab可能顯示的效果不同),對於電腦來說,卻是完全不一樣的東西。這也意味著,對於用字元來描述過程的程式碼來說,極有可能會是決定性的差異。
尤其是對於一門用空格縮排來區分程式碼層次的語言——Python。
我們來看一段程式碼。
1
2
3
4
5 |
class
MyForm(Form):
value1
=
StringField(
'value1'
)
value2
=
StringField(
'value2'
)
value3
=
StringField(
'value3'
)
#這行用的是Tab縮排
submit
=
SubmitField(
'Submit'
) |
看起來這個value3變數和其他的變數沒有什麼不同,然而卻出現了這樣的報錯——縮排錯誤。
value3 = StringField('value3')
^
IndentationError: unexpected indent
其實Python並沒有強制要求你用Tab縮排或者用空格縮排,甚至空格按幾個都沒有強制要求(但在PEP8中建議了使用4個空格作為縮排:https://www.python.org/dev/peps/pep-0008/),但是卻絕對!絕對不能混用Tab和空格,那麼這裡,是不是空格和Tab的區別就顯得很大了呢?
這個時候有的童鞋就要說了,我用PyCharm(或者其他IDE)怎麼從來都沒有出現這樣的問題呢?
其實,很多IDE對Tab鍵做了各種各樣的最佳化,其中有一條就是,將Tab鍵展開為為空格,也就是說,當你按下Tab的時候,IDE實際上幫你把一個「9」轉換成了四個(或者八個)「32」。但是要注意,不是所有的IDE都幫你做了這樣的工作!同理,對於好純潔好不做作的編輯器Vim來說,肯定也不會幫你做這樣的工作了。
既然Tab在不同的環境下展現不一樣,而空格卻永遠都是一樣的。對於一些細緻排版縮排來說(比如說想把每一行的註釋都對齊),用空格也更加。這樣看起來,確實是用空格來寫程式碼要好於用Tab呢。
空格代替Tab的好處:
1. 空格在各種情況下程式碼都是你想要的樣子。而 tab 僅僅當你與程式碼作者的 tab 尺寸設定為相同時,程式碼才好看。修改 tab 尺寸並不能解決這個問題,因為你很難做到每開啟一個檔案就修改一次 tab 尺寸,而每個人通常有不同的習慣(POSIX/Unix 標準的 tab 應當為 8 字元寬度,Linus 大神也規定 Linux 核心中所有程式碼的 tab 尺寸為 8)。如果存在行尾註釋,則 tab 尺寸更加是必須設定為與作者相同,這就意味著你看不同的程式碼需要經常修改 tab 尺寸。我看過許多程式碼,其使用的 tab 尺寸有從 2,3,4,5,6,8,16 甚至 32 的,如果你使用的 tab 尺寸與作者不同,外觀將很不理想。
2. 靠譜的IDE都能解決前進後退增加減少縮排的問題,即便是四個空格,一個退格鍵也能全退了,所以在使用的方便性方面根本不存在問題。——如果抱怨刪除調整還不能有效解決的,你需要研究一下你的編輯器了。實際上增加減少縮排在主流編輯器中都直接有快捷鍵,無論是 tab 還是空格還是退格都很少直接被用於縮排。
3. tab 是製表符而不是縮排符,正如在 html 頁面中大量使用<table>進行佈局是個不好的程式設計習慣一樣,在程式設計中大量使用製表符佈局通常也不是個好習慣。
一般情況下,團隊開發都要制定一套編碼規範, 在大部分團隊中,使用4個空格代替Tab是大家預設的。所以非常建議大家使用空格代替Tab, 另外各個IDE(編輯器)都提供了tab自動轉換空格的功能,只要大家設定一下,按下tab鍵就可以出現4個或者多個空格。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69952502/viewspace-2942938/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 縮排使用空格替代tab
- python 中用什麼鍵縮排 —— tab 還是空格?Python
- 我應該使用 MongoDB 還是 PostgreSQL? - AmritMongoDBSQL
- 該寫的總結還是要寫
- 在專案中應該使用Boolean還是使用boolean?Boolean
- URL中的空格、加號究竟應該使用何種方式編碼
- [譯]Kotlin中是應該使用序列(Sequences)還是集合(Lists)?Kotlin
- Rust中何時應使用 String 還是 &str?Rust
- Python中應該使用%還是format來格式化字串?PythonORM字串
- linux 設定tab為4個空格Linux
- eslint配置首行縮排兩個空格,export default不頂格EsLintExport
- 你應該選擇 Ubuntu 還是 Fedora?Ubuntu
- sublime text3 顯示空格和Tab
- python什麼時候縮排Python
- 我們在編寫python程式碼時應該注意那幾件事!Python
- 是否應該在未選中行時禁用刪除按鈕,還是應該在點選按鈕時提示選擇資料?
- JS縮排的問題(還在更新中...)JS
- 關於應該實現ActionListener介面還是使用ActionListener的匿名類物件物件
- 何時使用Component還是PureComponent?
- 年輕人應該去創業還是打工?創業
- 跳槽季,你是該跳,還是該留?
- Python IDLE可以使用ctrl +[ 批量減少縮排,ctrl + ]批量增加縮排Python
- 如何解決小括號還有縮排的
- MySQL備份指令碼,應該這麼寫MySql指令碼
- 寫程式碼之前應該做的幾件事
- html的空格程式碼是什麼HTML
- 規範 - 只使用一層縮排
- 面試的時候被問“擅長前端還是後臺”應該怎麼回答?面試前端
- 4 – 縮排
- python縮排Python
- 測試開發應該選擇 Java 還是 Go 呢?JavaGo
- 網站優化應該外包SEO公司還是自己去做?網站優化
- [譯] WAR 還是 JAR,你應該用哪種格式打包?JAR
- 討論:研發團隊到底應該是制定OKR還是制定KPI?OKRKPI
- [譯]Kotlin中是應該定義函式還是定義屬性?Kotlin函式
- JavaScript將字串中的多個空格縮減為一個空格JavaScript字串
- 學Python應該選擇Linux系統還是Windows系統?PythonLinuxWindows
- 糾結應該先學Python還是Java?看完就有數了PythonJava