Interaktivní okno C# REPL

Určitě to znáte – potřebujete rychle otestovat algoritmus, zjistit, co vrací kus kódu, nebo třeba zavolat webovou službu. Pokud vám nic neříká akronym REPL (Read-Eval-Print Loop), tak byste pravděpodobně založili nový projekt ConsoleApplication549 a kód napsali do něj. V případě, že REPL znáte, nejspíš byste spustili nástroj typu CShell a algoritmus nacvakali v něm. Visual Studio 2015 vám spolu s Update 1 přináší možnost, jak se tomu vyhnout a psát interaktivní C# kód přímo v něm – C# Interactive Window.

Jak název napovídá, nástroj se otvírá jako další panel ve VS. Najdete ho zastrčnený v menu View –> Other Windows –> C# Interactive.

image

Potom už můžete začít sepisovat kód. Jakmile zmáčknete Enter, REPL vyhodnotí, jestli jste napsali něco, co má spustit, a podle toho buď ukáže výsledek, nebo přidá nový řádek.

image image

Okénko pohání Roslyn, takže podporuje obarvování syntaxe a má v sobě i IntelliSense:

image

Jakmile založím v aktuálním kontextu funkci, mohu ji hned využít:

image image

Zajímavé je, co se stane, když na konec přidám středník. REPL vyhodnotí řádek jako statement, nikoliv výraz, a nezobrazí nic. Abych se k výsledku dostal, musel bych jej přiřadit do proměnné (která by se automaticky zařadila do kontextu).

image

Můžu zkusit pár dalších věcí a jakmile jsem s pokusy hotový, vyčistím si obrazovku příkazem #clear:

image

Nyní bych stále mohl používat proměnné i funkce (resp. metody, jsme pořád v C#), které jsem definoval dříve. Příkazem #reset proto vyčistím i paměť.

image

REPL je sice C#, ale funguje podle obecných principů těchto nástrojů. Kód leží v kontextu, který je na nejvyšší úrovni a není součástí žádného namespace. Pokud byste chtěli použít příkazy z konkrétního jmenného prostoru, můžete použít klasický using. Kupříkladu Regex je součástí System.Text.RegularExpressions, proto mi REPL dává známou žárovkou najevo, že ho můžu přidat.

image

Jakmile nabídku potvrdím, kód v okně se sám upraví:

image

Podpora pro NuGet zatím chybí (chystá se), ale úplně ztraceni nejste. Direktiva #r dovoluje referencovat DLL, takže jednoduše vezmete knihovnu staženou z NuGetu a odkážete na její soubor:

image

A protože světu dnes vládne asynchronicita, umí REPL i await:

image

Command Line

Za zmínku také stojí možnost spustit REPL v příkazové řádce, tedy mimo Visual Studio. Stačí otevřít Developer Command Prompt for VS2015 a spustit csi.

image

Pak máte stejné možnosti jako ve Visual Studiu. Jenom chybí IntelliSense a barvičky.

image

Skriptování

Kód můžete také připravit v textovém editoru a uložit jej do souboru CSX (případně do textového souboru s jakoukoliv příponou, ale CSX alespoň říká, co v něm je). Potom jej pomocí direktivy #load spustíte v okně REPL. Kromě toho, že uvidíte výsledky, zůstanou v kontextu také všechny metody a proměnné, které jste ve skriptu definovali. Program csi přijímá také jako parametr cestu k souboru CSX.

Kam dál?

Tento stručný úvod zdaleka nepokrývá kompletně, jak se s C# Interactive Window pracuje. Další informace najdete na těchto odkazech.

Martin