LoginSignup
8
9

More than 5 years have passed since last update.

正規表現で定型的なコンストラクタをすぐに書く方法

Last updated at Posted at 2014-07-09

最初に

budougumi0617さんがコメントで教えてくださった方法のほうが明らかに早いので、そちらを使うことをお勧めします。

ここから下はコメントで教えていただく前に私が書いた内容。

正規表現を使えば定型的なコンストラクタをあっというまに作成することができます。
さらに、フィールドの宣言も作成することができます。

Userクラスに次のコンストラクタを定義するとします。

User(String name, int tel, String email, String department) {
}

上のコンストラクタの中でthis.name = name;という具合にフィールドに値を詰めていく

User(String name, int tel, String email, String department) {
    this.name = name;
    this.tel = tel;
    this.email = email;
    this.department = department;
}

というコンストラクタにしたい、けれども

  • 引数が多すぎる(引数が多すぎるのはたいていオブジェクト指向的じゃないコードになっていることが原因なので根本的に解決したほうがいいですが・・・・)
  • 単にめんどくさい

といった理由で手動で書きたくないときは、正規表現で書くことができます。

this.name = name;を自動で作る

コンストラクタの引数

String name, int tel, String email, String department


(^|, )([^ ]*) ([^( |,)]*)\nthis\.\3 = \3;に置換すると

this.name = name;
this.tel = tel;
this.email = email;
this.department = department;

となります。これをコンストラクタ内に書けばフィールドに代入するコードが一発でできあがります。

private String name;とフィールドも新規に定義してthis.name = name;も作る

先ほどの正規表現のうち、置換先を\nthis\.\3 = \3;\nprivate \2 \3;とすると

this.name = name;
private String name;
this.tel = tel;
private int tel;
this.email = email;
private String email;
this.department = department;
private String department;

となります。
あとは、これを、テキストエディタの機能で行単位でソートすると、(Windowsのサクラエディタなら全選択して Alt + a。ほかにはSublime Text やAtomで同じくソートの機能を使えた気がします)

private String department;
private String email;
private String name;
private int tel;
this.department = department;
this.email = email;
this.name = name;
this.tel = tel;

上半分がフィールド、下半分がコンストラクタの中でフィールドへの代入を行うコードになりました。
あとはこれをコピペすれば使えます。
仮引数の順序と、フィールドやthis.foo = fooの順序とが、一致していないのは、許してください。

これくらいIDEでうまくやる方法がありそうだと思ったのですが、なさそうだったので、正規表現でやりました。

8
9
2

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
8
9