リーダブルコード実践 Vol.5

更なる改善

まだ改善の余地があるので、今までのポイントを総ざらいし、もっと読みやすくします。

/*
* 入荷と出荷が同時に呼び出されることはない。
*/
class RasManager {
    function ReceiveGoods(goods_id, goods_num) {
        if (goods_num < 1)                        return "1以上の数量を入力してください。";
        if (!CommonFunction.ExistGoods(goods_id)) return "未登録の商品IDが入力されています。";

        Warehouse.StoreOnGoods(goods_id, goods_num);

        return "商品を入荷しました。";
    }

    function ShippingGoods(goods_id, goods_num, delivery_id) {
        if (goods_num < 1)                                       return "1以上の数量を入力してください。";
        if (!CommonFunction.ExistGoods(goods_id))                return "未登録の商品IDが入力されています。";
        if (!CommonFunction.ExistDeliveryOnAddress(delivery_id)) return "未登録の出荷先IDが入力されています。";
        if (Warehouse.GoodsStockOfNum(goods_id) < goods_num)     return "入力した商品は在庫不足のため出荷できません。";

        Warehouse.DeliveryOnGoods(goods_id, goods_num, delivery_id);

        return "商品を出荷しました。";
    }
}

class Warehouse {
    function StoreOnGoods(goods_id, goods_num) {
        ...
    }
    function DeliveryOnGoods(goods_id, goods_num, delivery_id) {
        ...
    }
    function GoodsStockOfNum(goods_id) {
        ...
    }
}

class CommonFunction {
    function ExistGoods(goods_id) {
        ...
    }
    function ExistDeliveryOnAddress(delivery_id) {
        ...
    }
}

<改善したこと>
- 名前で何をするかわかるのでクラス・メソッドに関するコメントは削除しました。(RasManagerの補足コメントは残しています)
- RasManager.ReceiveGoods、RasManager.ShippingGoodsのif文を縦に整列するよう書き直しました。また、elseはなくても動作に変わりはないので削除しました。

以上で改善終了です。最初のコードと比べると、95行⇒45行にコード量が減り、名前で何をするかわかるようになりました。やはりムダなコメントがなくなるとスッキリして見やすいですね。

今回は見た目がメインの例題だったので、次回はロジックをメインにした例題にしたいと思います。

この記事が気に入ったらサポートをしてみませんか?