C# PadはWebベースのC# REPL環境。ブラウザにブックマークしておけば、簡単にC#コードの動作を確認したり、シェアしたりといったことが可能だ。
C# Padは、WebベースのC# REPL環境。Web上でC#コードの動作を確認したり、ちょっとした計算をしたりするのに便利に使える。
C# PadはWebベースのREPL(対話型実行環境)であり、対話的にC#コードの入力、評価、結果の出力を行える。コードを入力してウィンドウ右下の[Go]ボタンをクリックすれば、入力(C# Padではこれを「サブミッション」と呼んでいる)が評価され、状況に応じてその結果が出力される。
Webページの上部と個々のウィンドウの下部にはボタンが幾つか用意されている。これらのボタンを使うと、新規ウィンドウの作成、ヘルプの表示、入力したコードの実行、コピー、保存、シェア用のリンクの取得、Webページにコードを埋め込むためのスニペットの取得、テーマの選択が行える。本稿でも幾つかの画像で、C# Padへのリンクを埋め込んでいく。
以下に単純な計算をしている例を示す。ここでは「1 + 1」と入力してから[Go]ボタンをクリックしている。コードの末尾にセミコロンがない点に注意されたい。
セミコロンを付けない場合、いわゆる「式」が入力されたものと解釈され、その式の評価結果が表示される。セミコロンがあれば、それは「文」が入力されたものとして評価され、その評価の過程で出力があれば、それがウィンドウにも出力される。どんな違いがあるかを試してみよう。まず、GetLengthメソッドを定義する。
「int GetLength(string s) => s.Length;」というコードを記述して(コードを実際に入力してみると分かるが、コード補完機能もある)、[Go]ボタンをクリックすると、GetLengthメソッドが定義される。実行されたコードはウィンドウ上部に行番号なしで表示される。また、このメソッドには後続の行からアクセス可能だ。そこで次のようにセミコロンなしで「GetLength("Hello")」と入力し、[Go]ボタンをクリックしてみよう。
すると、次のようにその評価結果がウィンドウに表示される。
同様にして今度はセミコロン付きで「GetLength("Hello");」を実行した結果を以下に示す。
こちらは、入力が文として評価されたため、コンソールへの出力が行われない(メソッドの戻り値は捨てられる)。もちろん、「Console.WriteLine(GetLength("Hello"));」のようにすれば、出力は行われるが、ちょっとした計算結果を得るためにいちいちConsole.WriteLineメソッド呼び出しでコードをラップするのは面倒だ。そこで、簡単な計算をしてその結果だけを知りたいといったときにはセミコロンなしで式として評価をしてもらうのがよいだろう。
なお、ウィンドウの内容(セッション)はある程度の時間が経過すると期限切れとなる。この場合には、[New Window]ボタンをクリックするなどして、新たにウィンドウ(セッション)を開くようにしよう。
上の例ではメソッドを定義しているが、もちろんクラスなど、より複雑なデータ構造も定義できる。以下に例を示す。ここではPointクラスとMyMethodメソッドを定義して、それらを利用している。
また、[Ctrl]+[Enter]キーでコードの実行([Go]ボタンのクリックと同様)、[Alt]+[↑]キー/[Alt]+[↓]キーでこれまでに入力したコード(サブミッション)の履歴を表示/選択できる。履歴は、実行した単位(サブミッション)で管理されているので、以前に入力したコードを修正するのも簡単だ。例えば、以下は[Alt]+[↑]キーを何度か押して、Pointクラスの定義を表示したところで、ToStringメソッドをオーバーライドしているところだ。
Pointクラスの定義を修正して[Go]ボタンをクリックすると、新しい定義で以前のクラスが書き換えられる(この場合はMyMethodメソッド呼び出しで、XプロパティとYプロパティの値が表示されるようになる)。
このように、C# Padを使うと、Visual StudioやcsiコマンドでC#インタラクティブあるいはLINQPadを起動することなく、ある程度のC#コードの動作確認が簡単に行える。ブックマークしておくと便利に使えるだろう。
WebベースでC#コードを試せる環境としては、本稿で取り上げたC# Pad以外にも、.NET Fiddleやpaiza.ioなどがある(REPL環境というよりは、より高度な機能を持つWebベースC#プログラミング環境と表現した方がよいところも多い)。自分のやりたいことや、好みに合ったものを探してみるとよいだろう。
Copyright© Digital Advantage Corp. All Rights Reserved.