こんにちは。バッヂーです。
以前「対話型実行環境」について記事を書きました。
-
対話型実行環境って大事
こんにちは。バッヂーです。 本記事は「プログラミング言語の入門書を1冊終えて、ぼんやりと自分の作りたいものを作り始めた人」に役立つかもしれない記事です。 プログラミングは対話型実行環境を活用すると捗る ...
続きを見る
そのときに「C#にも『C#インタラクティブ』というものがあるらしい」と書きました。
はい、それまで「C#インタラクティブ」の存在を知らなかったんです。それでもなんとかプログラミングができているもんですから、この世界は上から下まで層が豊富ですねぇ。私はもちろん下のほうです。APEXの成績と同じです。
とはいえ。「知ったからには使ってみよう」ということで、あれからちょいちょい使っておりました。
やっぱり便利、使わないとソン
ちょっと動作を試したりするときにやっぱり便利でした。
- 各種メソッドの動作を確認することができる。
- 正規表現があってるかどうか確認できる。
- 自作クラスの動作を確認できる。
これらのことがビルドしなくても試すことができるので、開発の効率アップとエラー抑制にとても効きます。ひいては動作確認用のムダなフォームや、コンソールアプリを作成しなくても良くなります(もちろん試す規模によっては作ったほうが便利な場合がありますが、それはケース・バイ・ケースで)。
プログラミング初心者さんには絶対オススメです。
使用例を見ていきましょう
私が「C#インタラクティブ」をよく使っているシーンの使用例を以下に紹介していきます。
C#インタラクティブを開く方法
なにはともあれ「C#インタラクティブ」を使えるようにしなければなりません。VisualStudioの「表示」>「その他のウィンドウ」>「C#インタラクティブ」で開きます。
Substringメソッドを試す
String.Substringの動作を確認するときなど、各種メソッドの動作確認に使ってます。
> string val = "敵がいた。しょぼそうだ。";
> val.Substring(val.Length - 7, 7)
"しょぼそうだ。"
>
C#にはLeftやRightがないのでSubstringを駆使することになります。そのとき、特にRightと同じ動きを再現するときにちょいちょい間違えます。
ちょっと試して動作を確認することができるので、デバッグの時間を大きく減らしてくれることになります。
正規表現を試す
覚えが悪いアラフィフおいさんには正規表現のパターンの書き方を覚えておくのは無理ゲーです。なので正規表現のパターンがあってるかのチェックができるのはとてもありがたいです。
> regex.ismatch("これはすごい。私がジャンプマスターだ", ".*ジャンプマスター.*")
(1,1): error CS0103: 現在のコンテキストに 'regex' という名前は存在しません。
> using System.Text.RegularExpressions;
> Regex.IsMatch("これはすごい。私がジャンプマスターだ", ".*ジャンプマスター.*")
true
>
2行目でエラーがでております。名前空間の指定をしてないためですね。
3行目でusingディレクティブで名前空間を指定しています。実行結果からRegex.IsMatchが正しく動作していることが確認できました。
上の例はIsMatchですが、Matchesなど毎度使い方を忘れて毎度エラーをだしてました。「C#インタラクティブ」を使うようになってからずいぶん効率があがりました。
忘れておりました。「C#インタラクティブ」ではもちろんインテリセンスが効きます。
いやいやいや、便利すぎる。
長いクラスをコピペしても大丈夫っぽい
結構長めのクラスをコピペしても大丈夫な感じです。
class TokyoCity
{
private List Cities = new List();
public TokyoCity()
{
//市区町村リストを作成
MakeCitiesList();
}
//検索文言の一部を含む市区町村を出力する
public void GetAndOutputCitiesContains(string searchWord)
{
var items = Cities.Where(x => x.Contains(searchWord));
foreach(var item in items)
{
Console.WriteLine(item);
}
Console.WriteLine($"{items.Count()}件合致しました。");
}
private void MakeCitiesList()
{
Cities.Add("東京都千代田区飯田橋");
Cities.Add("東京都千代田区一番町");
Cities.Add("東京都千代田区岩本町");
Cities.Add("東京都千代田区内神田");
Cities.Add("東京都千代田区内幸町");
(中略)
Cities.Add("東京都小笠原村父島");
Cities.Add("東京都小笠原村母島");
}
}
上記のクラスは4000行くらいあります。指定した文言を含む東京都の住所を表示するメソッドを持っています。リストの作り方が力技な感じですね。
「C#インタラクティブ」にコピペしてENTERすると3~4秒ほど待ちますが、クラスが使えるようになります。
> TokyoCity tokyoCity = new TokyoCity();
> tokyoCity.GetAndOutputCitiesContains("大島町")
東京都大島町岡田
東京都大島町差木地
東京都大島町泉津
東京都大島町野増
東京都大島町波浮港
東京都大島町元町
6件合致しました。
>
「C#インタラクティブ」を使っているうちに、「自作のクラスのファイルを読み込んで使えればいいのに。どうやってやるんだろう」と思っておりました。調べてみたのですが、わかりません(注:わからないのは自分だけなのかもしれません。ご存じの方は教えて下さい)。
「コピペしたら使えるんじゃないか?」と思ってやってみたらできた次第です。「C#インタラクティブ」でできることがかなり拡がりました。
実行環境をリセットする。画面をクリアする。
「C#インタラクティブ」の実行環境は任意のタイミングでリセットできます。
> string octane = "誰か見えたぞ クッキー売りじゃなさそうだ";
> octane
"誰か見えたぞ クッキー売りじゃなさそうだ"
> #reset
実行エンジンをリセットしています。
'CSharpInteractive.rsp' からコンテキストを読み込んでいます。
> octane
(1,1): error CS0103: 現在のコンテキストに 'octane' という名前は存在しません。
>
リセットすることによって変数octaneがリセットされることになりますので、エラーが表示されます。このように実行環境をキレイにすることができます。
他によく使うボタン(とキーボード操作)は上の通りです。
まとめ
「C#インタラクティブ」は使っているうちに便利すぎて、今ではなくてはならないものになりました。もっと早くに知っていればよかったです。Null許容値型の判定テストや、Datetime型のToString("yyyy/MM/dd")も事前に試すことができます。ムダにコンパイル→エラーでうんざりすることが減りました。
「動作確認用のダミーフォームや、コンソールアプリを作らなくて良くなった」というのもうれしいです。後から見てなんだかわからないプロジェクトフォルダを、PCに散乱しなくてすみます。
「C#インタラクティブ」を使って、プログラミングの効率アップをしましょう! 特に初心者さんには絶対オススメです!