インライン化
インライン化リファクタリングでは、メソッドまたは変数の導入リファクタリングを元に戻すことができます。
インライン化するコードフラグメントにキャレットを配置します。
Ctrl+Alt+N を押します。または、コードフラグメントを右クリックして、
メニューに移動します。必要なインラインリファクタリングを選択します。インライン化ダイアログで、インライン化オプションを指定します。
プレビューと変更の適用
変数のインライン化
変数のインライン化リファクタリングは、冗長な変数の使用をイニシャライザーに置き換えます。
変数は宣言時に初期化する必要があります。初期値がコードのどこかで変更された場合、変更前の出現箇所のみがインライン化されます。
前 | 後 |
---|---|
import math
class Solver:
def demo(self):
a = 3
b = 25
c = 46
# This variable will be inlined
return_type_of_sqrt = math.sqrt(b ** 2 - 4 * a * c)
root1 = (-b + return_type_of_sqrt) / (2 * a)
root2 = (-b - return_type_of_sqrt) / (2 * a)
print(root1, root2)
Solver().demo()
|
import math
class Solver:
def demo(self):
a = 3
b = 25
c = 46
# This variable will be inlined
root1 = (-b + math.sqrt(b ** 2 - 4 * a * c)) / (2 * a)
root2 = (-b - math.sqrt(b ** 2 - 4 * a * c)) / (2 * a)
print(root1, root2)
Solver().demo()
|
インラインメソッドまたはインライン関数
メソッドのインライン化は、メソッドの本体をその呼び出し元の本体に配置します。メソッドまたは関数のインラインリファクタリングを開始すると、PyCharm はリファクタリング後にメソッド宣言を削除するかそのままにするかを選択するように要求します。選択に応じて、リファクタリングの結果は異なります。
前 | 後 |
---|---|
def say_state(self):
print_state(self)
def print_state(self):
print("I'm going {} kph!".format(self.speed))
|
def say_state(self):
print("I'm going {} kph!".format(self.speed))
|
前 | 後 |
---|---|
def say_state(self):
print_state(self)
def print_state(self):
print("I'm going {} kph!".format(self.speed))
|
def say_state(self):
print("I'm going {} kph!".format(self.speed))
def print_state(self):
print("I'm going {} kph!".format(self.speed))
|
PyCharm がいくつかのメソッドや関数のインライン展開を発見すると、リファクタリングプレビューが可能になります。インライン化リファクタリングダイアログのプレビューボタンをクリックして発生を評価します。

インライン展開を完了するには、リファクタリング実行ボタンをクリックしてください。
特定の呼び出しをインライン化するには、キャレットをその位置に置き、Ctrl+Alt+N を押して、インライン化リファクタリングダイアログでこの呼び出しのみを使用して宣言を維持しますオプションを選択します。
リファクタリングの制限
PyCharm は、以下のカテゴリのメソッドと関数のインラインリファクタリングをサポートしません。
デコレータとして使われる関数
参照として使用される機能
引数を使用して関数を展開する
ジェネレーター
非同期関数
コンストラクター呼び出し
ビルトイン関数
デコレータを使った機能
再帰関数
* 引数を持つ関数
オーバーライドされた機能
グローバル変数を持つ関数
非局所変数を持つ関数
別の関数宣言を持つ関数
制御フローを中断する機能
これらの関数またはメソッドのいずれかに対してリファクタリングを実行しようとすると、警告メッセージが表示されます。
