程式碼動作
當圖不夠用時,Code 方塊可以執行一段腳本。
共有七種語言可用,全部都在內嵌的 WebAssembly 沙箱中執行:您的機器上不需要 任何解譯器,腳本也無法存取您的檔案系統。
| 語言 | 引擎 |
|---|---|
| TypeScript | QuickJS(型別在編譯時被移除) |
| JavaScript | QuickJS |
| Python | Pyodide(編譯成 WebAssembly 的 CPython) |
| Lua | 以 WebAssembly 執行的 Lua 5.4 |
| Ruby | 以 WebAssembly 執行的 CRuby |
| R | WebR |
| C# | 以 WebAssembly 執行的 .NET,搭配 Roslyn |
預設語言是 TypeScript。
不論用哪一種語言,這個方塊公開的東西都一樣:
| 輸入 | value(名稱為 input)、code(字串) |
| 輸出 | result |
| 設定 | language、code、timeout、packages |
input— 從輸入連接埠收到的值。vars— 執行變數。- 該語言的標準輸出(
console.log、print、puts、cat、Console.WriteLine)會餵進執行記錄。 - 回傳的值會走
result連接埠送出。錯誤或逾時則會走error。
timeout 以秒為單位:預設 5 秒、最多 60 秒。超過的腳本會被中斷,執行則
走 error 連接埠。
packages 欄位接受一份 { name, version } 的清單。確切的版本會當作快取鍵:
依賴會在第一次執行時解析、快取起來,之後每次執行都以離線方式掛載 —
在 CI 中也一樣。
| 語言 | 來源 |
|---|---|
| TypeScript / JavaScript | npm(整批一起打包) |
| Python | 來自 PyPI 的純 Python wheel 套件 |
| Lua | LuaRocks(純 Lua 原始碼) |
| Ruby | 純 Ruby gem |
| R | CRAN,透過 WebR 的 WebAssembly 儲存庫 |
| C# | 沒有 — 只有 .NET 標準函式庫 |
什麼時候不該寫程式碼
Section titled “什麼時候不該寫程式碼”很多需求已經有方塊可以處理,而且更好讀也更快:
| 需求 | 方塊 |
|---|---|
| 從回應中取出一個值 | 一個連結選擇器 |
| 格式化一段字串 | 轉換 |
| 篩選、排序、彙總一份清單 | 清單 |
| 雜湊、編碼、簽章 | 編碼 |
| 檢查某個結構 | 驗證結構描述 |
請把 Code 方塊留給真正特殊的邏輯。