リファクタリング プログラミング

あなたが読み難いコードを書いてしまう理由

投稿日:2021年5月15日 更新日:

はじめに

読みやすいコードを書きたい人と願う方のために執筆しました。
誰もが良いコードを書きたいと願っているはずだからです。(と私は信じています)

というもの、後で自分が読み直した時、誰かにレビューを依頼する時、逆に自分がコードレビューを依頼されたときなど、読み難いコードはそれだけでイライラするし、仕様を読み解くのに時間がかかって頭を抱えることになるからです。

そういう経験はありませんか?
 

私の経験

私にはこんな経験がありました。

私は設計書を渡されて、実装を行なっていました。
設計書に目を通しロジックを確認すると、2次元配列としていたデータは3次元配列で保持する必要があることに気づきました。

発注元にも確認し、3次元配列であることは明確になりました。
ただこれはどう考えてもArrayIndexOutBoundsExceptionを引き起こす可能性(嫌な臭い)がしました。

私は独自のオブジェクトを定義することを提案し、完全コンストラクタでオブジェクトを生成するように変更しました。
保持するデータは変えず、保持する方針のみを変更したのです。

結果、データを扱うことがとても簡単になりました。
もし3次元配列にしていたら、デバッグも出力処理の実装ももっと大変になっていたに違いないと、今でも思っています。
 

読み難いコードを書く人

そのプロジェクトでは、発注元が他の会社にも発注していました。
つまり、私の会社を含めて複数の会社で設計書を分担して実装していたのです。

結合試験工程で、私の会社は他の会社の結合試験を一部引き受けることになりました。
他の会社の進捗が遅く、少しでもいいから対応してほしいということでした。

バグが出てきてコードを追いかけると、とんでもないものを目にしました。
・ロジックの重複
・配列の嵐
・if文の中に長文の判定文(2行以上もありました)

これらは以下のちょっとしたテクニックで対処できるものばかりでした。
・privateメソッドにロジックを移して流用できるようにする。
・配列はオブジェクトにして入出力とデータ保持を簡潔にする。
・判定ロジックをメソッドに移し、メソッド名で判定内容を明示する。

おそらく他の会社の実装が遅延したのは、これらのほんのちょっとした手間を惜しんだことによるものだと思います。
私の会社では私を筆頭に、ほんのわずかな工夫を所々に取り入れることでロジックが肥大化しすぎないようにし、ロジックを簡潔に保つように意識していました。

もちろんそのおかげで実装に多少の時間はかかったものの、バグの発生は適度に抑えられ、バグ修正に思った以上の時間を費やすということはありませんでした。

私の会社とその会社の違いは、ほんのわずかな読みやすさ、修正のしやすさにこだわったか?」だけでした。

ここを妥協する人が読み難いコードを書いてしまうのです。
 

読みやすいコードを書けるようになるには?

あなたはどちらでしょうか?

・与えられた設計書通りに実装することだけを考えて、コードの読みやすさや、修正のしやすさは後回しにするのか?

・多少時間がかかっても、小さくてわかり易いロジックを丁寧に実装していき、バグの発生を抑えつつ、修正をしやすいようにするのか?

……

 

聞くまでもの無く、誰もが後者を選ぶはずです。
でも、それをどうやって身に着けるのか?
それを学ぶためにリーダブルコードがあります。

全てのをノウハウがすぐにできるようになるわけではありませんが、日々の仕事の中で少しずつ実践していくことで身についていきます。

今のコードの現状を変えたい(自分自身やチームのために)のであれば、リーダブルコードを手に取ってみて下さい。

 
最後までお読み頂き、ありがとうございました!
ご意見・ご要望がありましたら、遠慮なくコメント下さい!
もし内容が良かったらランキング評価を頂けると励みになります(^^)

ランキング評価する

-リファクタリング, プログラミング
-

執筆者:


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

no image

PHPの開発環境の作り方

前提 OS:Windows10 準備 XAMPPのダウンロード https://www.apachefriends.org/jp/download.html 構築 XAMPPのインストール インストー …

ExcelをA1セルに揃えて拡大率100%にするツール

(追記:2021年8月18日) サブフォルダを処理対象にするかどうかを選択できるように改修しました。   たくましゅくじょさんのところで公開されていた、 「エクセルで全シートの拡大率を100%にしA1 …

ModelからBindingResultが消える原因と対処方法

環境 Java(SpringFramework) Thymeleaf 状況 更新画面でバリデーションエラーにより更新が失敗したというようなケースにおいて、 BuindingResultにFormのエラ …

【Java】LinkedHashSetの使い方(挿入順を保持するSet)

LinkedHashSetはHashSetのサブクラスであり、同じメソッドが実装されています。 メソッドの使い方であればHashSetと同じなので、HashSetの使い方を参照下さい。  ↓ 【Jav …

【Bootstrap】一覧表示をデザインしよう!

概要 一覧表示をデザインします。 Bootstrapにはすぐに使える便利なクラスが用意されているので、それらを使用して実現します。 【SpringBootチュートリアル】#7~ 検索画面の作成に変更を …

■運営者プロフィール
IT業界10年のエンジニア。
PHP -> VBA -> Javaと渡り歩いてきて、今はJavaをメインにフリーランスエンジニアとして活躍中!

[保有資格]
・Java SE 11 Gold

一度はエンジニアを辞めざるを得なかった私が再びエンジニアとして復活した数奇な物語

SpringFramworkの良書

■おすすめ教材
Javaの基本を学んだ人が、次のステップとして読む本(中級者向け)

※SpringはJavaのFrameworkの1つです。
変更のしやすさ、保守性の高さが特徴です。