[和訳]クリーンなコードを書くプログラミングを実践する

Nityesh Agarwal    
Build to Learnで、プログラミングを教えるソフトウェア開発者・フリーランスライター
この記事は、2019年11月に公開された記事の翻訳転載です。著者の許可を得て配信しています。
Writing Clean Code and the Practice of Programming

一般的に初心者が無視するより良いプログラミングのための簡単なルール

「スタイルの目的は、コードを自分や他の人が読みやすくすることであり、優れたスタイルは優れたプログラミングに不可欠である。
ブライアン・W・ケニンハン「プログラミングの実践」

プログラミングを独学で習得する場合、誰もその仕事をチェックしていないので、容易に悪い習慣やスタイルが身に付くことになります。これらの問題に直接取り組む書籍や研修コースは多くないことから、クリーンなコードの基準に関する参照資料はあまり多くは存在しません。

この記事では、クリーンで美しいコードを書くことに関する実用的なアドバイスを提供しようとするものです。

シンプルで実用的な優れたプログラミング手法5選

1. 変数の名前を選択する際は、その名前に何らかの意味を込めること

「説明的な名前にすべきか、それとも適当なもので片づけるか?」

これは、新しい変数を作成する際に直面する難問です。

ここでは、下記ライアンWカーニガンのアドバイス(上記の書籍)はここで実際に役に立つと思われます。

・グローバル関数、クラス、および構造体には、プログラムでの役割を示すわかりやすい名前を付ける必要があります。
・対照的に、ローカル変数には短い名前で十分です。関数内の変数は、n で十分、これをnumberofPoints とするのはやり過ぎです。
・従来の方法で使用されるローカル変数の名前は、極めて短くすることができます。ループインデックスには i と j、ポインタには p と q、文字列には s と t を使用する頻度が非常に高く、これらに長い名前を付けてもメリットはほとんどなく、おそらくはロスになります。

とにかく、ブライアンがこの本を書いた90年代よりもずっと良くなっています-それは変数をオートコンプリートにするIDEに似ています。

これでも、適当に片づけますか?

2. 必要に応じて新しい関数を作成

好きな言語で書かれた関数の構文を理解するのは簡単です。しかし、コードを関数に分割するタイミングを学ぶには、練習とある種のデザイン感覚が必要です。

1つの目標として、プログラムを新しいケースに拡張する際は、関数が再利用できるように設計することです。

そのほかに何かありますか?このようなデザインの選択工程は、プログラミングの楽しさでもあります。

このことに関し、ボブマーティンの著書「Clean Code」では、選択肢として下記3つのヒューリスティックを挙げて説明がなされています。

関数は小さくする必要があります。どれほどに小さく?スクリーンに収まる程度内または20行以下。
関数にはわかりやすい名前を付けます。関数は小さければ小さいほど、またその焦点が狭ければ狭いほど、わかりやすい名前を選択しやすくなります。名前を長くすることを恐れてはいけません。長いわかりやすい名前は、短い謎の名前よりも優れています。長いわかりやすい名前は、長いわかりやすいコメントよりも優れています。
関数は1つのことをするだけで、副作用はありません - 関数が意図するところは、その名前によって明確にする必要があります。

最初の関数を書く場合、それはおそらく長く複雑で、上記のルールのいずれにも沿わないものになるでしょう。それで結構です。後でコードを調整して再フォーマットできます。上記すべてのルールに沿った関数を最初から書けるような人はいなと思います。

あなたが目指して努力すべきは目標は関数の構築であることを覚えておいてください。目標を見失ってはさせてはいけません。

3. コードを文書化し、役立つコメントを書く

コードには常に、関数とモジュールドキュメントとして機能するコメントを含める必要があります。

すべての関数定義は、下記のようなコメントを使って処理する必要があります。

1. 関数の動作を記述する1~2語句の短文。
2. その末尾に、その関数が取るすべての引数(存在する場合)の説明文1 行が続きます。
3. その更なる末尾に、関数の戻り変数(存在する場合)の説明文1 行が続きます。

これらとは別途、コードの理解し難い部分を説明するコメントを含める必要があります。

以下のことに留意してください。

・これらコメントは、プログラムの読者を助けることを目的とするものです。コードが既に明白なことを言ったり、コードと矛盾したり、精巧なタイポグラフィーの表示で読者の気をそらしたりするコメントは役立ちません。
・可能な限り、わかりやすいコードを記述しましょう。これを行うに上手であればあるほど、必要なコメントは少なくなります。良いコードは、良くないコードのように多くのコメントをしません。とどの詰まり、コメントは必要悪なのです。
・コメントがコードと矛盾してはなりません。ほとんどのコメントは、書き込み時点ではコードに同調していますが、バグが修正され、プログラムが進化するにつれて、コメントは元の形式のままになることが多く、コードとの不一致が生じます。

4. 一貫性を維持しましょう。

その理由は?

一貫性のあるコーディング スタイルは即ち、優れたコーディング スタイルであるからです。

この一貫性により、 (あなた自身を含む) 誰もが、あなたのコード潜入するのが容易になるので、そのコードを将来的に読み取りやすいものにします。

以下の点を留意しましょう。

・可能な限り、標準的な方法に従ってください。「<プログラミング言語を挿入> スタイル ガイド」を検索し、コード全体で信頼できるソースに従います。Python 自体が推奨する Python PEP8 スタイル ガイドを次に示します。
・標準が何であるかが不確かであるか、または標準を逸脱却する必要がある場合は、そうする理由があって、コード全体で一貫して行われていることを確認すべきである。
・変数の名付け方法、コードのインデント方法、関数の文書化方法、および ++i と i++ のどちらを使用するかにまで至って一貫性を保つべきである。

5. コードの破損は(おそらく)自己責任

そしてそれを負うことを学びましょう。

コーディングに取り組む間、その時間の大半は、破損したコードに頭悩まして費やすことになる可能性があります。

このような場合、プログラマ、特にその初心者はその責任をIDE、コンパイラ、環境、または機器に責任を転嫁しようとします。

あなたが、先ずはその欲求不満を抑えて知るべきは、すなわち、その原因はパソコン機器のせいではなく、あなた自身にあるということです。

この問題は、あなたがある一定の手段を講じる場合にのみ、(それがパソコン機器に何らかの問題がある場合でも)その問題を診断してその核心に到達することが可能となるものなのです。

デバッグする方法

1. 友人にコードを説明するか、または下記ラバーダック(rubber-duck)のデバッグ技術を使用してください.

・友人かまたはラバーダックのいずれかを選択する。
・問題のあるコードを開き、ゆっくりと辛抱強く、彼の(/彼女の/その)行に説明する。
・魔法のように、友人(またはラバーダック技術)の助けを借りずにまとわりついている問題を見つける。

2. printステートメントの追加利用

このようなprintステートメントを追加することは正しいデバッグ方法ではありませんが、私には時々信じられないほど効果的なことがあります。この効果は特に、vimのようなテキストエディタを使用して、デバッガを持つ本格的なIDEで作業している場合 (または、デバッガの使用方法を習得するのが面倒な場合)は顕著に現れます。

しかし、IDEデバッガの使い方を学んだら、後戻りはできないということを申し上げておきます。

3.IDEデバッガの利用

デバッガは極めて便利です。しかし、私は愚かしく長時間を費やしてIDEのデバッグ機能を学ぶことはしていません。しかし、お気に入りの IDE でデバッガを使用する方法を学ぶことはお勧めします。信じてください、それはコード破損の痛みに良く効きます。

個人的アドバイス;Pythonは標準ライブラリモジュール (pdb) にデバッガを提供しているので、私はIDEデバッガを使用しています。

ガイドライン原則

結局のところ、プログラミングスタイルの原則に基づくものは、任意のルールや処方箋ではなく、経験によって導かれた常識であることを覚えておいてください。

以下は私がコードをクリーンに維持すべくフォローしている指針4原則です。

1. 「何とか動いている」で妥協しないこと
2. 読み易いように書く-コードは書かれるより読まれることの方がより頻繁
3. 明解であればあるほど良い
4. 上書きは全てのソフトにおいて、悪の根源

これらは、ルールを忘れたり、これらの簡潔なルールの対象外の現実世界で新しい状況に陥ったときに役立ちます。

これら採用により独自のコーディングスタイルを改善する方法

良いコーディングスタイル関する私の直感を述べるについては、下記の書籍2冊を参照してます。

1. ボブマーティンの著書「Clean Code
2. ブラインカニングハムの著書「プログラミングの練習

しかしながら、練習はこれら書物を読むだけでは不十分であることに留意してください。

これらは把握が難しい直感に関わるものですが、自身の直感を開発する最善の方法は、練習を通じ行うものです。

私は以前に、ティーチングスルースモールプログラムアプローチに潜む問題点は、そのアプローチが以下の点に関して否定的、または反することにあると書いています。

・コードのモジュール化に関する方法など、直感を開発する
・関数が、プログラムを新しいユース ケースに拡張する際にに再利用できるような関数の記述方法に対処する
・読み取り可能なコードとコンパクトなコードを記述することのトレードオフについて話し、優れた一貫性のあるプログラミング スタイルの必要性に焦点を当てます。

要約すると、小さなプログラムは、サイドプロジェクトで作業する大規模なプログラムを作成する際に学ぶコアデザインの選択肢を教えてくれません。

したがって、これらの直感を開発する方法は、プロジェクトに取り組むということです。

あなたが興味深いプロジェクトのアイデアを見つける段階で立ち往生している場合であれば、私はあなたをそこから抜け出すのを支援するたためになる記事を書いています。

Fantastic Programming Project Ideas and Where to Find Them (Beginner-Friendly)

そして、あなたにとって、独自のプロジェクトを構築するという考えがまだあまりにも困難に思える場合であれば、私は上記記事の中でプロジェクトの話を通じてあなたの行く道を案内しています。

Advance Your Python Skills by Building a WhatsApp Chat Analyzer

私は教えることに情熱を注いでいます。私自身が直面する問題に、感情移入を以て取り組むような記書き続けるつもりです。このようなガイドや記事を更新のたびに手に取って読んで頂くべくは、ニュースレター、Build To Learnを購読してください。


コメントを読む

新着ピック  






















新着ニュース

モジラが会長のミッチェル・ベイカー氏を新CEOに迎える | TechCrunch Japan

フランスが新型コロナ抑制のためのBLEを利用した感染者追跡アプリの準備を正式表明 | TechCrunch Japan

Red Hat新CEOにポール・コーミア氏が就任 前CEOのジム・ホワイトハースト氏はIBMプレジデントに

ユダヤ教の過越の祭が新型コロナの影響で今年はZoomに、来年こそエルサレムで | TechCrunch Japan

5Gスマートフォンを安価に売るためのカギは? ミリ波対応が難しいのはなぜ?

165Hzで「量子ドット」採用のゲーミングディスプレイ「KIG270QD」の実力は?

台湾、政府機関でビデオ会議サービス「Zoom」の使用禁じる--セキュリティなど懸念

米国株は新型コロナ減速の兆候で再び反発、SaaS株も復調 | TechCrunch Japan

Customized Icons for Alteryx Macro | Developers.IO

Customized Icons for Altery...

DevelopersIO / 2時間前


Alteryxマクロのカスタムアイコン作成 | Developers.IO

グーグル兄弟会社Wing、ドローンによる医薬品や食料品宅配が急増--新型コロナで

格安スマホ各社、データ容量の無償提供など学生支援策を発表--内容にはバラつきも

新型コロナに乗じたハッキング、英米のセキュリティ当局が警告

ビデオ会議ツール「Google Meet」、1日あたり200万人超の新規ユーザーを獲得

React でページ内の目的の箇所まで自動スクロールさせる | Developers.IO

Disney+の有料会員数が半年を待たずに5000万人を突破 | TechCrunch Japan

SnowflakeのWarehouse一覧をPythonで取得してみた | Developers.IO

リモートワークの普及に取り組むキャスターが6億円調達、既存サービスの利用企業数は1300社を突破 | TechCrunch Japan

NASAが2022年の月への貨物輸送にMasten Space Systemを指名、同社の月着陸船XL-1と連携 | TechCrunch Japan

Google、新型コロナ対策支援で「Stadia Pro」を2カ月無料に(日本は対象外)

もっと見る
記事をPICKする
会員登録
Register
記事をPICKする

会員登録すると、もっと便利に利用できます。