インライン化
インラインリファクタリングでは、関数または変数の抽出リファクタリングを元に戻すことができます。
インライン化するコードフラグメントにキャレットを配置します。
Ctrl+Alt+N を押す。 または、コードフラグメントを右クリックし、 メニューから必要なインラインリファクタリングを選択します。
インライン化 ダイアログで、オプションを指定します。
(オプション)変更をプレビューするには、 プレビュー を選択します。
プレビューと変更の適用
現在、PyCharm では、 関数のインライン化リファクタリングが提供されています。これは 関数の抽出 リファクタリングの反対です。
変数のインライン化
変数のインライン化リファクタリングは、冗長な変数の使用をイニシャライザーに置き換えます。
変数は宣言時に初期化する必要があります。 初期値がコードのどこかで変更された場合、変更前の出現箇所のみがインライン化されます。
前 | 後 |
|---|---|
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 は、以下のカテゴリのメソッドや関数に対するインラインリファクタリングをサポートしていません:
デコレータとして使われる関数
参照として使用される機能
引数を使用して関数を展開する
ジェネレーター
非同期関数
コンストラクター呼び出し
ビルトイン関数
デコレータを使った機能
再帰関数
* 引数を持つ関数
オーバーライドされた機能
グローバル変数を持つ関数
非局所変数を持つ関数
別の関数宣言を持つ関数
制御フローを中断する機能
これらの関数またはメソッドのいずれかに対してリファクタリングを実行しようとすると、警告メッセージが表示されます。