###### tags: `封存`
# NinjaCode
# 講解程式碼風格
---
#### 何謂CodingStyle?
----
##### 統一的規則
- 命名風格
- 函式/變數
- 私有方法/變數
- 常數
- 排版
- 是否開啟編輯器內建的排版
- Javascript
- 是否要分號
- 嚴謹模式('use strict')
---
#### 我們為何需要CodingStyle?
- 可維護性
- 易讀性
----
#### 參考:
- PSR CodingStyle
- Clean Code
#### 借鏡:
- NinjaCode
---
# Ninja Code
----
```
celsius = int(input("Enter Celcius"))
fah = celsius*(9/5)+32
print("Farenheit:",fah)
```
----
```
c = int(input("Enter Celcius"))
f = c*(9/5)+32
print("Farenheit:",f)
```
----
```
f = int(input("Enter Celcius"))*(9/5)+32
print("Farenheit:",f)
```
----
```
print("Farenheit:",int(input("Enter Celcius"))*(9/5)+32)
```
---
### NinjaCode: 更短總是更好,將想表達的意思"藏起來"
----
#### 單個字母的取名方式
- a,b,c,d...
----
#### 團隊CodingStyle不允許的處理方式: 使用縮寫
- list ->lst
- data -> dta
- date -> dte
- usercode -> uscode
----
#### 試著用抽象的取名方式
- data
- value
- obj
- elem
- item
- str
- num
不夠用就在後面加個編號!!
----
#### 用容易搞混的單字當變數名稱
- data&date
---
#### 使用同義詞
- displayA(): 將結果顯示在螢幕上
- showB(): 將結果顯示在螢幕上
- renderC(): 將結果顯示在螢幕上
----
#### 同個詞賦予不同的功能
- printA(): 顯示在螢幕
- printB(): 使用列表機列印出來
- printC(): 顯示在新的視窗上!!
---
#### 重複利用同個變數
```
str = "顯示這段文字在螢幕上";
...
str = "顯示這段文字在新的視窗";
...
```
---
#### 多用底線,即使那沒有意義!
```
var _name = "Peter";
var __name = "John";
var value = "Firefighter";
...
```
---
#### 發揮你的想像力!!
```
MegaPowerRender()
var NiceUseList
```
----
#### 甚至在把它簡寫!!
```
MGPRender()
var NUL
```
---
#### 重疊外部變數
```
var user = "something";
function LoginIn(){
var user = "anotherThing";
...
... <-- 當有人想在這裡用user的時候...
}
```
---
#### 副作用(Side-effects)無所不在!
```
isLoginIn()
isExist()
checkPermission()
```
##### 回傳想不到的結果!
---
#### 強大的函式!
```
function validateEmail(email){
...
}
```
- 檢查信箱格式錯誤
- 顯示錯誤訊息
- 要求重新輸入
- 註冊功能
- 導向網頁
---
### 遵循部分,你的程式碼會變得充滿驚奇。
---
## 遵循多數,你的程式碼會真正成為你的程式碼,沒有人會想改變它。
---
# 遵循全部
# 你的程式碼將成為年輕開發者尋求啟發的寶貴案例。
{"metaMigratedAt":"2023-06-15T02:21:40.819Z","metaMigratedFrom":"Content","title":"NinjaCode","breaks":true,"contributors":"[{\"id\":\"01dbc9ce-76fe-490f-951f-b641bcbdf374\",\"add\":1976,\"del\":45}]"}