トリプルコード関数


タスクから整理した内容をブログに移動したので、タスクから見ると便利です。🤗


移動→Junkk's Notion


関数を読みやすく理解する方法.意図を明確に表現する関数を実現する方法.1つのプロパティで、初めて読む人がプログラムの内部を直感的に理解できるようにします.

小さくしろ!


関数は小さいほど良いです.

  • ブロックとインデント
    if文/else文/hile文などのブロックは1行でなければなりません.
    →外部を囲む関数(encluded function)が小さくなり、ブロックに呼び出した関数を適切に命名すれば、コードがより理解しやすくなる.
  • 一つだけやろう!


    関数は一つのことをしなければなりません.そのことをうまくやらなければならない.それしかできない.

  • 指定した関数名の下で抽象レベルが1のステップのみを実行する場合、その関数は1つの操作のみを実行します.

  • 単純な他の表現ではなく意味のある名前で他の関数を抽出できる場合、この関数は複数の操作を実行します.

  • 関数の一部
    1つの仕事をする関数だけでは自然に部分的に分けるのは難しい.
  • 各関数の抽象レベルは1つです!


    関数に1つの操作しかないことを確認するには、関数内のすべての文の抽象レベルが同じである必要があります.
    1つの関数に抽象レベルをブレンドすると、コードを読む人が混同されます.
    ♦特定の表現が根本的な概念なのか細部なのかを区別するのが難しい

  • コードを上から下へ読み込む:降格規則
    コードは上から下まで物語のように読むべきだ.
    →降下ルール:上から下へプログラムを読み,関数抽象化の程度を一度に1レベル下げる.
  • スイッチドア

  • スイッチドアは小さくしにくいです.
  • しかし,多形性を用いて各スイッチングゲートを低次元クラスに隠し,重複しない方法を用いる.
    →switchゲートを抽象工場に隠す.
    例)Employee and Factory(p 48-49)
    ファクトリはswitc文を使用して適切なemployee派生クラスインスタンスを作成します.
    CalculatePay、isPayday、DeliverPayなどの関数は、Employeeインタフェースに接続して呼び出されます.
    ◇多形性のため、実際の派生クラスの関数実行
  • 著者らは、マルチフォームオブジェクトを生成するコードにのみスイッチ文を使用する.継承関係として非表示にする他のコードX
  • に暴露する.

    叙述的な名前を使う!


  • 長くて叙述的な名前は短くて難しい名前よりいいです.

  • 関数に名前を付けるときは、複数の単語が読みやすい名前付け方法を使用し、複数の単語を使用して機能をよりよく表現できる名前を選択します.

  • 一貫性を持たなければならない.
    →モジュール内の関数名は同じ文、名詞、動詞を使う
  • 関数パラメータ


    関数における理想的な引数=0個(無項)(1個(単項)→2個(二項)→3個(三項)→4個以上(複数)
  • 関数パラメータに変換するのではなく、インスタンス変数(3-7 StringBuffer)
  • として宣言
  • 試験の観点から、因数がなければ簡単な
  • 輸出買収は輸入買収よりも理解しにくい
  • 誰も引き継いでいないほうがいいです.車線は入力因数が1の場合です.

  • 一般的な単一フォーマット

  • なぜ関数に引数を渡すのか
  • の買収に問題が発生した場合、exeブールファイルExist(「MyFile」
  • )
  • パラメータを値に変換して結果を返すと、ex InpuStream FileOpen(「MyFile」):Stringファイル名をInpuStreamに変換

  • イベント(少ないが役に立つ単一関数フォーマット)
    →入力パラメータのみ
    そうでない場合は、関数の使用は避けてください.

  • フラグパラメータ
    フラグパラメータXの使用

  • にこうかんすう
    Point p=new Point(0,0)などを除き、なるべく避けます.

  • さんこうかんすう
    一般的には、X→パラメータを使う順番を人為的に覚えなければなりません.

  • 引数オブジェクト
    オブジェクトを作成することでパラメータを減らします.

  • 引数リスト
    パラメータ可変が必要な関数
    ex) String.Fomat
    実はこの関数です!public String format(String format, Object... args)

  • 動詞とキーワード
    関数の意図やパラメータの順序や意図を正しく表現するには、良い関数名が必要です.

  • 単項関数-関数とパラメータは動詞/名詞対exのwriteField(name)

  • 関数名にキーワードを追加します.すなわち、関数名に引数名を入れる
    ex) assertExpectedEqualsActual(expected, actual)
  • 付随効果は発生しないでください。


    負の効果→時間の欠陥、順序の従属関係を招きます

  • パワーファクタ
    我々は通常,引数を関数入力として解釈する.
    一般的に出力パラメータを避けること.関数でステータスを変更する必要がある場合は、関数が属するオブジェクトのステータスを変更する方法を選択する必要があります.
  • オブジェクト向け言語出力パラメータとして
  • を使用

    コマンドとクエリーを分けて!


    関数は、特定のアクションを実行するか(=オブジェクトのステータスを変更する)、または特定のアクションに応答するか(=オブジェクト情報を返します).二者択一!

    エラーコードではなく例外を使用します。


    コマンド関数がエラーコードを返す方法は、コマンド/クエリー分離規則に違反します.
    ◆エラーコードではなく例外を使用すると、エラー処理コードが元のコードから分離され、コードがきれいになります.

  • Try/Catchブロックの取り出し
    try/catchブロックはコード構造を混乱させるため、個別の関数として抽出する必要があります.
    →正常動作とエラー処理動作を分けると、コードの理解と修正が容易になります.

  • エラー処理も仕事です
    エラーを処理する関数はエラーのみを処理します

  • Error.JAva依存磁石
    エラーコードを返す=どこかでエラーコードを定義
  • 依存磁石
  •         public enum Error {
            OK,
            INVAILD,
            NO_SUCH,
            LOCKED,
            OUT_OF_RESOURCES,
            WAITING_FOR_EVENT;
            }
            
    오류 코드 대신 예외 사용 → 재컴파일/재배치 없이도 새 예외 클래스 추가 가능

    繰り返さないで!


    重複除外の努力
    ex)リレーショナル・データベースに通常型を作成し、データの重複を排除する
    ex)オブジェクト向けプログラミングはコードを親と見なし,繰り返す必要はない.
    ex)構造化プログラミング、AOP、COP等

    構造化プログラミング

  • goto無効ドア
  • 関数はどう書きますか。

  • 下書き
  • 個のテストケース
  • を作成
  • コードを整理し、関数を作成し、名前を変更し、データの削除を繰り返し、方法を減らし、順序を変更する
  • n/a.結論


    →第四章注記