# 第四堂:函式設計之術 ## 開課提醒 1. 錄影 2. 開放去年 5-9 週的直播錄影 3. 下週一提供每日助教~~爆肝~~發問服務!10/30-12/8 每週一到週五 ![](https://hackmd.io/_uploads/SkF0-c7f6.png) 3. 重要時間提醒 10/28(六):單人專題截止,申請設計服務截止(申請條件為通過里程碑三並付款完成) 12/1(五):課程結束 12/10(日):助教批改截止,截止繳交主線任務作業 12/17(日):專題成果發表會 ## 今日上課知識點 1. 函式 2. 邏輯題目練習 --- ## 函式 function - 函式宣告 ```javascript function 函式名稱(){ console.log('執行函式'); } ``` - 函式呼叫 ```javascript 函式名稱() ``` - 參數寫法 ```javascript function callNum(num){ console.log(`呼叫${num}號`) // 呼叫5號 } callNum(5); ``` 帶多個參數,參數是有順序的! ```javascript function addNum(num1, num2){ console.log(num1, num2); // 1, 2 } addNum(1,2) ``` ## function return ```javascript function addNum(num1, num2){ return num1+num2; } const num = addNum(1,2); console.log(num); // 3 ``` return 與 console.log 寫法差異 ```javascript function addNum(num1, num2){ console.log(num1+num2); } const num = addNum(1,2); console.log(num); // undefined ``` > console.log 只是將結果「印」出來,並沒有把結果帶出函式外 console.log 是 debug 時使用,正式專案也不會使用 return 可以中斷函式 ## if 與 function ```javascript function addNum(num1, num2){ if (2>1) { return num1+num2; } else { return 100; } } addNum(1,2); // 3 ``` > 直接寫 if 的話,js 裡只會執行一次 寫 function 的話,可以依照自己需求,執行多次執行指令 ## 小組抽考一 * [46~50題目](https://chalk-freedom-ec6.notion.site/Part-1-46-50-3b71ce9efb0d4f7c9803961e27a39264) <!-- 32122 --> ## input output 練習 * [示意流程圖](https://whimsical.com/RTJhrsaGwpZ8NbXvQjutB7) ### 題目列表 **字串相加** ``` javascript //input talk("早上好"); talk("晚上好"); // output // "hi,早上好" // "hi,晚上好" ``` <!-- 解答: ```javascript function talk(text){ return `hi,${text}`; } ``` --> **數字處理** ``` javascript let data = 0; //input count(2); count(3); count(5); // output //2 //5 //10 ``` <!-- 解答: ```javascript function count(num) { return data+=num } ``` --> **數字** ``` javascript //input count(2); count(3); count(5); // output // 4 // 9 //25 ``` <!-- 解答: ```javascript function count(num) { return num*num } ``` --> **兩位數四舍五入** ``` javascript //input twoFixed(1.8888) twoFixed(3.1234) // output // 1.89 // 3.12 ``` <!-- 解答: ``` javascript function twoFixed(num){ return Number(num.toFixed(2)) } ``` --> **BMI** ``` javascript //input calcBmi(178,69) //output //21.78 ``` <!-- 解答: function calcBmi(height, weight){ return Number((weight / (height/100)**2).toFixed(2)) } --> **檢查是否需要帶雨具+if** ``` javascript //input checkWeather("雨天"); checkWeather("晴天"); // output // 要帶雨具 // 不用帶雨具 ``` <!-- 解答: ``` javascript function checkWeather(status){ if(status === "雨天") { return '要帶雨具' } else if(status === "晴天"){ return '不用帶雨具' } } ``` --> **增加陣列資料** ``` javascript let data = []; //input add("hello"); add("你好嗎?"); // output // ["hello","你好嗎?"] ``` <!-- 解答: ``` javascript function add(str){ data.push(str) return data } ``` --> **增加陣列物件資料** ``` javascript let data = []; //input add("洧杰","男生"); add("葉子","女生"); // output //[ // {name:"洧杰",gender:"男生"}, // {name:"葉子",gender:"女生"} //] ``` <!-- 解答: ``` javascript function add(name, gender){ const obj = {}; obj.name = name; obj.gender = gender; data.push(obj); return data } ``` --> **取物件資料** ``` javascript const bmiStatesData = { overThin: { state: "過輕", color: "藍色" }, normal: { state: "正常", color: "紅色" } } // input checkBmiStates("overThin"); checkBmiStates("normal"); // output // 你的體重過輕,指數為藍色 // 你的體重正常,指數為紅色 ``` <!-- 解答: ``` javascript function checkBmiStates(status){ return `你的體重${bmiStatesData[status].state},指數為${bmiStatesData[status].color}` } ``` --> ## 小組抽考二 * [51~55題目](https://www.notion.so/Part-2-51-55-c6e273e42f314308872fc098267cade4) <!-- 22213 --> * [56~60題目](https://www.notion.so/Part-3-56-60-5ee63fa6f38140228f91312ff2d8513a) <!-- 12331 --> --- ## 本週任務 1. 主線任務 達求職門檻工程師水準等級為 10 分鐘,每日練一遍當起手式,10/30(ㄧ) 開始到 11/12(日) 每天早上 9:05 發 discord 訊息,張貼自己的練功情況 ``` 此為 BMI kata 分享區,請在討論串 上分享: 1.你今天 BMI kata 練習第幾遍? 2.覺得學習過程中,哪些細節可以優化? 3. 下次練習,你想刻意練習哪些內容? ``` > [洧杰練 Vim 範例](https://www.youtube.com/watch?v=eRLAKhi-6HE&list=PL3TsqJC8EmwTSlkFE7Zu-Bt6HqDG1fH_U) 3. 小組任務 4. 週末任務:BMI Kata 1. 張貼 kata YouTube 影片(15min內),並提供 codepen 2. 出一題 function input、output 題目,tag 上一位學生解題