# 程式碼六大技巧
> [觀看影片](https://youtu.be/cfeKek8p9us)
1. 有意義的命名
```javascript
let e = "emaill"; // X
let emaill = "emaill"; // O
```
2. 限制傳入的參數
很重要!!以往我都習慣為了讓 code 整體比較簡短,所以會將一大堆的參數塞進一個 function 中,這會造成閱讀和維護困難
**建議一個方法只放三個**
- 可以使用物件包裝方式來傳入
- hash
```javascript
function getMember(name, number, sex, address, id, username) { ... }
// 呼叫:
getMember("nnn", 12, "M", "火星", "X44E5S", "nnnUser"); // 極度攏長
// 可以改為
let member_params = {
name: "Frank",
number: 080055412,
sex: "M",
address: "台中",
id: "xsssff84",
username: "judc8003"
}
getMember(member_params) // 當然 方法要再去解析
```
3. 簡化判斷式
當有需要判斷的條件時,若條件上並不複雜,可以將條件式當作回傳值,減少 code 的產生
例如: 今天要判斷台灣人能否騎車?
```javascript
function can_person_ride_motobike(person) {
if (person.age >= 18 && person.has_ride_license) {
return true;
} else return false;
}
// 可改為
function can_person_ride_motobike(person) {
return person.age >= 18 && person.has_ride_license;
}
```
4. 變數定義範圍
在過去 js 中的 var 命名,會讓人難以維護,或是在 typeScript 中都把變數、方法設定為`public static`,盡量避免這種行為,變數皆以作用域範圍為主。避免變數汙染
5. 一個方法只做一件事情
function 必須和定義方式的命名一致的行為,不要多做額外的行為
比如今天有個計算總價的方法:
```javascript
function calculate_total_amount(orders) {
// 明明就是計算卻寄了email?
EmailService.end("計算總價完畢");
return orders.sum(price);
}
// 如果真的必須要在這方法當中寄信,那就用比較中性的命名方式
function calculate_service
```
6. early return
避免過多的 if 判斷式,當 if else 出現兩次以上,就要好好想想是否過多邏輯堆疊在同一處。
使用 early return 讓程式結束在該結束的位置上。
如:今天要判斷一個阻塞,要用兩個參數做成另一個參數,其中需要判斷這兩個參數必須驗證的狀況下,才能做出另一個參數
```javascript
function return_stuff(argument_1, argument_2) {
if (argument_1.is_valid) {
if (argument_2.is_valid) {
let other_value = get_some_stuff(argument_1, argument_2);
if (other_value.is_valid) {
return "Okay is Stuff";
} else throw new Error();
} else {
throw error;
}
} else {
throw error;
}
return;
}
// 可改為: 設計模式: fail fast、guard clause
function return_stuff(argument_1, argument_2) {
// 提早拋出錯誤
if (!argument_1.is_valid) throw error;
if (!argument_2.is_valid) throw error;
let other_value = get_some_stuff(argument_1, argument_2);
if (!other_value.is_valid) {
throw new Error();
} else return "Okay is Stuff";
}
```