昨天我們認識了字串轉數字tonumber
,使用變數儲存蒲福風表,並套用到山陀兒的歷史資訊中,讓原本顯示中心風速與最大陣風風速顯示從原本的公尺/每秒,改為用蒲福級風顯示。今天我們來認識 jq 如何定義函式。
師傅:來,今天教你個新招。把經度提取出來。
徒弟:呃...是指從那個座標字串裡取出經度嗎?
師傅:對。現在怎麼寫?
徒弟:嗯...我記得是 .coordinate|split(",")[0]
吧?
師傅:沒錯。但如果要多次使用呢?
徒弟:啊...每次都要寫一遍嗎?那蠻麻煩的。
師傅:所以要用函式。看好了。
徒弟:函式?那是什麼?
師傅:就是把一段常用的程式碼打包起來,給它一個名字。用的時候直接叫這個名字就行。
徒弟:哦!聽起來很方便啊。那要怎麼寫呢?
師傅:看好了:
def get_longitude: .coordinate | split(",")[0];
徒弟:哇,這樣就行了?那使用的時候...?
師傅:使用時就寫 get_longitude 。簡單吧?
徒弟:真的耶!這樣程式碼看起來就清爽多了。謝謝師傅!
師傅:記住,def 後面接函式名,然後冒號,再寫函式內容。最後分號結束。
徒弟:明白了!我會好好練習的。
jq 之中定義函式的語法是 def 函式名稱: 函式內容;
,其中 def
、:
、;
都是必要的。對話中的例子,是沒有輸入參數的定義方式,如下:
def get_longitude: .coordinate | split(",")[0];
如果需要輸入參數,則是 def 函式名稱(參數1; 參數2): 函式內容;
,如下
def get_longitude(f): f |split(",")[0];
原本的程式修改之後,大致如下:
jq -c -r -s "def seperate(f): f|split(\",\"); ...(略)... , seperate(.coordinate)[0], seperate(.coordinate)[1] ...
完整可以參考 原始碼。
今天認識了使用 jq 語法來定義函式(function),我們現在這個追蹤颱風消息的程式還有更多共用的函式可以提取,明天繼續定義更多函式來改善我們現有的程式吧。
感謝自己今天也認真的練習😊