やりたい事
プログラムを書いていると時折
大量にある代入式の左辺と右辺を一括で置き換えたくなる時があります。
みなさんも思い当たる事あると思います。
例えば、とあるエンティティクラスの中身を、GUIに展開するとして、
ユーザーの操作を経て、GUIの値を、エンティティクラスに戻したい・・・
みたいな時。
(MVVMとかデータバインドとか使ってりゃ、大体解決するって話は置いといて)
前書きを長くかいてもしょうがない事なので、余談は後述するとして。
解決方法
Visual Studioには、「Ctrl+F」で呼び出せる検索・置き換え機能があり、そこで正規表現が使えます。
その正規表現を活用する事で、解決できる事が(今更)わかりました。
あの右上に出るやつです。
環境は以下の通りです。
Windows 10 Pro 64bit 21H1
Microsoft Visual Studio Community 2022
C#の場合
検索: \b(.*)(\s=\s)(.*)(;)
置換: $3$2$1$4
VisualBasicの場合
検索: \b(.*)(\s=\s)(.*)(?!\n)
置換: $3$2$1
これだけです。画像で示した正規表現を使うアイコンをクリックし、有効化した状態で
この魔法の呪文のようなものを入れると、左辺と右辺を置き換える事ができます。
複数行でも、しっかり置換が機能しますので、
間違っても、ソリューション全体に対し全て置換なんて事、やってはいけません。
用法用量を守って正しくお使いください。
正規表現で何をしているのか、解説を載せようと考えていましたが、僕自身が何書いてるかよくわかんねぇからやめときます。
ポイントとなるのは、使う言語で若干指定が異なる部分でしょうか。
C#の場合、末尾にセミコロンを入れるため、セミコロンまで適切に扱うように書かないと
なんか上手くいきませんでした。
VBの場合は、末尾というか、大抵の場合改行が入ってると思いますので、改行をあえて否定させる事で
改行を含まない形で、置換が出来るようになっています。
当然、コードの書き方によっては、うまくいかない場合もあるかと思うので、
各々で磨きに磨きかかったご自慢の正規表現スキルを発揮して頂ければと思います。
僕は今回改めて、正規表現超むずーいって思いました。
余談というか
この正規表現を使った置換アプローチ。
存在こそ知ってはいたのですが、実際に使った事は無かったため、
正規表現のおさらいも兼ねて、取り組んでみました。
もっと良い書き方や、方法論があれば是非コメント頂けるとありがたいです。
今思えば、長い開発人生において、僕は左辺右辺の置換は、ほぼ手打していました。
若いころは、少しでも効率よく記述したいとの思いから、Excel関数を駆使するだとか色々やってたんですが
僕自身キーボードの入力速度が割と早いので、いちいちExcel開いてコピペして関数書いてみたいなのが
最終的にはめんどくさくなり、気付いたらゴリゴリとゼロから打つようになってました。
コピペすらしないという。
今回取り組んでみたきっかけは、昔書いたアプリのコードが、大分レガシーな感じだった為
コードの見直しをしてた折に、大量の代入式左辺右辺の置換を行いたくなったのがきっかけでした。
というか、左辺右辺の置換って、絶対に需要あると思うんだよなぁ。
MSはショートカットキーとかで実装してくれないものだろうか。
僕が知らないだけで、実は拡張機能とかであったりして・・・。
この記事がみなさんの役に立てば幸いです。