こんばんは!

 

ゆうです!

 

 

渡す新人の時は全くわからなかった

今回は『読みやすいコードってなんだ?』

ということについてお伝えします。

 

 

ちなみにこちらが参考図書です。

↓こちら

 

読みやすいコードを書くための習慣や

テクニックをまとめてある良書です。

 


とても簡潔にまとまっているので、

活字嫌いなエンジニアでもぜひとも

いや、無理してでも読んで見てほしいですね。

 

 

それでは始めます。

 

第一部 表面上の改善

1章 理解しやすいコード

優れたコードとは何か。

それは読みやすさである

 

 

これがこの本のテーマです。
 

ステップ数(コードの行数)が少ない事よりも、

高度な文法を使うよりも、

よっぽど重要なことです。

 

 

なぜならソフトウェア開発ではコードを

読む事が非常に多いから。

 

2章 名前に情報を詰め込む

  • 明確な単語を選ぶこと。最低限、英語の単語の理解が必要。

    例えばGetではなく、状況に応じて、DownloadやFetchなど

  • 汎用的な名前を避けること

    tempやretvalなどより、目的や値を表すものであるべき。ただし、スコープにもよる。

  • 接尾辞や接頭辞を使って情報を追加すること

    ミリ秒を表す変数に、_msを追加する、など。

  • 名前のフォーマットで情報を伝えること

    クラスのメンバ変数にアンダースコアをつけるなど

 

3章 誤解されない名前

英単語(日本語もね)には曖昧なものが多いので、ネーミングは慎重に。

  • 限界値、包含的または排他的範囲などを意識した名前にする。
  • 妙なプライドは捨て、ユーザーの期待に合わせる事を心がける
  • 複数の名前を検討する。 > template/ reuse / copy / inherit、どれが良いだろうか

4章 美しさ

3つの原則

  • 一貫性のあるレイアウト
  • 似ているコードは、シルエットも似ているように見せる
  • 空行を使って、関連するコードをブロックでまとめる > 視覚的な踏み石を提供できる。ページのなかで自分の場所を見失いにくくなる

 

シルエットや空白行については、

ビジネス文書研修でも意識するように言われた事。

 

5章 コメントすべきことを知る

読み手の立場になって何が必要になるか

を考え、そうでないものは書かない。
嵌りそうな罠を告知する。

 

6章 コメントは正確で簡潔に

  • 「これ」や「それ」のような代名詞は避ける
  • コメントに含める入出力の実例を慎重に選ぶ。
 

第2部 ループとロジックの単純化

7章 制御フローを読みやすくする

ここからは、少し深く、ループやロジックレベルの話。

  • 条件式は、左側が調査対象、右側が比較対象

ヨーダ記法

if (NULL == obj)

左側に値を持ってくるのは、obj = NULLなどと書いてしまうのを予防するためのものだが、こういったミスについて最近のコンパイラは警告をしてくれる。それよりは読みやすさを選ぶべき。

  • 三項演算子を使うのは良いが、1行で書くことにこだわってはいけない。読みやすさを重視しべし。
  • returnを複数箇所で呼んではいけないなんて、全くのナンセンス。むしろ読みにくさを生む。
  • goto文も、使い方を間違わなければ問題ない。例えば、関数の下部においたexitと一緒に使う時

gotoの良い使い方

if (obj == NULL) goto exit;
...
exit:
  fclose(filed);
  return;
  • 括弧のネストは浅くする。
  • 読み手が精神的スタックを使わないといけないから。
 

8章 巨大な式を分割する

この本を読む中で、最も「目からウロコ」だったものが、次の2つ、
* 説明変数
読みにくいコードには敢えて変数を作り、説明する

説明変数-before

if line.split(':'[0].strip() == "root";

これを、以下のように記述する。

説明変数-after

username = line.split(':'[0].strip();
if username == "root"

この配慮が素敵。

  • 要約変数

要約変数-before

if (request.user.id == document.owner_id) {
  // Onwerの場合
}
...
if (request.user.id != document.owner_id) {
  // Ownerでない場合
}

これを

要約変数-after

final boolean user_owns_document = (request.user.id == document.owner_id);
if (user_owns_document) {
  // Onwerの場合
}
...
if (!user_owns_document) {
  // Ownerでない場合
}

もう一度言おう。この配慮が素敵だ。こんなコードならreviewしたい。

  • 「頭が良い」コードで1行にまとめて書くよりも、複数行に分割して書いたほうが何がしたいのかわかりやすい
  • ロジックを正しく理解して、簡潔で優雅なコードを発見する
  • 変数や関数をうまく利用して巨大な式を分割する

9章 変数と読みやすさ

  • 役に立たない一時変数は削除する
  • 変数のスコープを小さいものにする。

例えばグローバル変数は、どこでどのように使われるか追跡する必要があり、把握するのに時間がかかる

  • 宣言・定義の位置は、使う直前に
 
今回はこの辺で!
次回はこの続きについてやります!
 

ーーーーーーーーーーーーーーーーーーーーーーーーーー

 

プログラミングの相談にのっております。
 

-  どう勉強していいかわからない

- IT業界って実際どうなの?

- プログラミングできるようになりたい!

 

という方。気軽に連絡してください!

 

 

 

またメルマガの配信も行なっております。

 

- どうやって勉強したらいいのかわからない

- プログラミング未経験なんだけど、どうしたらいいの?

- 専門用語も何もわからない

- 上司に怒られてばかりの今の状況を打破したい

 

という方はどうぞ。

 

 

 

>>>>>>メルマガの登録はこちら<<<<<<