###### tags: `2021直播班任務` # 第四堂:函式設計之術 * [BMI Kata 武道大會](https://forms.gle/Bij2WQZWTnDnW8TB6) ## function 寫法教學 - 設定指令 - 以一天會做的行為當作例子 - 參數寫法介紹 - 加法器 - return 寫法介紹 - let 宣告 - return 多個範例 ## if 與 function 的差別 - 直接寫 if 的話,.js 裡只會執行一次 - 寫 function 的話,可以依照自己需求,執行多次執行指令 ## input output 練習 * [示意流程圖](https://whimsical.com/RTJhrsaGwpZ8NbXvQjutB7) ### 題目列表 **字串相加** ``` javascript //input talk("早上好"); talk("晚上好"); // output console.log("hi,早上好"); console.log("hi,晚上好"); ``` **數字處理** ``` javascript let data = 0; //input count(2); count(3); count(5); // output console.log(2); console.log(5); console.log(10); ``` **數字 return** ``` javascript //input let a = count(2); // 4 let b = count(3); // 9 let c = count(5); //25 ``` **兩位數四舍五入** ``` javascript let a = twoFixed(1.8888) // 1.89 let b = twoFixed(3.1234) // 3.13 ``` **BMI** ``` javascript let bmi = calcBmi(178,69) // output:21.78 ``` **檢查是否需要帶雨具+if** ``` JavaScript let a = checkWeater("雨天"); // 要帶雨具 let b = checkWeater("晴天"); //不用帶雨具 ``` **增加陣列資料** ``` JavaScript let data = []; add("hello"); add("你好嗎?"); // data output ["hello","你好嗎?"] ``` **增加陣列物件資料** ``` JavaScript let data = []; add("洧杰","男生"); add("葉子","女生"); // data output [{name:"洧杰",sex:"男生"},{name:"葉子",sex:"女生"}] ``` **取物件資料** ``` JavaScript const bmiStatesData = { "overThin": { "state": "過輕", "color": "藍色" }, "normal": { "state": "正常", "color": "紅色" } } checkBmiStates("overThin"); //你的體重過輕,指數為藍色 checkBmiStates("normal"); //你的體重正常,指數為紅色 ``` ## 抽獎 ``` JavaScript function getRandom(x){ return Math.floor(Math.random()*x); }; //https://ithelp.ithome.com.tw/articles/10197904 ``` ## 第四關主線任務 BMI Kata * <a href="https://rpg.hexschool.com/training/17/task?type=detail&id=171" target="_top">第四關主線任務</a> 達求職門檻工程師水準等級為 10 分鐘,每日練一遍當起手式,3/8 開始到 3/19 每天早上 9:05 發 Slack 訊息,張貼自己的練功情況 150 點積分 作業資源: 👉 此任務僅授權提供『JS直播春季班』學員 👈 繳交內容需含以下三點 請依照以下練功題目練十遍,填寫此 Google 表單 您的 Slack 暱稱 作業網址:請依照透過 Codepen 或 GitHub Pages 提交作業,以方便助教與講師檢視 練功題目:BMI Kata 請依照影片內容與 excel BMI 規則、流程圖,依照以下三階段來練習此題目。 第一階段:請寫 printBmi 函式,並印出對應狀態 printBmi(178, 20) >> 印出 console.log 文字為「您的體重過輕」 printBmi(178, 70) >> 印出 console.log 文字為「您的體重正常」 printBmi(178, 85)>> 印出 console.log 文字為「您的體重過重」 printBmi(178, 90)>> 印出 console.log 文字為「您的體重輕度肥胖」 printBmi(178, 110)>> 印出 console.log 文字為「您的體重中度肥胖」 printBmi(178, 130)>> 印出 console.log 文字為「您的體重重度肥胖」 printBmi("身高","體重")>> 印出 console.log 文字為「您的數值輸入錯誤,請重新輸入」 第二階段:請程式碼裡加入此變數,並嘗試運用此變數裡的資訊。 printBmi(178, 20) >> 印出 console.log 文字為「您的體重過輕,健康指數為藍色」 printBmi(178, 70) >> 印出 console.log 文字為「您的體重正常,健康指數為紅色」 printBmi(178, 85)>> 印出 console.log 文字為「您的體重過重,健康指數為澄色」 printBmi(178, 90)>> 印出 console.log 文字為「您的體重輕度肥胖,健康指數為黃色」 printBmi(178, 110)>> 印出 console.log 文字為「您的體重中度肥胖,健康指數為黑色」 printBmi(178, 130)>> 印出 console.log 文字為「您的體重重度肥胖,健康指數為綠色」 printBmi("身高","體重")>> 印出 console.log 文字為「您的數值輸入錯誤,請重新輸入」 第三階段:儲存每筆計算資料,多一個變數為 bmiHistoryData,並賦予空陣列來儲存計算物件資料,若數值輸入錯誤,則不儲存。 printBmi(178, 20) >> 印出 console.log 文字為「您的體重過輕,健康指數為藍色」 printBmi(178, 70) >> 印出 console.log 文字為「您的體重正常,健康指數為紅色」 printBmi(178, 85)>> 印出 console.log 文字為「您的體重過重,健康指數為澄色」 showHistoryData() >> 印出 console.log 文字為「您總共計算 3 次 BMI 紀錄,最後一次 BMI 指數為 26.83,體重過重!健康指數為澄色!」 常見QA Q:一定要做到第三階段,才能提交作業嗎? A:對的 Q:我對題目不太懂,有解答嗎? A:有的,請依照此影片的三階段影片,跟著做十遍 Q:我可以優化程式碼嗎? A:可以,但各階段的指示要做到,例如 第一階段要寫 printBMI 函式 第二階段要運用到該bmiStatesData 變數 第三階段要新增 bmiHistoryData 變數儲存計算資訊 Q:要多快才有達工程師門檻? A:洧杰:「覺得要壓在 10min 內」