【プログラミング基礎】初学者に伝えたい美しいプログラムを書く為に意識すべきこと

美しいプログラム プログラミング全般

プログラムを書く時にただ漠然と何も考えずプログラムを書いていませんか?
そのプログラム、上司にレビュー依頼して呆れられていませんか?

プログラミングを学習していく上で、クラスや関数などの知識をつけることも大事ですが、美しく読みやすいプログラムを書くことも同じように大切です

独学でプログラミングを勉強してる人

これから就職してエンジニアになろうと思っている人

エンジニアだけど適当にプログラムを書いている人

に意識してもらいたい

より良いプログラムを書くためのノウハウを紹介したいと思います。

・美しいプログラムは保守性に優れる
・美しいプログラムを書く為に意識すべき5つのこと

体系的に勉強したい人はこちらの本がお勧めです。


リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

1. 美しいプログラムは保守性に優れる

保守性という言葉を聞いたことがありますか?

保守性が高いプログラムとは、簡単に言ってしまえば機能変更や機能追加のしやすいソースコードのことです。
これから説明する美しいプログラムの書き方を意識することで、プログラムの保守性が向上します。

また、バグが少なく、長期的なシステムの機能維持に優れたソースコードを書くことが出来るようになります。

なぜ”美しいコード“が機能維持に優れるのかと言いますと、可読性(コードの読みやすさ)が向上する為です。

可読性が向上することで

  • 数週間後、数ヶ月後にコードを読み直した時に内容の把握がしやすい
  • 他人がコードを読んだ時に内容の把握がしやすい
  • システムにバグが生じた時に、バグを見つけやすくなる

開発するシステムは、長期運用を念頭に置いているはずです。
その間に開発環境の変化や機能追加/変更により、システムの改修をする機会があると思います。

そんな時に、可読性のない汚いコードで書かれたプログラムの場合、システムに手を加えるのが大変になります。

また、ソースコードを上司にレビューしてもらう時も同様です。
読み辛いソースコードをレビューしたい上司は基本的にいないでしょう。
汚いソースコードはレビュアーの時間を不用意に奪うからです。

逆に言えば、美しいソースコードを書くことが出来れば、可読性が上がりお客さんや上司からの評価も上がります。また、自分でコードを見直すときやバグ出しをする時のスピードも上がる為、開発の生産性向上にも繋がります

美しいソースコードを書くことを日頃から意識しておくようにしましょう。

美しいソースコードのメリット
・システムの改修がしやすくなる
・上司またはお客さんの時間を不用意に奪わなくなる
・自分自身の開発の生産性が向上する

2. 美しいプログラムを書く為に大切な5つのこと

美しいプログラムを書く為に必要なことは何か?
大きく5つに分けて紹介したいと思います。

最後まで読み終えた頃には、プログラマとして最低限必要な知識を身につけていることでしょう。

1. コーディング規約は守ろう

まず初めにコーディング規約は守ろうという話です。
企業で複数人の開発を行う時に、チームのメンバーが好き勝手な基準でコードを書いていたら、プログラムの一貫性が損なわれて汚くなってしまいますよね。

それを避ける為にコーディング規約というものを初めに決めます。
変数の名前の付け方であったり、インデントの大きさであったりをコーディング規約の中でルールを決めてプログラム全体の一貫性を保ちます。

プログラム全体の美しさや保守性にも影響してきますので、必ずプロジェクト内のコーディング規約は確認して、遵守するように心がけましょう

2. 名前の付け方は大切です

次は名前の付け方に関するお話しです。
変数や関数に名前をつける時に、適当な名前を付けていませんか?
美しいプログラムにする為の名前の付け方について紹介します。

・具体的な名前をつける
・汎用的な言葉は避ける
・読み手の誤解を避ける名前付けを意識する
・命名規則を統一する
・日本語の名前を避ける

1. 具体的な名前をつける

例えば”時間”、ここでは”年”を値として返すような関数があったとします。

その関数の名前を”GetTime()“とした場合、どういった単位で返ってくるのかまでは分かりません。

後々の混乱を避ける為に、”GetTimeYear()“や”GetYear()“という名前をつけると良いでしょう。

2. 汎用的な言葉は避ける

汎用的な名前を避けることも大切です。

例えば、年数の計算で365日を使用する時に、前もって定義しておきたいことがあるでしょう。その時に名前を”constant“などという名前にした場合、定数という情報以外ありません。

int constant = 365
このように汎用的な名前をつけるのは避け、”day”“year“の文字を名前に入れ、使用目的や意味がわかる名前を付けましょう。

3. 読み手の誤解を避ける名前を意識する

名前を付ける際に、”これはどちらの意味なのだろうか?”と読み手を考えさせてしまう名前は避けましょう。
例えば、ある数未満の時にエラーを出すようなプログラムを書く時に、”Limit“のような未満でも以下にでもとれてしまうような言葉を使用すると読み手が混乱します。
このような場合は”Max“や”Min“のように、意図が分かりやすい言葉を使用するのが大切です。

4. 命名規則を統一する

たまに命名規則が統一されていないコードを見かけるのですが、命名規則を統一することも大切です。
例えば”犬の数”と”猫の数”を変数で表す時に、下記のように命名の仕方が統一されていれば読みやすいですよね。

int dog_number = 0
int cat_number = 0
逆に
int dog_number = 0
int CAT_NUMBER = 0
であったり
int dognumber = 0
int cat_number = 0
のように、

大文字や小文字の使い方が適当であったり

“アンダーバー(_)”をつけるタイミングが不揃いになっている
 

一貫性が損なわれ、読みにくいコードになります

5. 日本語の名前を避ける

以前、改修の案件を担当した時に実際にありました。
日本語の名前をつけるのはなるべく避けましょう。英語で日本語名を使用すると読み辛くなり、意味がわからない時があります。

例えば、年を変数として表す時に

int nen = 2021
のように表記した場合、分かりづらいです。
このようなプログラムを書く人は、感覚で名前を付けている人が多いので、”日”を表す変数を表すときは英語で付けていたりします。『なんとなく”niti”だと微妙だから』という理由などでです。
int nen = 2021
int day = 10
命名の仕方に一貫性がなく分かりづらいですよね。基本的に関数の名前は英語でついているので、新しく自分で変数を宣言する場合も英語で名前を付けましょう。
int year = 2021
int day = 10

6. その他、細かい話

その他、クラスの名前は名詞にすることメソッドの名前は動詞にするべきなど細かい暗黙のルールなども存在します。
気になった方はコーディングに関する書籍を1冊購入することをお勧めします。

3. 外観の美しさを意識しよう

1. インデントは統一する

インデント“とは字下げのことです。

インデントを使わずに好き勝手書いてしまうと関数の終わりが見えなくてコードが読みづらくなります。

例えばこのようなコードですね。
インデントが無く、読みづらいですね。

*C++のコード例(インデント無し)

int max_count = 5;
int count = 0;
while(max_count > count){
if(count == 0){
cout<<"count is zero."<<endl;
}
else if(count > 0){
cout<<"count is over zero. "<<endl;
}
else{
cout<<" count is minus"<<endl;
}
count++;
}

きれいにインデントを付けると読みやすさはグンと上がります。
今回は半角スペース4文字分のインデントを付けています。基本的には3種類のインデントの幅があり、どれが良いかは好みによります。
コーディング規約に明記されている場合もありますので、明記されて居る場合はコーディング規約に従いましょう。個人でプログラムを書く場合にも統一するように心がけると美しいプログラムになります。

*C++のコード例(インデントあり)

int max_count = 5;
int count = 0;
while(max_count > count){
    if(count == 0){
        cout<<"count is zero."<<endl;
    }
    else if(count > 0){
        cout<<"count is over zero. "<<endl;
    }
    else{
        cout<<" count is minus"<<endl;
    }
    count++;
}
よく使われるインデント
・半角スペース2文字分
・半角スペース4文字分
・半角スペース8文字分

2. 改行を上手く使って外観を整える

横長になりそうなコードの場合、あえて改行を使う方が見やすくなったりします。

例えば下記のようなコードの場合

var line_number = number1 = number2;
このように書いた方が見やすいですね。
var line_number = number2;
var number1 = number2;
他にもif文や関数の引数など、横長になって見にくい場合は改行を使用して揃えると良いです。

3. ネストはなるべく浅くする

ネストとは入れ子のことで、よくある例としてif文の中にif文が入っており、更にその中にもif文が入っている状態があげられます。処理によっては仕方のないこともあるのですが、なるべくネストは深くならないように気をつけましょう。

ネストが深くなる例

if(a == 0){
    if(b == 0){
        if(c == 0){
        }
    }
}
こういった例の場合は、下記のように書いた方が分かりやすくなります。
if((a == 0) && (b == 0) && (c == 0)){
}

4. 未来の自分に向けてコメントをつけよう

1. コメントの必要性について

コーディングの意図を読み手に伝える時に、重要になってくるのがコメントを付けるということです。
ここで言う読み手というのは、全く知らない誰かかもしれないし、未来の自分かもしれません。

数週間、数ヶ月経てば、どういった意図でコードを書いていたのか分からなくなることは良くあります。

簡単なプログラムであればコードを一つ一つ追えば良いかもしれませんが、複雑で長いプログラムである程、コメントの重要度が高まります。

常日頃からコメントを付ける癖を付けておきましょう。

2. 意味のあるコメントをつける

コメントが必要だからといって意味のないコメントを付けるのはやめましょう。

極端な例ですが、下記のようなコメントは不要ですよね。
一目見ればint型が整数を返すことがわかります
プログラムからすぐに把握できるようなコメントでは無く、どういった意図でコードを書いているかに着目してコメントを残すようにしましょう。

//整数型
int year = 2021

5. 変数の使い方には気を付けろ

変数というのは便利な反面、使い方を間違えると可読性を損なう結果になってしまいます。
変数の使いどころについても簡単に説明します。

1. 一時変数は削除しよう

一時変数は削除しましょう。
コードを何度も編集した結果、使いどころの無い変数中間変数として一度しか使用されていない変数が残っていませんか?
そういった変数は必ず削除するようにしましょう。

2. グローバル変数は避けよう

グローバル変数というのは全ての関数から直接アクセス出来る変数のことです。
main関数などの外側で定義されていることが多いです。

グローバル変数はどこからでもアクセスと参照が出来るので、どのタイミングで変更されているのか知ることが困難になります

その為、グローバル変数はプログラムの可読性を損なう要素となる為、使用は極力避けるようにしましょう。

3. マジックナンバーの使用は避けよう

マジックナンバーとはプログラム内に埋め込まれている、書き手本人にしか分からない具体的な数字のことを指します。

他人がソースコードを見たり、時間が経ってからソースコードを見返した時に、”この数字はなんだろう?“となりかねません。

マジックナンバーの使用は避けて、しっかりと定数や変数で意味のある名前を付けるようにしましょう。

3. まとめ

初学者向けに美しいプログラムを書く為に意識すべきことをまとめました。
今回あげた話の他にも美しいコードを書く為のテクニックはたくさんあります。

本格的に勉強したい方は、書籍を一冊手に取って勉強すると良いでしょう。

書籍で勉強するならリーダブルコードという本がお勧めです。
実際のコードの例を示しながら、分かりやすく解説してくれています。
初版が発行されてからだいぶ経っていますが、今なお根強い人気を誇っており、エンジニアやプログラマ必読の一冊かと思います。


リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

+1

コメント

タイトルとURLをコピーしました