メソッドの抽出
メソッドの抽出リファクタリングを使用すると、グループ化できるコードフラグメントを取得し、別のメソッドに移動して、古いコードをメソッドの呼び出しに置き換えることができます。
メソッドを抽出する際には、変数を確認する必要があります。出力変数が 1 つしかない場合、抽出されたメソッドの戻り値として使用されます。出力変数が複数ある場合、メソッドの抽出リファクタリングが適用されず、エラーメッセージが表示されることがあります。
この場合、メソッドの抽出を動作させるためのいくつかの回避策があります。例: すべての出力値を含む特別な data-class を導入することができます。
メソッドを抽出する
エディターで、メソッドまたは関数に変換するコードブロックを選択します。
メインメニューから「」を選択するか、「Ctrl+Alt+M」を押します。または、コンテキストメニューから「」を選択します。
表示されるメソッドの抽出ダイアログで、新しい機能の名前を指定します。
パラメーター領域で、次の操作を行います。
対応するチェックボックスをオンまたはオフにして、メソッドパラメーターとして渡される変数を指定します。
必要なパラメーターの名前を変更し、対応するパラメーター行を double-clicking で変更し、新しい名前を入力します。
シグネチャープレビューペインで結果を確認し、OK をクリックして必要な機能を作成します。
選択されたコードフラグメントは関数呼び出しに置き換えられます。
サンプル

前 | 後 |
|---|---|
from enum import Enum
class Category(Enum):
A = 1
B = 2
C = 3
def calculate_tax(category, income):
if category == Category.A:
discount = 10
elif category == Category.B:
discount = 5
else:
discount = 0
return income * (100 - discount) / 100
|
from enum import Enum
class Category(Enum):
A = 1
B = 2
C = 3
def calculate_tax(category, income):
discount = calc_discount(category)
return income * (100 - discount) / 100
def calc_discount(category):
if category == Category.A:
discount = 10
elif category == Category.B:
discount = 5
else:
discount = 0
return discount
|
重複の処理
重複するコードフラグメントが見つかった場合、PyCharm はそれらを抽出されたメソッドの呼び出しに置き換えることを提案します。
関連ページ:
インライン化
インライン化リファクタリングでは、メソッドまたは変数の導入リファクタリングを元に戻すことができます。インライン化するコードフラグメントにキャレットを配置します。を押します。または、コードフラグメントを右クリックし、メニューから必要なインラインリファクタリングを選択します。インライン化ダイアログで、インライン化オプションを指定します。(オプション)変更をプレビューするには、プレビューを選択します。プレビューと変更の適用、現在、CLion は、メソッドの抽出リファクタリングの反対である関数のインライ...
重複を分析する
PyCharm を使用すると、特定の範囲内の反復コードブロックを見つけることができます。この範囲は、単一ファイル、プロジェクト、モジュール、カスタムスコープです。分析結果は直接エディターまたは重複ツールウィンドウの専用タブに表示されます。その場で重複を検出 PyCharm を使用すると、重複を即座に検出できます。分析は、エディター | インスペクション設定ページの一般ノードにある重複したコード箇所インスペクションによって実行されます。既存の複製に遭遇した場合、または何らかの方法でコードを作成また...
パラメーターの導入
パラメーターの導入リファクタリングは、関数宣言に新しいパラメーターを追加し、それに応じて関数呼び出しを更新するために使用されます。Python パラメーターを導入するエディターで、パラメーターに置き換えられる式内にキャレットを置きます。パラメーターを抽出するには、を押すか、メインメニューで選択します。または、コンテキストメニューからを選択します。現在のキャレット位置に複数の式が検出された場合は、式リストが表示されます。その場合は、式をクリックして選択します。または、Up および Down 矢印キー...
スーパークラスの抽出
スーパークラスの抽出リファクタリングを使用すると、既存のクラスのスーパークラスを作成できます。元のクラスのメンバーをスーパークラスに移動できます。メソッドの場合、スーパークラスでメソッドを抽象として宣言して、メソッド宣言のみを転送できますが、実装は転送できません。その結果、スーパークラスと、スーパークラスを継承する元のクラスが作成されます。スーパークラスを抽出するエディターのクラス内にキャレットを配置します。メインメニューからを選択するか、コンテキストメニューからを選択します。スーパークラスの抽...