【第1部】 読みやすいコードの第一歩:変数とメソッドの正しい扱い方

この記事は、保守性の高いコード設計シリーズの一部です。プログラミングの初歩から一歩進んで、誰が読んでも理解しやすいコードを書くための具体的なテクニックを紹介します。

こんにちは。プログラミングを始めたばかりの頃は、とにかく動くコードを書くことに集中しがちです。しかし、プロジェクトが大きくなったり、チームで開発したりするようになると、「コードの読みやすさ」が非常に重要になってきます。

今回は、未来の自分や他の開発者を助ける、読みやすいコードの基礎となる「変数」と「メソッド」の扱い方について見ていきましょう。

目次

省略せず、意図が伝わる名前を設計する

まず、以下のコードを見てください。ECサイトの最終的な請求金額を計算するロジックのようですが、何をしているかすぐに理解できるでしょうか?

【Before】これでは意図が分からない…

// 't', 'p1', 'p2', 'd' が何を表すか不明
double t = 0.0;
t = p1 + p2;
t = t - d;
if (t < 0) {
    t = 0;
}

p1dといった一文字の変数は、書いた本人でさえ数日後には「これ、何だっけ?」となってしまう原因です。コードは、処理内容を説明する「物語」であるべきです。その物語の登場人物である「変数」に、適切な役割名を与えましょう。

【After】名前だけで処理内容が想像できる!

double finalBillingAmount = 0.0;
double subtotal = productPriceA + productPriceB;
finalBillingAmount = subtotal - couponDiscount;
if (finalBillingAmount < 0) {
    finalBillingAmount = 0;
}

いかがでしょうか。productPriceA(商品Aの価格)とproductPriceB(商品Bの価格)を足してsubtotal(小計)を出し、そこからcouponDiscount(クーポン割引額)を引いてfinalBillingAmount(最終請求額)を計算している、という処理の流れが一目瞭然になりました。

少し長くなっても、省略せずに意図が伝わる名前を選ぶことが、読みやすいコードへの第一歩です。


変数を使い回さない、目的ごとの変数を用意する

次に、計算の過程で一つの変数を何度も使い回すケースを見てみましょう。

// 'amount'という変数が小計、送料込み合計、最終金額と役割を変えている
double amount = productPriceA + productPriceB;
amount = amount + shippingFee;
amount = amount - couponDiscount;
if (amount < 0) {
    amount = 0;
}

この書き方でも計算結果は同じですが、デバッグが困難になるという欠点があります。例えば、最終結果がおかしい時に、どの計算段階で問題が発生したのか(小計の時点か、送料を加えた時点か)を特定しにくくなります。

計算の各ステップで生まれる値には、それぞれ新しい「目的ごとの変数」を用意してあげましょう。

【After】計算の途中経過が分かりやすい!

// 1. 商品の小計を計算する
double subtotal = productPriceA + productPriceB;

// 2. 小計に送料を加える
double totalWithShipping = subtotal + shippingFee;

// 3. そこから割引額を引いて最終請求額を出す
double finalBillingAmount = totalWithShipping - couponDiscount;

if (finalBillingAmount < 0) {
    finalBillingAmount = 0;
}

このように、subtotal(小計)、totalWithShipping(送料込み合計)、finalBillingAmount(最終請求額)と、目的ごとに変数を分けることで、ロジックの各ステップが明確になります。これにより、コードが読みやすくなるだけでなく、デバッグもしやすくなるのです。


意味のあるまとまりでメソッド化する

変数名が整理できたら、次はそのロジックを「意味のあるまとまり」で部品化(メソッド化)していきましょう。

メソッド化のメリットは、以下の通りです。

  • 再利用性: 同じ計算を色々な場所で使えるようになります。
  • 可読性: 長い処理が、意味のある名前のメソッド呼び出しに置き換わるため、コードの全体像を把握しやすくなります。
  • テスト性: メソッド単位でテストが書けるため、品質が向上します。

先ほどの請求額計算ロジックを、メソッドを使って整理してみましょう。

【After】ロジックを部品として切り出す

// 小計を計算するメソッド
double calculateSubtotal(double priceA, double priceB) {
    return priceA + priceB;
}

// 最終的な請求額を計算するメソッド
double calculateFinalBillingAmount(double subtotal, double shippingFee, double discount) {
    double amount = subtotal + shippingFee - discount;
    if (amount < 0) {
        return 0.0;
    }
    return amount;
}

これらのメソッドを呼び出す側のコードは、驚くほどシンプルになります。

【After】メソッド呼び出しで、処理の概要が分かる

double subtotal = calculateSubtotal(productPriceA, productPriceB);
double finalBillingAmount = calculateFinalBillingAmount(subtotal, shippingFee, couponDiscount);

このように、「何をやっているか」の詳細はメソッドの中に隠蔽し、呼び出し側では「処理の概要」だけが見えるようにすることで、非常に見通しの良いコードになります。

まとめ

今回は、読みやすいコードの基礎として、以下の3つのテクニックをご紹介しました。

  1. 意図が伝わる名前を使う: 省略せず、具体的な名前にする。
  2. 目的ごとに変数を用意する: 変数を使い回さず、計算ステップを明確にする。
  3. 意味のあるまとまりでメソッド化する: ロジックを部品化し、見通しを良くする。

これらの基本を徹底するだけで、あなたのコードは格段に読みやすくなります。 しかし、データ(変数)とロジック(メソッド)がまだ別々の場所にあります。これらが強く関連し合っている場合、さらに良い設計が可能です。

▼次の記事 次回は、今回整理したデータとロジックを「クラス」という一つの入れ物にまとめることで、さらに堅牢で再利用性の高いコードを設計する方法を解説します。

【第2部】 データとロジックをまとめよう:クラスで実現する、堅牢なコード設計

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次