2017-02-11 75 views
3

PSR-2 Coding Style Guide在製表符上選擇4空格縮進。我一直認爲製表符和空格只是一個偏好問題,我的這種印象似乎得到了PSR-2項目成員survey遠不一致的事實的支持。然而,indenting部分提供了以下理由:關於PSR-2縮進規則的說明

只使用空間,而不是與標籤混和空間,有助於避免 問題的diff,補丁,歷史和註解。使用 空格還可以很容易地插入 行間對齊的細紋子縮進。

我的兩個疑點是:

  1. 是有關的diff,補丁,歷史和註釋僅限於混合缺口的說明(的東西,不需要進一步的解釋),還是有一些具體的問題,可以由(適當的)標籤專用縮進觸發?

  2. 「線間對齊的細粒度子壓痕」是什麼意思?是否有任何特定的情況,您可能需要插入半縮進? (例子是特別受歡迎。)


我會很感激你不只是讀「選項卡/空格」和急於關閉基於意見。我要求澄清PSR-2中的兩個非常具體的問題,可以使用完全客觀的答案。這絕不是什麼更好的問題。

+2

我沒有回答你的問題,但看看https://github.com/php-fig-rectified/fig-rectified-standards/blob/master/PSR-2- R-coding-style-guide.md爲 –

回答

2

據我所知,當您主要使用vi來編寫PHP文件時,混合標籤和空格非常非常混亂。做這種事情的原因很簡單,就是有些客戶要求您使用ssh登錄並在遠程服務器上工作,拒絕您在本地計算機上下載任何代碼。

在客戶非常擔心安全(政府)並且有更多規則需要遵守的情況下,這實際上發生在我身上。所以我們不要討論爲什麼ssh + vi可能是一個好的或不好的選擇。有時候,這不是一個選擇,而是一種強制,如果你想要這項工作,你必須表揚。

除了編輯器,git,diffgrep都不喜歡標籤。舉例來說,如果你有這樣的代碼:

$em = $this->getEntityManager(); 
// more code... 

if ($some_bit) 
{ 
    $em = $this->getEntityManager(); 
    // more code... 
} 

現在要根據壓痕grep線,你可以這樣做:

grep -nri " $em" 
grep -nri "  $em" 

當控制檯上的grep命令標籤鍵正常用於自動完成和類似的功能。插入一個標籤(您可能會嘗試\t,但這一切都取決於您實際使用的工具,轉義並不總是可行)。

另一種情況是將代碼複製並粘貼到SO中,標籤是不可能的。但這不是PSR-2的關注點,這只是對選項卡的一種輕微威懾。

對於半縮進,我可以告訴你這個代碼錯誤地對齊,但在某種程度上審美愉悅。我不知道美學是否應該勝過正確的縮進。

嗯,我不喜歡它總是,但有時我喜歡。這是所有意見的基礎,所以...對待是這樣的:一個意見。

$qb->andWhere("a = :a") 
    ->andWhere("b = :b") 
    ->setParameter("a", $a) 
    ->setParameter("b", $b); 

所有這一切都是有爭議,我在保衛這些推理沒有興趣。我也可以使用標籤和任何類型的IDE或榮譽PSR-2或任何其他風格或指南。我將我的工作適應客戶要求的任何事情。

+0

的固定版本我已經在堆棧溢出中粘貼了多個標籤代碼,沒有問題,但Unix shell示例是我沒有想過的。流暢的界面片段也很有幫助(我親自將第一個方法調用移動到新行,但我理解這一點)。謝謝! –

+0

是的,將選項卡粘貼到SO中是可能的,但是當我習慣於將選項卡粘貼到SO編輯器時,因爲它不能按預期工作。相反,當我習慣了空間時,我沒有這個問題,但我必須將空間翻兩番,這也是一個煩惱。根據我在過去幾天所寫的內容,我改變了「使用」方式,但是在工作中,它始終是100%的空間。 – pid

+0

現在我想到的另一件事是多平臺代碼。與CRLF/LF煩惱類似,您可能在一個平臺上具有首選IDE,而在另一個平臺上可能具有另一個IDE。在它們之間切換時,它可能有點不直觀。另一個例子是這樣的。我有一臺安裝了Linux Mint的筆記本電腦,因爲它的性能非常低。我所做的就是'vi' +'git'中的代碼。我的桌面是使用Visual Studio的Windows 10。你可以想象這些IDE有多麼不同。保持代碼清潔並不困難,但它需要一點點的關注。僅使用空格有時是更容易的選擇。 – pid

0

是有關的diff,補丁,歷史上只有 註釋僅限於混合缺口的說明(的東西,不需要進一步 解釋),或是否有隻能由製表(適當的)被觸發 一些特定的問題縮進?

Git默認顯示8個空格的標籤,下面是1個標籤行,後面跟着4個空格行。考慮到終端不是很大,8個空間對於差異是巨大的。儘管這可以調整。

tab v space

什麼是「細粒度的子縮進線間對準」意味着 到底是什麼?是否有任何特定的情況,你可能需要 插入一半的縮進? (例子是特別受歡迎。)

不知道這是他們在想什麼,但對準符號「=」或「=>」賦值時在一起,空間提供了一個準確的數字,這取決於你的價值標籤寬度,標籤看起來不好。即較小的移位會使值不對齊,更大的移位寬度將在多個選項卡上中斷。空間看起來相同環境

+0

對不起,如果我沒有正確解釋。你的差異具有混合縮進(第一行使用製表符,第二行使用空格),我的問題是關於製表符縮進。關於第二點,爲了確保我的理解,你實際上是指調整而不是縮進,不是嗎? –