日语编程语言抚子 - 第三版特色初探
它山之石可以攻玉. 學習其他的母語編程語言, 相信對中文編程語言的設計和實踐有借鑒意義. 本人剛剛開始接觸"撫子"語言, 從官方文檔開始探索. 以下試圖突出一些發現的特色和亮點, 更完整的語法列表請見討論組主題帖.
一些背景資料: 官方網站
- 第三版(最新)源碼庫, 用JavaScript實現, 代碼提交從2017/2至今
- 第二版源碼庫, 用C#實現. 代碼提交從2010/6到2016/2.
- 第一版源碼庫, 用Pascal實現, 最近仍然在更新. 最早代碼提交是2008年, 但應該在更早幾年前就已經成型.
下面的示例代碼源自第三版語法文檔. 限于日語水平, 對它的示例源碼也許有理解出入. 為方便理解, 已把它們轉成對應的中文, 詞序有不少調整. 如發現大的出入, 非常歡迎到主題帖批評指正.
接近日語自然語言的語法
比如它允許多種方式賦值:
價格是3000 # 原代碼: 値段は3000 價格=2000 置價格為4000 # 値段に4000を代入。 復制代碼很明顯它支持是無空格語法, 也同時支持傳統(=)賦值和接近自然語言的賦值方式. 這個風格貫穿所有語法. 又如條件語句:
A = 4 如果A不是5顯示為「OK」 如果不是顯示為「NG」 直到這里。 復制代碼暫時不確定空格縮進是否像Python那樣必須, 還是僅為了代碼可讀性.
特別的'它'
加5到30,并乘以2來顯示它。 加5到30。 它乘以兩倍。 顯示它。 復制代碼它的使用, 是一個特色. 個人感覺是內置的匿名變量, 并且在函數沒有實參時默認使用. 這是很接近自然語言的指代用法! 例如:
它是“ abc ” <--- 后面幾行都省略了'它' 空白刪除。 大寫轉換 用“*”替換“A” 顯示。 復制代碼在函數中可以用它, 作為返回的默認值:
●(A和B的)加法是它是A + B返回 直到這里 復制代碼上例中即使沒有返回"它", 函數返回值仍然是它的值
它也會隨著函數執行而更新, 如下示例, 函數體中沒有它, 但仍然顯示50
●(A和B的)加法是B添加到A 直到這里 30和7的加法. 顯示它. 復制代碼精簡的循環
'回數'是個保留變量, 可以獲得當前循環次數的序號:
N=3 (N)次   顯示「這是第{回數}次」。 直到這里。 復制代碼也可以遍歷:
重復[1,2,3], 這里開始顯示對象。 直到這里。 復制代碼上面的對象應該是類似回數的內置變量, 用以返回當前循環對應的值. (推測上面如果是顯示{回數}的話, 應該顯示0 1 2) 上面也可以用顯示它
對象按照鍵遍歷:
OBJ = {“Jan”:1,“Feb”:2,“Mar”:3,“Apr”:4} 重復OBJ顯示「{對象鍵} = {對象}月份」 直到這里。 復制代碼這里也可以看到它支持JSON數據結構.
顯式聲明變量/常量
可帶初始化的聲明:
A是變量=30 B是常量=50 復制代碼也可以簡寫:
變量A=30 常量B=50 復制代碼函數
支持遞歸和匿名函數, 后者還未來得及細究(官方文檔在此)
允許內嵌JavaScript
這是個非常重要的功能, 雖然沒有深入, 但個人理解是類似于Scala調用Java庫的功能, 因而"撫子"語言可以用于所有JavaScript可用的領域(包括前后端). 因為此版是在NPM發布的, 猜測JavaScript也可以調用撫子語言的模塊. 在缺乏自身的核心標準庫時, 個人感覺新語言依托現有成熟語言的核心庫以及豐富的第三方庫對推廣來說至關重要.
JavaScript回調事件參數 <--- 此處不甚理解
參數這一內置變量可以以數組形式獲取event參數的值。
●(A和B的)加法是它=參數[0] + 參數[1] 直到這里 顯示3和5的加法。 復制代碼對移動設備和輸入法的特別優化
一個很有特色的功能是, 為了簡便地訪問數組/對象. 因為智能手機很難輸入A[n](猜想因為[]是在"符號"部分), 因此允許A@n. 這是第一次看到為了移動設備而設計的功能.
其他
字符串展開
感覺類似于Scala的功能(string interpolation). 復雜的字符串可以用S{{{...}}}(三對以上的大括號)表示:
得分是35。 評價是「A」。 成績報告是S{{{★成績表★ ·他的分數是{得分}。 ·評價是{評價}。}}} 顯示成績報告。 復制代碼返回:
★成績表★ ?他的分數是35。 ?評價是A。 復制代碼轉載于:https://juejin.im/post/5d2f99d2e51d45775c73dd94
總結
以上是生活随笔為你收集整理的日语编程语言抚子 - 第三版特色初探的全部內容,希望文章能夠幫你解決所遇到的問題。