---
# System prepended metadata

title: 北六第四週小組任務

---

# 北五第四週小組任務

:::info
報到
- [x] 橘子
- [x] Cosmos
- [x] H.L.C
- [x] hsin yu
- [x] 棠棠
- [ ] hsu0921
- [ ] Marvin
- [ ] Nathan James
- [ ] Ryann
- [ ] 壯壯
:::

## 第一題 請討論第四關主線任務 BMI kata
#### 1.觀看老師的範例影片跟程式碼，討論是否有其優化之處？
1. 現在身體質量指數（BMI）的分界值（18.5、24、27、30、35）是硬編碼的。建議將這些數值定義為常數，以提高代碼的可讀性。
```
const UNDERWEIGHT_BMI = 18.5;
const NORMAL_BMI = 24;
const OVERWEIGHT_BMI = 27;
const MILD_OBESITY_BMI = 30;
const MODERATE_OBESITY_BMI = 35;
```
2. 使用物件儲存 BMI 狀態：現在BMI 狀態是在 bmiStatesData 物件中以硬編碼的方式定義的。建議使用常數或物件鍵來存儲這些狀態，這樣將來更容易進行修改或擴展。
```
const BMI_STATES = {
  OVER_THIN: {
    state: "過輕",
    color: "藍色",
  },
  NORMAL: {
    state: "正常",
    color: "紅色",
  },
  OVERWEIGHT: {
    state: "過重",
    color: "澄色",
  },
  MILD_FAT: {
    state: "輕度肥胖",
    color: "黃色",
  },
  MODERATE_FAT: {
    state: "中度肥胖",
    color: "黑色",
  },
  SEVERE_FAT: {
    state: "重度肥胖",
    color: "綠色",
  },
};
```
3. 使用一個更通用的 calculateBMI 函數：現在計算 BMI 的代碼是在 printBmi 函數中，我們可以將它提取成一個單獨的函數，以便在需要時進行重複使用。
```
function calculateBMI(height, weight) {
  return (weight / ((height / 100) * (height / 100))).toFixed(2);
}
```
4. 使用一個單一函數來處理 BMI 狀態和數據添加：將 bmiStatesText 和 addData 函數結合成一個單一函數，以減少代碼重複性。
```
function processBMI(height, weight) {
  const bmi = calculateBMI(height, weight);

  let state;
  if (bmi < UNDERWEIGHT_BMI) {
    state = BMI_STATES.OVER_THIN;
  } else if (bmi < NORMAL_BMI) {
    state = BMI_STATES.NORMAL;
  } else if (bmi < OVERWEIGHT_BMI) {
    state = BMI_STATES.OVERWEIGHT;
  } else if (bmi < MILD_OBESITY_BMI) {
    state = BMI_STATES.MILD_FAT;
  } else if (bmi < MODERATE_OBESITY_BMI) {
    state = BMI_STATES.MODERATE_FAT;
  } else {
    state = BMI_STATES.SEVERE_FAT;
  }

  console.log(`您的體重${state.state}，健康指數為${state.color}`);
  addData(bmi, state);
}
```
5. 使用模板字面量簡化字串拼接：使用模板字面量來簡化字串拼接，使代碼更易讀。
```
console.log(`您總共計算 ${totalNum} 次 BMI 紀錄，最後一次 BMI 指數為 ${bmiHistoryData[lastNum].bmi}，體重${bmiHistoryData[lastNum].state.state}！健康指數為${bmiHistoryData[lastNum].state.color}！`);

```

hsin yu：https://codepen.io/tina2793778/pen/YzBqpJq
Cosmos：https://codepen.io/violet7755/pen/wvNMyaJ


## 第二題 Git 挑戰
### [Git Repo 連結](https://github.com/dogwantfly/git-practice-week2)
A組員：
![1101git.png](https://hackmd.io/_uploads/rkdrxgema.png)

B組員：
![2023-11-01_10.52.42.png](https://hackmd.io/_uploads/H1qFlexX6.png)


### 討論畫面：
![螢幕擷取畫面 2023-11-01 220812.png](https://hackmd.io/_uploads/r1_gbxxXT.png)

![截圖 2023-11-01 下午11.39.37.png](https://hackmd.io/_uploads/Sy7ubegX6.png)



