エンジニアのコーディング PR

【Swift】リーダブルコードの薦め|エンジニアにおすすめの技術書からの学び

記事内に商品プロモーションを含む場合があります

この記事の目的

超有名な技術書”リーダブルコード より良いコードを書くためのシンプルで実践的なテクニック”.

実際にこの技術書を読んだ私が,この書籍学べること・学んだことの概略をまとめています.
購入を迷っている方の参考になれば,嬉しいです!

本の概要

はじめに

リーダブルコードは文字通り読みやすいコード.

理解しやすいコードやミスの起こりにくいコード,チーム開発で意識すべき点などコーディング周辺に関する様々な情報が書かれた良書になります.

実際のコードが載っていたり,具体例が書かれたりと非常に理解もし易いです!

この本をおすすめできる人

この本はコーディングをする人になら誰にでも必須な本になります.
しかし私が思うに,全くのプログラミング初心者ではなく,コーディングを大学の授業やプログラミングスクールで書いたことがある,これから実務経験を積む予定である人に非常におすすめできます!
これまで我流で書いてきたコードをもっと美しく書くには? この名前意外と使っていたけど,ミスが起こりやすいんだ,,などの学びがたくさんあります!
私もその一人でした笑

また,現在ばりばりエンジニアとして活躍されている方も,一旦立ち止まってこの本を読んでみると多くの気付きもあると思います.

このようなプログラミング界における良書です!笑
読めば読むほど味が出る書籍になります.

ただしこの情報だけでは,具体的にどんなことを学べるのかイメージできてない方もたくさんいると思います.
そこで下記に実際に私がリーダブルコードを読んで見つけた発見学びをわたしなりの解釈でまとめています!
購入する際の参考になれば嬉しいです.

<リーダブルコードからの学び>
第Ⅰ部 表面上の改善

命名規則|名前に情報を詰め込む

命名規則に必要なのは,あとから見たときにすぐに理解できること.

それを実現するために必要な考え方がいくつかあります.
下記は自分なりにまとめたものになりますので参考までによろしくお願いします.
詳細を学びたい方はぜひリーダブルコードを読んでみてください!

ニュアンスも含めた明確な言葉で

例えばstop()
よく見る名前ですが,あまりよろしくはありません.

では変更すればよいのか...

取り消しができないのならば→kill()
再開できるなら→resume()
一時停止なら→stop()

このようにニュアンスまでも含めた明確な単語だと明確になります!
ある程度の英語の勉強も必要ですね笑

その他には,getもどこから取ってくるのかによって名前をfetchPage()などに変更する
などなどが挙げられます.

  • send → deliver, dispatch, announce,,,
  • find → search, extract,,,
  • start → launch, create, begin, open,,,
  • make → create, set up, build, generate, add, new,,,

単位や種類も明記する

たとえばtmp
これもtmp_fileなどのように中身までパット見でわかるようにする必要があります.

これはfor分で用いるi, j, kにも同様です.
i, j, kを引用する際に,どれがどれかわからなくなる→club_i, members_i, users_iまで具体的になにの数なのか明記することで明確になります!

更に,単位やフォーマットの情報も重要だと言えるでしょう.
例えばid,これも文字列なのか数値なのか16進数なのかぱっと見ではわかりません...
2進数であるならばhex_idというふうに,明記することでわかりやすいコードになります.

  • delay → delay_secs
  • size → size_mb
  • limit → max_kbps
  • password → plaintext_password
  • comment → unescaped_comment
  • url → untrustedUrl, trustedUrl

これらは単にわかりやすくなるだけでなく,危険予知(まちがえてクラッシュさせてしまったなどなどを防ぐこと)にも繋がります!

誤解を防ぐ表現

単位やフォーマットを関数名に含めることで,情報を増やすことができますが,
ブール値の場合は特に注意が必要です

例えばread_password = true

これだとこれから読み取るのか,もう読み取っているのか曖昧です.
そこでis, has, can, shouldを使うことで解決できます.

use_is_authenticated,hasSpaceRight
こうすることでブール型だと明確に,そしてtrue/falseのどちらを指すのかを明確にすることができます.

応用内容として,ブール型とは関係ありませんが,下記の方法のような誤解を防ぐ方法もあります.
→→ローカル変数とメンバ変数を区別するためにあえてstatsとstats_と表記するような使い方をする.

勉強になりますね!

短くてもわかり易い表現

変数の名前に情報を詰め込むことは必要です.
しかし冗長すぎて逆に分かりづらくなることも想定されます.

そこで役に立つのが英語の前置詞です!

たとえば,ConvertToString()ならば→ToString()などです.
よく見る関数名ですね笑
このように省略も必要です.

ならば,どれぐらいの長さの関数名がベストなの??
そう迷った場合は,スコープと連動するのが解決案に繋がります!
要するに,コードの行数が短ければ短い関数名,ながければ長い関数名です.

コメントアウト|わかることは書かない

コメントアウトの基礎

コメントアウトの鉄則は,コードから読み取れることはコメントアウトに残さない

コメントアウトは多すぎても読みづらいし,少ないと説明書いてくれと思う.
そんな風に実は難しい作業です.

私としてはコードでどうしても表せないことをコメントに残す,これがいいのではないかと解釈しています.
コードに情報を詰めることが第一です.
つまり,コードをスムーズに読むことができるのならばコメントアウトはいらない!
命名するセンスが試されますね笑

ならば,コードでどうしても表せないこととは??
たくさんあると思いますが,代表的なものは
罠を明記,コードの欠陥にコメントをつけるです.←コードが正義な気はしますね笑

// TODO: もっと高速なアルゴリズムに変える必要がある
// XXX: 実行時間はO(タグ×タグの深さの2乗)なのでネストの深さに注意

といった形です.
ちなみにTODO: などのアノテーションコメントは,テキストエディタ上で色がついたりすることで目立たせることができます.(エディタによって反応するアノテーションを設定する必要がある場合もあります)

アノテーションコメントはたくさんあり以下は有名なものになります.

  • TODO: hogehoge → あとで手をつける,修正すべき点がある
  • FIXME: hogehoge → 既知の不具合がある
  • XXX: hogehoge → 危険!大きな問題がある
  • WARNING: hogehoge → 注意が必要
  • HACK: hogehoge → リファクタリングが必要
  • OPTIMIZE: hogehoge → 無駄が多く、ボトルネックになっている
  • REVIEW: hogehoge → 意図した通りに動くか,見直す必要あり
  • CHANGED: hogehoge → コードをどのように変更したか説明
  • NOTE: hogehoge → なぜ、こうなったという情報を残す

ちなみにSwiftでは,下記のものもよく使用されます.

  • MARK: hogehoge → タグマーク付きの見出し
  • MARK: – hogehoge → ライン区切りありタグマーク付きの見出し

コメントアウトは最小限=Gitみればわかることは書かなくていい
と考えると,5つくらいのアノテーションコメントで十分かもしれませんね.

わかりやすいコメント

コメントアウトは最小限のこと,そしてアノテーションコメントを用いて
内容をわかりやすく明確にすることが基本だと学んできました.

ではコメントの内容はどのように書いていけばよいのでしょうか.
コメントの内容を良い凝縮したものにするには大きく3つのポイントがあります.

① 動作を正確に記述する

たとえば
// このファイルに含まれる行数を返す

これだけだと,
“”は0行なのか1行なのか,”Hello\n”は1行なのか2行なのか,”Hello\n world”は2行なのか3行なのか,
解釈が分かれてしまいます..

そこで,
// このファイルに含まれる改行文字(“\n”)を数える
のように,誰が読んでも同じ解釈をできるようなコメントにします.

② コードの意図までも書く

こちらは文字通り,作成した際の意図を記入します.
// 配列を逆順にソートする
と,コードの説明を書くのではなく
// 値段が高い順に並び変える
と意図までも記述することで,仮にコード上に間違いがあった際に発見しやすくなります.

③ 凝縮したワードを使う

3点目はコメントアウトを冗長しないためのテクニック!
// 正規化する・標準化する,キャッシュ層である
のように,
計算方法をだらだら,クラス内でやっていることをだらだらと記述するのではなく
専門的なワード,多くの意味を含んだ言葉や表現に変更することで
単純かつ明白なコメントになります!

他にもたくさんのコツがリーダブルコードの中には記述されていますが,
この3点を意識するだけでも格段にコメントアウト力が向上すると思います!

<リーダブルコードからの学び>
第Ⅱ部 ループとロジックの単純化

実際の書籍では,第Ⅱ部...
と計Ⅳ部に分かれて整理されています.

他の部についても,随時追加していきます!
comming soon…

まとめ

第Ⅰ部からもわかるように,
この本はコーディングをする人になら誰にでも必須なスキルについて再確認できる本になります.
これまで我流で書いてきたコードをもっと美しく書くには? この名前意外と使っていたけど,ミスが起こりやすいんだ,,などの学びがたくさんあります!

全くのプログラミング初心者ではなく,コーディングを大学の授業やプログラミングスクールで書いたことがある,これから実務経験を積む予定である人に非常におすすめできます!

プログラミング界における良書です!笑
読めば読むほど味が出る書籍になります.是非一度,読んでみてください!

おわりに

このブログでは,SwiftやFlutterなどの日々学びつつアウトプットしています.
他にもおすすめツールがあれば教えて下さい!
また,間違いや改善点があれば,ご指摘いただけますと幸いです!

ABOUT ME
でらにー
個人開発で副業する”サラリーマンエンジニア”です. ちょっと役立つTipsを発信しています! モットーは”無知の知” 知ることで生活を快適に!