[2022-11-04 更新] .NET Interactive 的 VSCode 擴充套件已更名為 Polyglot Notebooks,但 .NET Interactive Engine 及 API 維持原名,由於支援語言已不拘限於 .NET,所微軟把它改成聽起來比較威的 Ployglot (意指精通多種語言) 😄 參考:.NET Interactive Notebooks is now Polyglot Notebooks!

上週介紹了 好用的 Jupyter Notebook 可以邊寫筆記邊測 Python 程式,但我很快發現 VSCode 才是最棒的 Jupyter Notebook 編輯軟體。研究 Jupyter 時得知微軟也做了類似的嘗試,包含可以內嵌網頁中跑 C# 程式的 Try .NET,以及在 VSCode 裡編輯 Jupyter Notebook .ipynb 檔案並測試 C# 程式的 .NET Interactive,這篇就來玩玩 .NET Interactive。

.NET Interactive 目前仍在 Preview 階段,不算正式產品。除了 C#,.NET Interactive 還支援 F#、PowerShell、JavaScript、HTML、Mermaid、SQL/KQL 等語言,至於 Python、Julia、R 則在努力中。

先確電腦已裝好 VSCode 及 .NET 6 SDK,下載 .NET Interactive Polyglot Notebooks VSCode 套件 :(註:2022-11-03 起更名為 Polyglot Notebooks)

按 Ctrl-Shift-P 輸入 .NET Interactive 可查詢可用指令,先試試 Interactive Window:

互動視窗的操作概念很簡單,下方寫程式,按左側的箭頭鈕執行,結果會顯示在上方:

由於每次執行要重新編譯 .cs,流暢度不如 JavaScript、PowerShell、Python 等直譯式語言。

新增筆記本時可選 .dib、.ipynb 格式以及預設語言:

註:VSCode 己安裝 Jupyter,編輯 .ipynb 時預設會跑 Python,點選右側現有 Kernel 可切換:

同一份文件可以夾雜多種語言,先來個 C#、跑個 PowerShell,最後來一段 HTML + JavaScript:

這樣我們就能用 Jupyter Notebook 邊測 C#、PowerShell、HTML、JavaScript 邊寫筆記囉~

後記:有讀者問到 SQL。.NET Interactive 支援 MSSQL 及 Azure SQL,詳細做法可參考這篇 .NET Interactive with SQL!| .NET Notebooks in Visual Studio Code
但我一時沒想到用它整 SQL 的情境,SSMS 功能及介面完整許多,如果要測試或探索 SQL,我應該還是會以 SSMS 為主。

Introduction to .NET Interactive, the interface to write Jupyter Notebook with C# and PowerShell playground.


Comments

# by ChrisTorng

有看過說這很適合寫技術文件,有示範程式碼也可以執行看結果,可以自己隨便改內容來測試。以後要留技術文件給接手的人,或交給配合單位介接 API 的技術說明,寫這個就對了。我也用這方法講技術課程,其他人可以下載後自己玩。SSMS 功能強,但 Notebook 可以留下所有測試過程及觀察紀錄,是寶貴的資產。

# by ChrisTorng

.ipynb 檔的內容是 JSON,只能靠工具修改。好像是微軟自己開發的另一個 .dib 檔格式完全用 MarkDown,可以手寫,簡單明瞭,覺得會是更好的格式,推薦一試! 查到一篇 https://github.com/dotnet/interactive/issues/467

# by Jeffrey

to ChrisTorng,若要測試 SQL,前置作業要將資料庫切換到一致的初始狀態,每次執行的結果才會一致,用 PowerShell 來處理感覺是不錯的點子。.dib 用 Markdown 取代 JSON,我也覺得是個好點子。

# by Dxball

.NET Interactive Notebooks 套件改名字成 Polyglot Notebooks 了 🤣 https://marketplace.visualstudio.com/items?itemName=ms-dotnettools.dotnet-interactive-vscode

# by Jeffrey

to Dxball, 感謝通報,已更新於內文。

Post a comment


32 - 17 =