2019.12.11綺麗で読みやすいソースコード、書きたいですよね。読みやすいコードを書けるか否かはプログラマーにとって死活問題であり、私自身、仕事でコードを書くようになってから、その重要性を強く意識するようになりました。プログラミング』の中で、印象的だった部分を引用しながらリストアップしていきます。―より良いコードを書くためのシンプルで実践的なテクニックコードは理解しやすくなければならない。本書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。コードを再構成するための方法。テストの書き方などについて、楽しいイラストと共に説明しています。質の高い(バグが少なく、メンテナンス性が高い)プログラミングをするための、一生使える原理原則を、「なぜそうなるのか」「どうやって使えばいいのか」やさしく解説。脱・初心者を目指す入社3年目までのプログラマーのステップアップに最適のガイドブックです。変数宣言や関数呼び出し制御テストまとめコーディングの大前提(?)最も読みやすいコードとは何も書かれていないコードである。コードを理解しやすくするにはコードを書かないことが一番であり、コードを書かないことがパフォーマンスを上げることに貢献する。常に「このコードは理解しやすいだろうか?」と自問自答する。シンプルなコードは、「素人っぽく」見えることもある。経験を積んだプログラマは、経験を積んだなりの高級なコードを書きたくなるもの。その誘惑に負けないようなメンタリティを持つことが必要。プログラミングにおける1つ1つの判断は「そのコードが変更される」前提で行う。コードは1つずつタスクを行うようにしなければいけない。そのタスクは小さくなるように分割する。コードをたくさんの小さい部分に分割する(関数などが長くなったら分割して短くする)。やみくもに高尚な処理をしようとしない。自分のタスクを解くのに十分な要求を定義すればいい。(例えば、店舗検索システムを作るとして、「任意のユーザの緯度経度に対して、最も近い店舗を検索する」という要求があった場合、日付変更線をまたいでいるときの処理やその他色々高尚な処理が必要。自分のアプリケーションが特定の地域しか扱わないなら、そのような処理は不要。)プログラミングにおいては「今日単純なことをして、明日変更が必要になった時に、変更のコストを支払う」方が「今日複雑なことをして、結局使わない」よりも良い結果を生む。標準ライブラリのすべての関数やモジュール、型の名前のドキュメントを読んでみる。知っておけば、いつか役立つかも。既存のインターフェースが汚い場合は、自分でラッパー関数を用意して、覆い隠すといい。問題を声に出して説明するだけで、解決策が見つかることがある。(通称ラバーダッキング)より賢い手法を考えるなら、問題を反対から解決しようと試してみる。配列を逆順にイテレートしたり、データを後ろから挿入するなど、とにかくいつもと反対のことをやってみる。コメントコードを理解するのに役立つなら何でも良いからコメントを書く。(ただし、コメントには画面の領域をとられるし、読むのに時間がかかるので、簡潔なものでなければいけない。)ソースコードのコメントに「なぜそれをしているか」を書く。コメントで曖昧な単語を使わない。(例えば「行数を返す」だと空ファイルは0行なのか1行なのか分からない。なくて、「改行文字(\n)を数える」のようなコメントにする。)定数の値を決めたときに頭の中で考えていたことを記録する。人間はこんなに読めない。1000;コードの欠陥にコメントをつける。高速なアルゴリズムを使う変数の単位は以下のようにコメントに残すと簡潔でわかりやすい。名前を短いコメントだと考えて、長くなりすぎない程度に多くの情報を詰め込む。(ただし変数のスコープが小さいときは、名前に情報を詰め込む必要はない。)tmpやretvalのような情報の無い名前をつけるのは基本的には避ける。変数の意味を間違えるとバグにつながりそうなときは、変数名に重要な属性を追加する。hoge_utf8みたいに文字コードを明示する等。名前に含まれる単語を削除しても情報が全く損なわれない場合は、不要な単語を削除する。(例えばconvert_to_string()はto_string()にしても必要な情報は損なわれないからconvert_の部分を削除してしまう等。)名前が他の意味と間違えられることはないだろうかと自問自答する。名前を否定形にするのは避けた方が良い。shouldなどの接頭辞を使う。上下の限界値を決めるときには、max_やmin_を前につけるといい。イテレータ(ないしはforループなどの繰返し処理)が複数あるときは、インデックスに明確な名前をつけるといい。piyo_iみたいな感じにする。)変数宣言や関数呼び出し変数の定義は、変数を使う直前に行う。最初から全部定義する必要はない。同じ変数には一度だけ書き込むようにする。呼び出される関数の側で、渡された引数の調整をしてはいけない。関数を呼び出す前に、呼び出し側で調整する。デフォルト値で変数を宣言して、処理ごとに変数に代入するのは一つのやり方。条件やループなどの制御フローがないコードは読みやすい。処理の分岐を少なくし、処理の流れを直線的に読めるコードを書く。ネストの深いコードは、読み手の精神的スタックに条件をプッシュしなければならず、理解しにくい。ネストを削除するには失敗ケースをできるだけ早めに関数から返せばいい。関数から早く返すのはいいことifなどの条件式では、変化する値を左に、より安定した値を右に書く。age)より読みやすい。(「もし君が18歳以上ならば」は自然だけど、「もし18歳が君の年齢以下ならば」は不自然。)式を簡単に分割するには、式を表す変数を使えばいい。'root':と書けば読みやすい。テストテストするときは、コードを完全にテストする最も単純な入力値の組み合わせを選択しなければいけない。テストには最もきれいで単純な値を選ぶ。コードを検証する完璧な入力値を1つ作るのではなく、小さなテストを複数作るほうが、簡単で、効果的で、読みやすい。テストに使う関数は、他のコードから呼び出されないので、長くなっても構わない。テスト関数の名前はコメントだと思えばいい。テストのカバレッジを100%にすることに拘らない。テストの時間対効果を考える。ユーザーインターフェースやどうでもいいエラーケースの部分はバグのコストが高くないのでテストが割に合わない可能性。テストが開発の邪魔になってはいけない。テストはプロジェクトの一部。時間対効果を意識する。まとめ長くなってしまいましたが、本記事では綺麗で読みやすいコードを書くためのヒントをリストアップしていきました。一貫性のあるスタイルは「正しい」スタイルよりも大切PEP8(Pythonコーディング規約)という言葉もありますので、神経質になり過ぎず、少しずつ読みやすいコードを目指していきましょう。最後に、その他のヒントや分かりやすい説明は以下の書籍を参考にして頂ければと思います。―より良いコードを書くためのシンプルで実践的なテクニックコードは理解しやすくなければならない。本書はこの原則を日々のコーディングの様々な場面に当てはめる方法を紹介します。名前の付け方、コメントの書き方など表面上の改善について。コードを動かすための制御フロー、論理式、変数などループとロジックについて。コードを再構成するための方法。テストの書き方などについて、楽しいイラストと共に説明しています。質の高い(バグが少なく、メンテナンス性が高い)プログラミングをするための、一生使える原理原則を、「なぜそうなるのか」「どうやって使えばいいのか」やさしく解説。脱・初心者を目指す入社3年目までのプログラマーのステップアップに最適のガイドブックです。Amazon最後までお付き合い頂きまして、ありがとうございました。研究所で働くエンジニアのブログ関連記事プログラミングiPadでPython開発!手軽にiPadでプログラミングする方法ややこしい設定は一切不要!手軽にiPadにPython開発環境を用意して、プログラミングをする方法をご説明します。iPadで開発するときに気をつけたい問題も取り上げます。プログラミング3年目までに身につけたい一生役立つ101の原理原則』という本を読みました。本文中にコードこそありませんが、プログラミングをする時の判断に役立つ原理原則と考え方がいくつも紹介されています。practice)』という本を再読しています。今日は、コードの表面上の改善について印象的な内容をメモしておきます。プログラミング3年目までに身につけたい一生役立つ101の原理原則という本の備忘録で、読んですぐプログラミングに活かせる部分を取り上げました。今回は、「覚えておくと役立つかもしれないプログラマーの心構え...プログラミングプログラミング言語はPythonがおすすめな4つの理由【効率的な独学方法も紹介します】どのプログラミング言語を学べばいいか分からない。Pythonに入門しようか迷っている。効率良くPythonを独学したい。この記事では現役エンジニアで日頃からPythonを使う筆者が、Pythonの魅力と効率的な独学方法をご紹介します。コメントをキャンセルメールアドレスが公開されることはありません。*サイト次回のコメントで使用するためブラウザーに自分の名前、メールアドレス、サイトを保存する。上に表示された文字を入力してください。メーカーの研究所に入所。研究や開発に従事しており、普段はプログラミングをしたり論文を読んだりしています。ブログは趣味の学びのアウトプットです。本ブログが何かのお役に立ちましたら幸いです。研究所で働くエンジニアのブログ.。