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

前回書いたコードをリーダブルコードの手法を適用して読みやすいコードへ書き直していきます。

表面上の改善

読みやすさに大きく影響する「名前・コメント」を明確なもの・読みやすいものに書き直します。ポイントは以下のとおりです。
 1. 読みやすさに大きく影響する名前を明確なものに直します。
 2. 名前を見てわかるコメントは不要なので削除します。
 3. コメントは概要や注意事項など、有意義なものに直します。

/*
* 入出荷管理クラス
* 注)入荷と出荷が同時に呼び出されることはない
*/
class RasManager {

   //入荷した商品を倉庫へ登録する
   function ReceiveGoods(goods_id, goods_num) {
       if (goods_num < 1) {
           return "1以上の数量を入力してください。";
       }
       else if (!CommonFunction.ExistGoods(goods_id)) {
           return "未登録の商品IDが入力されています。";
       }

       Warehouse.StoreOnGoods(goods_id, goods_num);

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

   //指示された商品を倉庫から出荷する
   function ShippingGoods(goods_id, goods_num, delivery_id) {
       if (1 > goods_num) {
           return "1以上の数量を入力してください。";
       }
       else if (!CommonFunction.ExistGoods(goods_id)) {
           return "未登録の商品IDが入力されています。";
       }
       else if (!CommonFunction.ExistDeliveryOnAddress(delivery_id)) {
           return "未登録の出荷先IDが入力されています。";
       }
       else if (CommonFunction.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) {
       ...
   }
}

/*
* 共通関数クラス
*/
class CommonFunction {

   //商品IDが存在するか確認する
   function ExistGoods(goods_id) {
       ...
   }

   //出荷先IDが存在するか確認する
   function ExistDeliveryOnAddress(delivery_id) {
       ...
   }

   //商品の在庫数を返す
   function GoodsStockOfNum(goods_id) {
       ...
   }
}

<改善したこと>
- 実態と名前が一致しない名前を書き直しました。
 例)クラス「Reception」では何の受付かわからない
    ↓
   「RasManager」に変更
   ※Ras=Receive And Shipping=入出荷
- 汎用的な名前を明確な名前に書き直しました。
 例)引数「id」では何のIDかわからない
    ↓
   「goods_id、delivery_id」に変更
- コメントは言葉にして一文にまとめました。
- クラスコメントに同時実行を考慮しなくてよいことを明記しました。

詳しい変更点は前回と今回のコードをDiffしてみてください。

おおよそ「名前・コメント」を読みやすく書き直しました。コメントを削除したので83行⇒65行にコード量も削減できたし、表面上はこれで良いかと思います。

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