「初めに」よりさらに初めに
株式会社アイスタンダードの高野です。
この記事は元々社内の主に新人用に作成していましたが、
あまり社内で連携されることがなくて寂しかったのでqiitaにも投稿することにしました。
記事内に問題がある場合はコメントをくださると嬉しいです。
初めに
コードを書く時に必要な事はた〜くさんありますが、今回可読性と保守性について記事を書くのは以下の理由のメリットがあると考えたからです。
- 長期的にプロジェクト全体に貢献することができる
- 可読性と保守性が高いコードが書けると気持ちよくなれる
- 過去の自分を怨まなくて済む
本編
まず定義とメリットについて確認します。
可読性とは?
特に作成したプログラマー以外の者がソースコードを見た時にそのプログラミングの目的や作成したプログラマーの意図を容易に読み取れるかどうかのこと。
可読性のメリット
- 機能の拡張や修正が容易になる
- 開発時間の短縮に繋がる
以上が可読性の定義です。
特に作成したプログラマ以外の者
とありますが、未来の自分
も加えておいてください。3ヶ月たったら大体の記憶は消えるので他人と同じようなものです。
極端な例ですが、
int a = 26;
まずパッと見で「26ってなんの数字やねん、変数名aって舐めすぎやろ」って思ったんじゃ無いでしょうか。
それは26からもaからも意味が読み取れないからでしょう。
こういうコードは読解する際に、
- 意味を汲み取るために本筋の読解とは別の読解を始めないといけない
- 無駄な思考が脳の容量を食うから疲れる
- つっこんでしまう
など、とにかく時間を食ってしまい修正に無駄なコストを掛けてしまいます。
修正するとすればこうでしょうか。
// アルファベットの総数
const int alphabetCount = 26;
こうすると分かりやすいですね。見ただけで意味が分かる。こんな感じのことを可読性っていいます。
コメントはあると親切でいいですが、無理に変な事を書いて読む人を困惑させないように気をつけましょう。
特に簡単な可読性を上げるためのテクニックを伝授?陳列?します。ちょっとでも覚えておくと便利だと思います。
- 名前と中身にズレがないように
getXXXなのに中で更新とかしたらわかんないよ
int getName() {
// getNameなのに関数内でユーザーのアップデートを行っている
updateUser();
return "太郎";
}
変数名を変えるか、updateUser()
を呼び出し元で呼ぶようにするようにしよう!!
- ネストの頭にreturnつけると分かりやすいよ
そこで終わるってすぐわかるから飛ばせるんよ
処理が長すぎるときに使えると思う
if(!isPen){
return ressult;
}else{
if(!isPineapple){
return ressult;
}else{
if(!isApple){
return ressult;
}else{
~~ 処理 ~~
}
}else{
~~ 処理 ~~
}
}else{
~~ 処理 ~~
}
- 計算結果はreturnできる
const int alphabetCount = 26;
// return trueになる
return (alphabetCount == 26)
コードがすっきりするね
- 型をしっかり指定する(言語によってはいらない)
型最高!!!型ない言語は使うな!!!(過激派)
保守性とは?
- 誤りや不具合の発見・修正のしやすさ
- 事前に予定されていなかった仕様変更や機能追加などの行いやすさ
- ソースコードの読みやすさ(可読性)
保守性のメリット
保守性とは?の3点そのまま
大体可読性高かったら保守性も高くなるから特筆して書くことなかったわ!
なのでコードに直接関係ないとこでいうとアーキテクチャやドキュメントとかあると思うけど、内容が被りそうやからここでおしまい!
※ちなみに基本情報や応用情報を勉強している時に出てくるCIAとは似ているだけで関係ない。