0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

リファクタリング(関数の抽出)

Last updated at Posted at 2024-10-13

背景

リファクタリングする機会があり、本「リファクタリング: 既存のコードを安全に改善する」を閲覧しながら行なった。
実際のコードで行うのは初心者にとってはなかなか難しい内容だったため、備忘録として整理しておきたい。

目的

関数の抽出、で行なったことを振り返り、
他の場所でもリファクタリングができるようにする。

3パターンの違い

1. メソッドとして抽出したいコード群にローカル変数が含まれてい"ない"場合

単純で下記の3ステップで終了する。

  1. 関数名を記載
  2. メソッドとして抽出したいコード群をコピー&ペースト
  3. 元のコード群をメソッド名に置き換え

2. メソッドとして抽出したいコード群にローカル変数が含まれて"いる"場合

上記に、引数としてローカル変数を渡す。

3. ソッドとして抽出したいコード群にローカル変数が含まれていて、かつ値を代入している場合(具体的なコード例あり)

手順としては下記になる。具体的にコード例で見ていく。

  1. ローカル変数の定義をメソッドとして抽出したいコード群の近くに移動する。
  2. 関数を作成
  3. 呼び出し元を変更
// リファクタリング前

let a = 1;
let b = 2;

a = b + 1; //これをメソッドにしたい

console.log(a);
// 手順 1 宣言を移動

let b = 2;

let a = 1; //宣言を移動
a = b + 1; 

console.log(a);
// 手順 2 関数を作成

let b = 2;

let a = 1;
a = b + 1; 

console.log(a);

// 関数を作成
function bPlusOne(b){
    a = 1;
    a = b + 1;
    return a;
}
// 手順 3 呼び出し元を変更

let b = 2;

let a = bPlusOne(b); //呼び出し元を関数の呼び出しに置き換える

console.log(a);

function bPlusOne(b){
    a = 1;
    a = b + 1;
    return a;
}

学び

最初は単純そうに見えていた関数の抽出も、ローカル変数を使用しているか?再代入しているか?で難しく見えた。実際のコードに適用したときはさらに難しかったため、整理しながら理解していきたい。

レコードのカプセル化も、実施したため備忘録のため残す予定。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?