「こんにちは、アミーゴ! 今日はコード スタイルとコード スタイルの重要性についてお話します。」

「最も重要なことから始めます。Java コードは読みやすくなければなりません。 コードへの一般的なアプローチは次のとおりです。コードは 1 回書かれますが、100 回読まれます。」

「あなたと他の 10 人のプログラマーがアプリケーションを作成しているとします。あなたはそのアプリケーションに 3 年間取り組み、3 か月ごとに中間リリースを作成します。」

「そんなに長い?」

「これは Java、私の若いバッタです!」 10 台のサーバーで実行され、6 年以上にわたって 100 人が作成したエンタープライズ システムはどうでしょうか? そういうこともたまにあるよ。」

"うわあ。"

「とにかく、コードの主なルール、主な要件は、他の開発者にとって読みやすくなければならないということです。」

「他のプログラミング言語では、人々は小規模なチームとして小さなタスクに取り組むことが多いため、『うまくいく? 素晴らしい』など、別の主要なルールがある可能性があります。」

「数年かけて、チームのメンバー全員が、あなたが書いたコードにいくつかの変更を加えることになります。そのたびに、メンバーはコードがどのように機能するかを理解する必要があります。」

「そして、完璧に動作する理解できないコードは、変更するのが困難です。 彼らはそれを破棄して、独自の方法で書き直します。 だから、他の人が理解できるコードを書きましょう。 コードを改善できる場合は、改善してください。改善できる場合は、それなら改善する必要がある!

「15 分間コードを書いて、それを改善するのに 2 時間を費やした場合、それは正しく行われています。チームはどのくらい時間を節約できますか?」

「『コードを理解するのに 2 時間』 x 『人々がコードを理解する必要がある 100 回』 = 200 時間。」

「これらの数字は何もないところから導き出したものですが、問題とその範囲を理解していただきたいのです。 あなたのコードは他のプログラマが読むために作成されています。 他のことはすべて二の次です。」

「コードが正しく動作していませんか? 修正します。最適化されていませんか? 最適化します。文書化されていませんか? コメントを追加します。」

コードは読みにくいですか? そんなくだらないものはゴミ箱に捨てて、最初からすべて書き直してください!

「それがそんなに大したことだとは思わなかった。」

「Java が主要なプログラミング言語である理由の 1 つは、すべての Java コードが他のプログラマによって読み取られるように書かれていることです。」

「では、2 番目の質問に移りましょう。コードをできるだけ読みやすくするにはどうすればよいですか?

「誰かが母国語で馴染みのある言葉を話しているときは、誰でも理解できます。ここでも同じことが当てはまります。プログラマーが次のことを簡単に推測できる場合、コードは読みやすくなります。

A) 各メソッドの機能

B) 各授業の目的

C) 各変数が格納する内容そのもの。

これらすべては、クラス名、メソッド名、変数名という名前で伝えられます。さらに、変数の名前付けにはスタイルがあります。そしてコードスタイルもあります。」

「聞く準備はできています。」

プログラミングは優れた英語に基づいています。 よく書かれたプログラムは、通常の技術文書のように読めます。

名前から始めましょう。

「メソッド名は、そのメソッドが何を行うのかを簡潔に説明する必要があります。そうすれば、コードは単純な散文のように読むことができます。」

プログラム
public String downloadPhoto(String url)
{
 String resultFileName = TempHelper.createTempFileName();

 Downloader downloader = new SingleFileDownloader(new Url(url));
 downloader.setResultFileName(resultFileName)
 downloader.start();
 while(downloader.isDone())
 {
  Thread.sleep(1000);
 }

 if (downloader.hasError())
  return null;

 return resultFileName;
}

「そのようなプログラムは次のように読み取られます。」

ライン1。

「このメソッドは 'downloadPhoto' という名前です。インターネットから写真ファイルをダウンロードするようです。どこにダウンロードされますか? まだわかりません。どこからですか? このメソッドには url という名前のパラメータがあります。これはおそらく、次の URL です。」ダウンロード。」

3行目。

「変数 resultFileName は、TempHelper.createTempFileName(); によって宣言され、値が割り当てられます。」

したがって、これは、ダウンロードしたファイルを保存するファイルへのローカル パスでなければなりません。

「『TempHelper』という名前からは何もわかりません。『Helper』という接尾辞は、これが重要なビジネス ロジックを含まない一種のユーティリティ クラスであることを示しています。むしろ、頻繁に発生する日常的なタスクを簡略化するために使用されます。」

「メソッド名 'createTempFileName' は、このメソッドが一時ファイル (一時ファイル) を作成してその名前を返すことを示しています。一時ファイルは、しばらくの間作成され、通常はプログラムが終了するまでに削除される一時ファイルです。 」

5行目。

「SingleFileDownloader オブジェクトが作成され、変数ダウンローダーに割り当てられます。」

これは、インターネットからファイルをダウンロードするオブジェクトです。

「SingleFileDownloader オブジェクトは、変数ダウンローダーに割り当てられます。名前から、プログラムには数種類のダウンローダー クラスがあると推測できます。1 つは単一のファイルをダウンロードするために作成されており、おそらくグループ用のコード内で他のダウンローダーに遭遇することが予想されます。 MultiFileDownloader、FileGroupDownloader、または DirectoryDownloader のような名前を持つファイルの数

6行目。

「ダウンローダー オブジェクトの resultFileName プロパティを変数 resultFileName の値と等しく設定します。言い換えれば、ダウンロードしたファイルの保存場所をローダーに伝えます。ご想像のとおり、基本的にコードを予測しています。」

7行目。

「start メソッドを呼び出します。ダウンロードが開始されます。それは当然です。ダウンロードはどのように行われるのでしょう。部分的に、別のスレッドで、それともここで全体をダウンロードするのでしょうか? ここで全体をダウンロードすると、かなりの時間がかかる可能性があります。長い時間がかかり、結果が生じる。」

8行目から11行目。

「ああ。ここには、ダウンロードが完了するのを待っている人によって書かれた標準ループが表示されます。ダウンローダー オブジェクトには、isDone() メソッドによって返される Done プロパティがあります。これは、このメソッドが getDone( ではなく isDone() と呼ばれているためです。 )、done 変数はブール値、またはおそらくブール値であると結論付けられます。」

13~14行目。

「ダウンロード中にエラーが発生した場合、downloadPhoto メソッドは null を返します。エラーを処理するのは良いことですが、単に null を返すだけでは問題です。エラーが何であるかは明らかではありません。次の情報を含む例外をスローする方がよいでしょう。」エラー。"

16行目。

「ダウンロードしたファイルを含むローカル ファイルへのパスを返します。」

"うわあ!"

「このプログラムのコードは、それが何をするのかを完全に明確にします。プログラムがどのように構成されているのか、他にどのようなクラス/メソッドが見つかるのかを推測することもできます。」

「名前がいかに大切かが分かりました。」

「名前についての詳細。オブジェクト/クラスがどのメソッドを持っているかを推測することができます。たとえば、オブジェクトがコレクションの場合、要素の数を取得するための size() メソッドまたは count() メソッドがある可能性が高くなります。また、 、おそらく add() または insert() メソッドがあるでしょう。要素は get/getItem/getElement メソッドを使用してコレクション クラスから取得されます。

「変数が i、j、または k と呼ばれる場合、それはループ カウンタである可能性が高くなります。」

「変数が m または n と呼ばれる場合、それは配列/コレクションのサイズである可能性が高くなります。」

「変数の名前が name である場合、それは誰かの名前を含む String である可能性が高くなります。」

「クラスが FileInputStream と呼ばれる場合、それはファイルであると同時に入力ストリームでもあります。」

「表示されるコードが増えるほど、他の人のコードが読みやすくなります。」

「しかし、非常に読みにくいコードがある場合もあります。この場合、非常に実用的なアドバイスを次に示します。」

ヒント
あなたがどこに住んでいるか知っている暴力的なサイコパスによって管理されるかのようにコードを作成してください。

「それは面白いことでもあり、同時に面白くないことでもある。」

「変数に名前を付けるために使用されるスタイルについて少し説明します。」

「Java 開発者は、変数やメソッドに非常に有益な名前を付けようとします。その結果、名前は複数の単語で構成されることがよくあります。複合名の大文字化には 4 つのスタイルがあります。」

1) 小文字 – すべての単語は小文字で書かれます。例えば:

「温室」が「温室」 になる

「ハリウッドガール」が「ハリウッドガール」 になる 

このスタイルはパッケージ名に使用されます。

2) 大文字 – すべての単語は大文字で書かれ、アンダースコアで区切られます。例えば:

「最大値」はMAX_VALUE になります

「猫の数」はCAT_COUNT になります

「このスタイルは定数 (最終的な静的フィールド) の名前に使用されます。」

3) キャメルケース – 各単語の最初の文字が大文字であることを除き、すべての単語は小文字で書かれます。例えば:

「グリーンハウス」が「グリーンハウス」 に 

「ハリウッドガール」は「ハリウッドガール」 になります

このスタイルは、クラスとインターフェイスの名前に使用されます。

4) Lower CamelCase (大文字と小文字混合)  – すべての単語は小文字を使用して書かれますが、各単語の最初の文字は大文字になります。例えば:

「幅の取得」は「getWidth」になります

「ハリウッドの女の子の名前を取得」は「getHollywoodGirlName」になります 

「このスタイルは変数とメソッドの名前に使用されます。」

「だから、ルールはそんなに多くないんです。」

1) すべては Lower CamelCase で記述されます。

2) クラスとインターフェイスの名前は常に大文字で表記されます。

3) パッケージ名は常に小文字です。

4) 定数は常に大文字です。

「いくつかのニュアンスはありますが、一般的にはそういうことです。」

「次はメソッドについてです。  」メソッド名はほとんどの場合動詞で始まります。「count」はメソッドの名前としては不適切です。getCount() と呼ぶ方がよいでしょう。メソッドはオブジェクトに対して何らかのアクションを実行します:  startDownloadinterrupt  、sleep  、loadPirateMusic

「すでにご存知のとおり、オブジェクトのプロパティ/フィールドを操作するためのゲッターとセッターがあります:  getName / setNamegetCount / setCountなど。」

「唯一の例外はブール値です。ブール値の場合、ゲッター名は、isDone、isEmpty のように、'get' ではなく 'is' を使用します。この方法では、通常の音声に近づきます。」

「1日8時間働く代わりに2時間働くのはどうですか?誘惑に駆られますか?」

"はい!"

「当然のことです。ジュニア Java 開発者にとって、基本的な要件は Java の基本、つまり Java Core について十分に理解していることです。」

「別の質問があります。要素の数を取得するためにこれらの異なる方法があるのはなぜですか?」

クラス 要素数を取得するメソッド/プロパティ
長さ()
配列 長さ
配列リスト サイズ()
スレッドグループ アクティブな()

「まず第一に、Java は 20 年以上前に発明され、setCount / getCountなどの要件が確立される前に、『可能な限り短くする』という C 言語から取られた共通のアプローチがありました。」

「第二に、ここではセマンティクスが重要な役割を果たします。配列について話すときは、その長さについて話します。コレクションについて話すときは、そのサイズについて話します。」

「なんと興味深い授業でしょう。」

「もっとお話したいのですが、一度では覚えられないと思います。少しずつお出ししたほうがいいですよ。」

「ただし、中括弧 {} の使用に関するスタイルについて触れておきたいと思います。アプローチは 2 つあります。」

1) 括弧は毎回改行されます

2) 開き括弧は前の行の末尾に配置され、閉じ括弧は新しい行に配置されます。このスタイルは「エジプト式矯正」と呼ばれます。

「正直に言うと、コーディング方法は自分で選ぶことができます。多くの人は同じ行に左中括弧を使用します。多くの人は新しい行に置きます。これは、卵のどちらの端を割るか、小さな端か大きな端かについての議論のようなものです。終わり。"

「私がお勧めできる唯一のことは、取り組んでいるプロジェクトで使用されているスタイルに固執することです。自分の好みのスタイルに合わせて他人のコードを変更しないでください。 人は不完全です。私はビラーボ医師としてこれをお伝えします。」

「興味深い授業をありがとう、ビラーボ。あなたの言ったことをもう一度考えてみます。」