编程基础培训,code review、php全程bocco记录

介绍

这是我作为没有实践经验的网络工程师加入公司后两个月内接受的内部培训的回顾。

同时,(其他公司的)没有实践经验的成为Web工程师并进行互动的人,

“在实践中充满了代码审查”

话虽这么说,人家自己好像过得很苦,但他们的执行能力似乎呈指数级增长,所以我很羡慕。

文章的目的

“我很想听听其他人的早期进展。”

正如我所说,我只有机会在培训期间对我编写的代码进行审查,但我想分享一下审查教会了我什么。

通过回顾,我会检查我是否已经学会了我正在做的事情而不会忘记它。

* “furubokko”这个词很有趣,我只用它。

目标读者

我假设的读者是过去没有像我这样的实践经验的初学者。

什么样的内部培训?

内部培训是一般网络开发的基本培训,并有以下课程。

  1. PHP 基础知识(PHP,面向对象)
  2. 数据库基础知识(SQL、MySQL)
  3. Web 应用程序基础(HTML、CSS、CRUD、Cookie、会话)

    解决这些内容的问题,在GitLab上提出合并请求,内部工程师它是在接收人们评论的流程中实施的。

    例如,PHP 问题可能如下所示:

    将此产品列表定义为关联数组并为每个数组打印「〇〇(商品名) は △△(価格)円です。」

    大约有 20 个问题需要理解基本语法,例如数组、条件分支和类方法,我修复了它们,直到我得到一个 OK。

    目录

    在内部培训中,我们将在以下项目中介绍一些关于“PHP 基础”主题的代码审查节选。

    1.阅读理解

    2.可读代码

    3. 没有错误的代码

    其他

    PHP基础代码审查

    1.阅读理解

    “请根据所提问题回答。”

    首先,它甚至不是编程,但我已经多次指出我无法按照要求实现它。当然,阅读理解是需要按要求来实现的……为了在实践中尽可能避免不必要的工作,工作前还需要确认任何不清楚的地方。

    2.可读代码

    “因为变量名很难区分,请写出来让你看懂是哪一个。”

    例如,我们收到一条评论说,“如果有含税和不含税的价格,请用变量名清楚地区分它们。”另外,有人指出我应该准确地表达各种名称,例如类名。

    “请写清楚在哪里计算,在哪里显示等。”

    关于以不使用面向对象类型的过程类型编写的答案(代码),在评论中指出,因为它是各种脱节的。

    “让我们考虑一下读者的可理解性。”

    我被多次指出。

    “处理顺序很难理解,所以请在日文评论中描述处理过程。”

    我想知道不写评论是否会更好,但有人告诉我我会在实践中写。通过写注释,处理顺序变得更容易理解,也更容易回顾。

    另外,在写评论的时候,我认为重要的是要考虑评论本身是否难以理解。

    “如果while 声明没有做任何事情,请告诉我。”

    while (($data = fgetcsv($handle)) !== false) {
            $count++;
            if ($count === 1) {
                // 1行目(ヘッダ)の場合、合計金額の計算をせずに次の行に進む
    

    ``如果你用continue;来写``如果是第一行,结束当前迭代,继续下一次迭代'',你可以看到在这个while语句中第一行什么都不做。我认为它会更容易。 (因为如果你不把它写下来,你就不会知道它是不是故意的,或者当别人看到它时你忘了写它。)

    可能无法无条件地说“这是正确答案!”,但重要的是

    别人阅读时是否容易理解?

    这就是观点。 ”

    我收到了评论。

    3. 没有错误的代码

    “始终注意自动类型转换”

    // 1. full-bokko.csvファイルを読み込む
    if (($handle = fopen("csv/full-bokko.csv", "r")) !== false) {
        // 2. 1行目のヘッダを取得する
        $header = fgetcsv($handle);
    
        // 3. 価格(税抜)の合計を計算する
        $totalPrice = 0;
        while (($data = fgetcsv($handle)) !== false) {
            $totalPrice += $data[1];
    

    “这里$data[1]是代表数值的字符串(字符串类型)。

    例如,在第二行添加牛肉的价格时,

    $totalPrice = 0 + "300";
    

    但是,PHP 在此操作期间会自动转换类型。

    $totalPrice = 300;
    

    我认为你应该永远记住这一点。 ”

    我收到了评论。

    PHP在声明变量的时候不需要显式的类型定义,所以为了避免意外的bug,在实现的时候需要了解类型是什么。

    “请使用提供标准功能的那个。”

    // 4. 表示する
    echo '<pre>';
    foreach ($nameColumn as $name) {
        // 1行目に商品名をカンマ区切りで表示する
        echo $name;
        // 最後の要素ではないとき
        if (next($nameColumn)) {
            echo ",";
        } else {
            echo PHP_EOL;
        }
    }
    unset($name);
    
    foreach ($priceColumn as $price) {
    

    PHP 有一个标准函数,可以将数组元素与指定的字符串连接起来,所以请修改它以使用它。

    我收到了评论并使用implode 修复了它。

    “即使在 foreach 循环结束后,$item 仍然指向最后一个元素,所以请unset()

    // 食料品カテゴリーの商品の価格を2割引した連想配列を生成する
    function createDiscountedFoodsArray(array $items):array
    {
        $discountedFoods = [];
        foreach ($items as $item) {
            if ($item['カテゴリー'] === '食料品') {
                $item['価格'] = (int)round($item['価格'] * DISCOUNT_RATE, 0);
                $discountedFoods[] = $item;
            }
        }
        unset($item);
        return $discountedFoods;
    }
    

    $value 仍然引用数组的最后一个元素,即使在 foreach 循环完成之后也是如此。让我们用 unset() 删除引用。否则,你最终会得到这样的结果:

    我从没想过程序中引用了哪个数组元素。我害怕官方的PHP“否则”,所以我会养成它的习惯。

    添加于 2022 年 8 月 24 日

    我按上面写的,但在评论中告诉我unset 是不必要的,除非使用&(参考)。 (谢谢!)

    如果你想直接在循环中改变数组的元素,把&放在$value前面。这样变量将具有参考将被替换。

    <?php
    $arr = array(1, 2, 3, 4);
    foreach ($arr as &$value) {
        $value = $value * 2;
    }
    // $arr は array(2, 4, 6, 8) となります
    unset($value); // 最後の要素への参照を解除します
    ?>
    

    如官方文档所示,使用& 引用时意思是“即使在 foreach 循环结束后,$item 仍然指向最后一个元素,所以请unset()”。

    (后记在此结束)

    其他

    “让我们编写 PHPDoc”

    在训练期间,我写了以下内容:由于是由网站决定的,所以我被告知在写之前检查公司的规则。

    班级

    /**
     * クラスの概要/要約
     *
     * @auth <開発者名>
     * @version バージョン 日付
     */
    

    变量的名称

    /* @var 型 変数名 */
    

    方法名称

    /**
     * メソッドの概要/要約
     *
     * @param 型 変数名 説明
     * @return 型 説明
     * @throws 例外をスローする場合書く (発生する場合)
     */
    

    “关于〇〇的说明”

    在晚上的会议(进度确认会)上,我经常被要求“用文字解释术语和实现”。例如,感觉就像“告诉我 CSV 是什么”。

    几乎可以肯定,我经常被告知,“哇”和“我不知道你在说什么”......哈哈

    有很多机会向人们解释和传达,所以要习惯它。

    我觉得能够用自己的话来表达是一种真正理解的状态,所以我对自己理解的肤浅感到恼火,但我觉得我不得不每天面对它,把它烙印在我的脑海里.

    综上所述

    最近,经常有“在实践中被代码审查压得喘不过气来”的人在 Output 上写文章,通过文章你可以清楚地看到他们是如何成长的。

    我现在不是在一个完全愚蠢的环境中,但我想尽我所能。

    非常感谢!

原创声明:本文系作者授权爱码网发表,未经许可,不得转载;

原文地址:https://www.likecs.com/show-308624370.html