编码标准和行长

时间:2009-02-19 16:24:33

标签: php coding-style

我见过的每个编码标准都对一行中的字符数有建议或绝对限制。在这个限制范围内有各种各样的工作方式,但我没有看到这方面的任何具体指导。

显然,如果可能的话,不要写太长的行。

但是,如果这不实用呢?如何处理长线?

以下是几个例子

if ($Stmt = $Mysqli->prepare("SELECT color, pattern, size,
                              manufacturer, mfgSku, storeLocation,
                              aisle, status
                              FROM tblItems WHERE ourSku = ?")) {

$flavors = array ('chocolate', 'strawberry', 'vanilla', 'cookie dough', 
                  'chocolate chip', 'mint chocolate chip', 'rocky road',
                  'peach', 'fudge brownie', 'coffee', 'mocha chip');

$Stmt->bind_result( $this->_firstName,
                    $this->_lastName,
                    $this->_BillToAddress->address1,
                    $this->_BillToAddress->address2,
                    $this->_BillToAddress->city,
                    $this->_BillToAddress->state,
                    $this->_BillToAddress->zip,
                    $this->_BillToAddress->country,
                    $this->_email,
                    $this->_status,
                    $this->_primaryPhone,
                    $this->_mobilePhone );

在每个示例中,冗长代码的缩进是不同的。这样做有更好或更“标准”的方式吗?额外的行总是应该以相同的方式缩进。或者这样可以吗?

14 个答案:

答案 0 :(得分:11)

在每个示例中都可以看到一种模式 - 它们缩进到函数的第一个参数。这是一个很好的标准,因为它将数据从水平转换为垂直,并且列允许轻松阅读。

对于其他行长度问题,例如冗长的计算,首选方法是将其分解。计算朱利安日期或复活节是分几步而不是一次长计算。

答案 1 :(得分:11)

我个人的偏好如下;

$Stmt->bind_result(
    $this->_firstName,
    $this->_lastName,
    $this->_BillToAddress->address1,
    $this->_BillToAddress->address2,
    $this->_BillToAddress->city,
    $this->_BillToAddress->state,
    $this->_BillToAddress->zip,
    $this->_BillToAddress->country,
    $this->_email,
    $this->_status,
    $this->_primaryPhone,
    $this->_mobilePhone 
);

这样,右括号和分号与开始调用在同一个缩进上。并非所有语言都支持在方法调用的另一行上使用参数...

答案 2 :(得分:6)

上下文决定了你选择哪一个。最终,你正在编写代码以供人类阅读。如果以不同的方式缩进代码块会使其更容易阅读,那就去做吧。

答案 3 :(得分:5)

在进行大量SQL工作时,我发现自己很容易进行一种不寻常的缩进风格;

INSERT INTO someTable
(
    id,
    name,
    age,
    address1,
    address2,
)
VALUES
(
    2,
    'Bob'
    25,
    '12 Fake Street',
    'The Moon'
)

我实际上发现它比长参数列表的任何其他布局更容易阅读。

答案 4 :(得分:4)

门号3.如果你不能在一行上做,每个项目在一行上做,其他任何事情都会在第一行之后混淆这些项目并且阅读起来很糟糕。一致的缩进也很重要。

Fwiw,我认为在大多数程序员应该拥有高分辨率的双显示器的时代,这是老式的。第一个例子看起来很可能是一行。

答案 5 :(得分:3)

我不认为人们应该故意排长队,但冒着很多冒犯的风险,我建议线路长度真的不再那么重要了。

Vim和emacs很好地处理长线,它们几乎安装在每个Unix机器上。在Windows上,您几乎总是在GUI文本编辑器中。我认为你的$Stmt->bind_result样式是最容易阅读的,但是如果你只需要在一个语句中加载一堆主要是静态的信息,我对1000字符行没有问题。

答案 6 :(得分:1)

这非常主观,很像括号的位置和其他编码风格。最重要的不是你选择哪种风格,而是你选择一种风格,并在整个项目中坚持使用它。

就我个人而言,来自Python背景,我使用的是79行和

的行长
$flavors = array ('chocolate', 'strawberry', 'vanilla', 'cookie dough', 
                  'chocolate chip', 'mint chocolate chip', 'rocky road',
                  'peach', 'fudge brownie', 'coffee', 'mocha chip');

式。

但正如我所说,在我看来,拥有一种风格更重要,而不是担心哪种风格。

答案 7 :(得分:1)

在散文中,超过80左右的行已被证明更难阅读。 (请参阅LaTeX Memoir课程documentation的第13页。)代码完成(我的版本的第425节,第425页)也引用了此字条的80个字符限制:

  

对于大屏幕,窄字体,激光打印机和横向模式,80个字符限制的参数并不像我们习惯的那样引人注目。单个90个字符长的行通常比已经被破坏的行更易读,只是为了避免溢出80列。使用现代技术,偶尔可能超过80列。

我会在第一个示例中将SQL与其余代码分开缩进:

if ($Stmt = $Mysqli->prepare(
            "SELECT color, pattern, size,
                    manufacturer, mfgSku, storeLocation,
                    aisle, status
             FROM tblItems 
             WHERE ourSku = ?")) {

第二个示例如果被加载到配置文件或表中可能会更好。

第三种情况很好,但你可以稍微收紧一下:

$Stmt->bind_result( 
   $this->_firstName,
   $this->_lastName,
   $this->_BillToAddress->address1,
   $this->_BillToAddress->address2,
   $this->_BillToAddress->city,
   $this->_BillToAddress->state,
   $this->_BillToAddress->zip,
   $this->_BillToAddress->country,
   $this->_email,
   $this->_status,
   $this->_primaryPhone,
   $this->_mobilePhone 
);

答案 8 :(得分:1)

如果您要包装两个以上的项目,我更喜欢每个项目的新行,如第三个示例中所示。如果每行只有一个项目,自动源控制工具可以更容易地合并其他人的编辑。

答案 9 :(得分:1)

遵循周围代码使用的标准。不管创造多少“更好”,都不要创建自己的“标准”。

答案 10 :(得分:0)

我不知道任何标准,因为很难说。对于我们这些大型显示器的用户,我们可以在较小的显示器上查看比其他更多的水平代码。我通常会尝试在必要时通过。=(PHP)顺序构建长字符串,并且正如您的代码所示,我根据该特定行中存在多少个字符,将任意长数组任意分割到新行上。

答案 11 :(得分:0)

我不介意选项3太多(每行1项)。另外,就个人而言,我总是使用wordwrapping,因此在一行上使用代码根本不会打扰我。但是,在你的第二个例子中,使用wordwrapping,对于使用wordwrapping的程序员来说,这看起来很麻烦。也许我是一个不介意长队的小团体。

答案 12 :(得分:0)

最佳做法通常源于行长限制本身背后的目的:

  • 提高互操作性(程序员,编辑软件等)
  • 提高可读性和理解力
  • 提高享受和发展速度
  • 增加收入和利润

因此,您的选择(例如调整所有stmt参数)如果它们对您自己的未来理解以及团队中其他人的理解都有贡献,那么这些选择是很好的。

希望这会有所帮助;)-M

答案 13 :(得分:0)