如何让你的 PHP 代码保持整洁?

翻译 Summer ⋅ 于 1周前 ⋅ 最后回复由 轻色年华 11小时前 ⋅ 1811 阅读 ⋅ 原文地址
这是一篇社区协同翻译的文章,已完成翻译,更多信息请点击 协同翻译介绍

file

我坐下来和我的团队成员一起解决问题。 “我们必须赢得这场胜利”我说,深深地埋头在这两天内研究出的一个可用原型---每个人的竞争本性已被点燃,小伙子们要想得是,哪一个会争夺到第一,第二或第三的位置。

几分钟后,一位高级工程师(管事儿的)走到我的办公桌前,脸上露出不满的神情,喃喃地说:“你的代码不整洁,太乱了!” 这是导致我书写更整洁代码的开始。

zhangbao 翻译于 1周前

查看其他 2 个版本

file

代码能跑起来不就完了嘛,还要整洁?你可能会听到有人这么说,但我要说的是,代码不仅要能跑起来,还要写整洁,真的。

我当一名软件工程师有几年了,写了一些程序。这段岁月告诉我,代码仅能跑起来是不够的。

我的问题很简单:我专注于让代码跑通了,可招致了技术性债务,而这些债务在某个时刻将不得不还清。

zhangbao 翻译于 1周前

如何让你的代码保持整洁

想要让你的代码整洁优雅,仅仅读完 uncle Bob《代码整洁之道》 是不够的,还需要知识和持续的练习,你必须要学习原理,模式以及实践。也许这需要长时间的努力工作,但不妨你现在就开始行动。

无论你现在的代码多么的整洁,然而总有一些东西能你的代码变得更加整洁,这需要你去学习。

通过读专家的书或者帖子来学习,是一个非常有效的途径。你可以关注他们的 twitter,听他们的演讲,关注他们的 GitHub,学习他们写代码的方式以及结构。

除非你向你所在领域的专家不断学习,否则,你可能一直停留在工程师的级别。

LOST 翻译于 1周前

查看其他 3 个版本

保持你的函数短小精悍

这大概是1337篇文章中强调方法和函数尽可能端小的一篇。这里很容易出错。

整洁的代码不仅仅是编写简短的方法,编写的代码要清晰地传达意图。

当一个函数太长时,很可能表明做的太多了,读者会阅读中迷路。函数应该只做一件事。

if($order->contains($status){
   //do something with order
}
function contains($status){
    $order_statuses=['accepted','delivered','rejected','processed'];
      if (in_array($status, $order_statuses)) {
            return true;
         }
        return false;
   }

我们可以通过重写函数,使它'contains'整洁为:

function contains($status){
  return in_array($status, $this->config->statuses);
}

这个函数 'contains' 不仅整洁,而且解耦;

rayle 翻译于 1周前

查看其他 1 个版本

变量或函数的名字应该能够一眼看出它的作用

选择一个合适的函数名字有的时候可能很乏味,但是毫无疑问的是这值得你这样做!因为这使你在代码变更的时候不需要更新代码的注释!

$date =date('Y-m-d'); //Ofcourse, it's a date but too generic!
$orderCreationDate =date('Y-m-d'); //cleaner code

避免 ifswitch 语句

个人认为,它(ifswitch 语句)会让我花一点时间去理解。“你告诉我,我该怎么避免使用我最爱的语句之一——if & else?”事实证明,大部分条件语句可以简单的被分解成函数或类。这并不是说不让你使用 ifswitch 语句,只是想说看情况使用!
这里有一个很好的例子:

class BookOrder
{

    public function process()
    {
        switch ($this->book->type) {
            case 'audiocopy':
                return $this->processAudioBook();
                break;
            case 'downloadablecopy':
                return $this->processDownloadableCopy();
                break;
            case 'paperbookcopy':
                return $this->processPaperBookCopy();
                break;
            default:

        }
    }

}

一个干净且更易于维护的书写方式应该是这样的:

interface  IBookOrder {

    public function process();
}
class AudioBookOrder implements IBookOrder :void {

    public function process()
    {
        // TODO: Implement process() method.
    }
}
class PaperBookOrder implements IBookOrder: void {

    public function process()
    {
        // TODO: Implement process() method.
    }
}
class DownloadableBookOrder implements IBookOrder: void {

    public function process()
    {
        // TODO: Implement process() method.
    }
}
轻色年华 翻译于 1周前

避免心理地图式命名

干净的代码应该易于阅读,理解,不应该有猜测的余地。

使程序看起来简单的不是语言,而是使语言变得简单的程序员。
 Robert C. Martin

下面的代码检查客户是否可以提取一定数量的钱。这很有效,但很混乱。

if($this->user->balance  > $amount && $this->user->activeLoan===0){
   $this->user->balance -=$amount; // withdraw amount;
}

让我们把它弄的整洁一点

if($this->hasNoActiveLoan() && $this->canWithdrawAmount($amount)){
   $this->withdraw($amount);
}

 public function hasNoActiveLoan(){
    return $this->user->activeLoan===0;
 }
 public function canWithdrawAmount(float $amount){
     return $this->user->balance > $amount;
 }
 public function withdraw(float $amount){
    $this->user->balance -=$amount;

}

这不仅容易理解,而且更容易测试。

sayhe110 翻译于 1周前

理解和应用S.O.L.I.D的原则

S.O.L.I.D 是面向对象设计的头五大基本原则的首字母缩写,由Robert C. Martin 提出。 这些原则,结合在一起能够方便程序员开发低耦合,高内聚,封装良好的代码。这些原则是密切相关的,只有灵活的应用你才能写出更好的代码。关于这些原则我写在另一篇文章中here

不要对自己太苛刻

想知道为什么这在目录上吗?想一次理解所有的内容,很容易陷入整洁代码的世界。不幸的是:它需要时间,几个月,几年甚至终身。在开始决定一切要清洁时,需要学习和实践这些原则。

rayle 翻译于 5天前

查看其他 1 个版本

结论

通过写这篇文章,我希望能激励一些人成为一个更好的开发人员,并且开始关心整洁的代码(如果你不是)

不要吝啬您的宝贵意见,使任何例子更简介,加我[LinkedIn](https://www.linkedin.com/in/samuel-james-abiodun/)或[告诉我一个新的机会](邮寄地址:samuel4abiodun@gmail.com)。

For further reading

Awesome Curated List of Clean Code Resources\
Clean Code: A Handbook of Agile Software Craftsmanship 1st Edition\
Clean Code PHP\
A month of clean code\
Clean code concept adapted for PHP
\
Clean code JavaScript

hanzhongqing 翻译于 1周前

查看其他 1 个版本

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

本帖已被设为精华帖!
回复数量: 8
  • 感觉中心思想就是提取方法

  • Edwin
    6天前

    化整为零吧

  • Donng
    6天前

    强烈推荐大家去读英语原文和评论以及博主的其他文章,一定会产生很多新的认识。

  • skyEvyn
    5天前

    对于用多态代替if...swich这块,只有实现,但是怎么应用。。。。。

    是不是很笨啊

  • kimi
    5天前

    方便别人,方便自己~

  • xhh110 因为爱,所以想走的更远 --- love for coding
    4天前

    @Edwin 化整为零是删库跑路么???

  • Edwin
    4天前

    @xhh110 :smile:结构简单化

  • 轻色年华
    3天前

    用现在流行的一个词汇就是去中心化 :smile:

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter