Help us understand the problem. What is going on with this article?

PHP コードレビュー嵐に苦しむ社内 SE が,最近感じること。ちょっとしたお作法で,コードをグーンと読みやすくするエチケット

はじめに

社内 SE という職業柄,社外へシステムを発注することは多く,ビジネスパートナーのエンジニアが書いたコードをレビューする機会が日常的にあります。

その中で,「こう書いてくれた方が,もっと,楽に読めるんだけどなぁ」と感じる,口惜しいポイントがいくつかあることを日頃から感じており,記事としてアイデアをシェアしてみようと思いました。

コードレビューでは NG 判定にするまでもない小さなことですが,ちょっとしたお作法で,読み手の負担を下げられる事例の紹介になると思います。

余分な変数は切らない

コードをどれだけ速く読めるかは,エンジニアの器量にも大きく依存するところですが,コードの質,とりわけ,変数の個数は,思考作業の大きな負荷となります。

なぜなら,変数が一度見つかると,スコープが終わるまでは,その挙動を頭の片隅に置く必要があるため,考えることが増えてしまうからです。

出番が一回しかないような変数は作らないというルールを守るだけでも,コードの印象が,ものすごくスッキリしたものになります。

【追記】読者の皆さんのアドバイスを盛り込んで,改善案を追加しました(ありがとうございました)

// 2行に分けて書く方法(出番が一回しかない変数 $emp_id がある)
$emp_id = $this->input->post('emp_id');
$emp_name = $this->getEmpName($emp_id);

// 1行でまとめて書く方法(一行に収まるが,横太になって,ちょっと読みづらくなる)
$emp_name = $this->getEmpName($this->input->post('emp_id'));

// 1行でまとめて書く方法(改善版)
$emp_name = $this->getEmpName(
    $this->input->post('emp_id')
);

無意味な初期化はしない

変数を初期化するコードをよく見かけますが,意味のないケースが散見されます。

数値型だったらゼロ,文字列型だったら null で初期化しておけば,なんとなく安心できる心理効果はあるものの,消しても挙動に影響を与えない初期化は,使わないようにします。

// 意味のない初期化
$age = 0;
$age = $this->getAge();

// こうすればいいだけ
$age = $this->getAge();

連想配列は「母数」の分かる書き方を

連想配列って,多くの定義方法がありますね。

これも,書き方ひとつで,コードを読むときの思考負荷が大きく変わります。

読み手が分かりやすいよう,「母数はこれだけ」というメッセージを込めた定義の仕方が,スッキリします。

// 思考負荷が高まってしまう書き方(要素がまだまだ増えるかもしれないと,不安になる)
$employee['name'] = 'Yamada';
$employee['age'] = 24;
$employee['address'] = 'Tokyo';

// 思考負荷を低減できる書き方(要素が3つだというメッセージが込められている)
$employee = [
    'name' => 'Yamada',
    'age' => 24,
    'address' => 'Tokyo',
];

まとめ

本記事でご紹介した例は,ちょっとした工夫ですが,積み重なると,コードの読みやすさを大きく改善できる好例だと思いますが,いかがでしたでしょうか?

コードの読み手に与える負荷を少しでも低減するという配慮は,将来の自分自身のためにもなります(一か月後の自分は,他人のようなものですから)。

日々の小さな積み重ねで,幸せなコーディング体験が得られるようにしたいですね。

codingojisan
メーカー勤務の情シス部員@惑いまくりアラフォー。システムの設計工程(企画・要件定義・基本設計)をメインに担当していますが,製造工程にも強い興味があり,小規模プロダクトは勉強を兼ねて自作しています。よろしくお願いします。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした