きれいでモジュラーコードを書く方法🤩👨‍💻


“Any fool can write code that a computer can understand. Good programmers write code that humans can understand.” – Martin Fowler


私はこれらの線を言っていなかったので、犯罪はありません.😶

用語

  • クリーンコード:読みやすい、簡単で、簡潔なコード.クリーンな生産品質コードは、ソフトウェア開発における協調と保守性にとって重要である.

  • モジュラーコード:関数とモジュールに論理的に分割されたコード.我々のコードをより組織化して、効率的で再利用できるようにするモジュラー生産品質コード.

  • モジュール:ファイル.モジュールは、コードを他のファイルにインポートすることができるファイルにそれらをカプセル化することによって再利用されるのを許します.


  • クリーンコードの記述

    意味のある名前を使用します.
    説明文を暗示して、型を暗示してください:Booleansのために、それが条件であることを明らかにするために、我々はis_またはhas_で接頭辞をつけることができます.また、関数の動詞や変数の名詞を使用するように、音声の一部を使って型を暗示することもできます.age_listageagesageと区別するのがより簡単です.
    略語と単一の文字を避ける:我々はこれらの例外を我々のコードの視聴者に基づいて、それがカウンタと一般的な数学変数であるかどうかを決定することができます.
    長い名前は説明的な名前と同じではありません:我々は記述的でなければなりませんが、関連する情報だけでなければなりません.例えば、良い関数名は、実装や非常に特別な用途についての詳細を含めずにうまくいくことを説明します.

    適切に空白を使う.
    一貫したインデントを使用してコードを整理します.標準では、インデントごとに4つのスペースを使用します.我々はテキストエディタでこれをデフォルトにすることができます.
    私たちのコードをよく整理し、読みやすくするために空白の行と*別々のセクション.
    あなたがPythonでコーディングしているなら、PEP 8スタイルガイドで与えられたガイドラインであるおよそ79文字にあなたの線を制限しようとします.多くの良いテキストエディタでは、79文字の制限がどこにあるかを示す微妙な線を表示する設定があります.

    例えば、
    我々はタスクの数を実行し、その実行時間に基づいて、各タスクを分類するプログラムを書いている想像してください.以下は、このプログラムの小さな断片です.
    t = end_time - start  # compute execution time
    c = category(t)  # get category of task
    print('Task Duration: {} seconds, Category: {}'.format(t, c)
    
    どのように我々はこのコードをきれいに見えることができますか?
    次の命名の変更は、このコードをクリーンにすることができます.
  • startまで242479142に変更し、start_timeと一致させる.
  • は、それをより記述的にするために可変end_timetに名前を変えます.
  • は、スピーチの部分にマッチするために機能execution_timecategoryに名前を変えます.
  • は、それをより記述的にするために可変categorize_taskcに名前を変えます.
  • 変更後、コードは次のようになります.
    execution_time = end_time - start_time
    category = categorize_task(execution_time)
    print('Task Duration: {} seconds, Category: {}'.format(execution_time, category)
    

    モジュールコードの記述
    モジュールのコードを書くために以下のヒントに従ってください.
  • チップ:ドライ(あなた自身を繰り返さないでください)
    自分自身を繰り返すな!モジュール化により、コードの一部を再利用できます.関数またはループ内の反復コードを一般化し、統合します.
  • tip:読みやすさを改善するための抽象アウトロジック
    関数にコードを抽象化することは、それをより反復的にするだけでなく、記述的な関数名で読みやすさを改善します.私たちのコードは、論理を関数に抽象化するときにより読みやすくなることができますが、これをオーバーエンジニアすることが可能であり、あまりにも多くのモジュールを持っているので、我々は独自の判断を使用することができます.
  • tip :エンティティ数(関数、クラス、モジュールなど)を最小限にする
    インラインロジックの代わりに関数呼び出しを持つトレードオフがあります.もし私たちがあなたのコードを不必要な量の機能とモジュールに分割したならば、私たちがそれが価値があるためにあまりに小さい何かのために実装詳細を見ることを望むならば、我々は至る所で跳ねなければなりません.より多くのモジュールを作ることは、必ずしも効果的なモジュール化に終わりません.
  • tip :関数は一つのことを行うべきです
    我々が書く各々の機能は、1つのことをすることに集中しなければなりません.機能が複数のことをしているなら、一般化と再利用をより困難になる.一般に、あなたの関数名に“AND”があるなら、リファクタリングを考慮してください.
  • tip :ある変数名はある関数でより効果的である
    一般的な関数の任意の変数名は、実際にコードを読みやすくすることができます.
  • tip :関数ごとに3つ以上の引数を使用しようとします
    可能な場合には3つ以上の引数を使用しないようにしてください.これは難しい規則ではなく、多くのパラメータを使用することがより適切であるときがあります.しかし、多くの場合、より少ない引数を使うのはより効果的です.我々のコードを簡素化し、より効率的にするモジュール化を覚えておいてください.もし、私たちの関数がたくさんのパラメータを持っているなら、私たちは、どのようにこれを分割しているかを再考したいかもしれません.

  • 例えば、
    我々は、我々は3つの異なる方法でカーブテストスコアのリストがあります.私たちは、あまりにも難しかったテストをしたり、少し不公平だった質問を与えた教育者であると仮定します(私たちの大学の試験官が時々行うように).それで、我々は学生の得点を押し上げる方法を理解することに決めます.
    s = [88, 92, 79, 93, 85]
    print(sum(s)/len(s))
    
    s1 = []
    for x in s:
        s1.append(x + 5)
    
    print(sum(s1)/len(s1))
    
    s2 = []
    for x in s:
        s2.append(x + 10)
    
    print(sum(s2)/len(s2))
    
    s3 = []
    for x in s:
        s3.append(x ** 0.5 * 10)
    
    print(sum(s3)/len(s3))
    
    # difficult to understand and pretty repetitive
    
    最初の2つの方法については、それぞれのスコアとそれぞれのスコアに10ポイントに5ポイントのフラットカーブを追加します.第3の方法では,平方根曲線を適用し,各スコアの平方根を求め,10倍する.
    たった今、このコードが何であるかについて理解して、かなり繰り返しているように見えます.
    今、我々はコードを変更することができますヒントに従って
    import math
    import numpy as np
    
    def flat_curve(arr, n):
        return [i + n for i in arr]
    
    def square_root_curve(arr):
        return [math.sqrt(i) * 10 for i in arr]
    
    test_scores = [88, 92, 79, 93, 85]
    curved_5 = flat_curve(test_scores, 5)
    curved_10 = flat_curve(test_scores, 10)
    curved_sqrt = square_root_curve(test_scores)
    
    for score_list in test_scores, curved_5, curved_10, curved_sqrt:
        print(np.mean(score_list))
    
    # clean and modular
    
    これは、クリーンでモジュラーコードの例です.


    結論
    これらのヒントに従って、クリーンでモジュラーコードを記述します.
  • 意味のある名前を使用する
  • 適切に空白文字を使用する
  • ドライ(あなた自身を繰り返さないでください)
  • 読みやすさを改善する
  • 抽象アウトロジック
  • 実体(関数、クラス、モジュールなど)の数を最小化する
  • 機能は、1つのもの
  • をするべきです
  • 任意の変数名は、特定の機能
  • でより効果的でありえます
  • 関数
  • につき3つ未満の引数を使用しようとします

    読書ありがとう!
    お気軽にご提案ください.

    あなたは私と接続することができます