4 寫作風格

寫作漂亮的程式碼不是初學者需要投注心力的事情,對初學者最重要的是寫作可以運行的程式碼來解決工作或學業上面所碰到的問題。但是當我們開始與團隊成員一起開發與寫作技術文件,這時候閱讀程式碼的觀眾數量開始變多,一致的寫作風格會讓開發效率提高,而由於風格並沒有所謂的標準答案,如果團隊認同的風格與自己的習慣相左,應該遵照團隊風格。

4.1 賦值

使用 <- 而非 = 來賦值,在 RStudio 中按 alt 與減號 - 可以快速產生賦值的箭號。

# 推薦的寫作風格
luke <- "Luke Skywalker"
# 不推薦的寫作風格
luke = "Luke Skywalker"

4.2 註解

使用 # 與一個空格來做註解,後面可以選擇加上多個減號 - 或多個等號 = 來區隔程式碼。

# 讀取資料 ---------

# 資料視覺化 =======

4.3 為程式碼的檔案命名

使用有意義的英文為程式碼命名,不要使用沒有意義的英文或使用中文(有意義也不行)命名,搭配 .R 的副檔名,不要使用 .r 作為副檔名。

# 推薦的寫作風格
fit-models.R
plot-figures.R

# 不推薦的寫作風格
rscript01.R
建模.R
fit-models.r

如果程式碼執行有順序性,就在程式碼檔名前面加上數字。

# 推薦的寫作風格
0-download-data.R
1-clean-data.R
2-explore-data.R

4.4 為物件命名 #{style-guide-objectname}

用小寫的英文為物件命名,並且使用底線 _ 分隔單字。物件(object)包含變數(variable)與函數(function),使用名詞為變數命名、使用動詞為函數命名,努力讓物件的名稱簡潔且有意義(這點可非常不容易!)

# 推薦的寫作風格
luke_skywalker
anakin_skywalker

# 不推薦的寫作風格
anakin_skywalker_aka_darth_vadar
LukeSkywalker
lukeskywalker
lusk

避免將物件命名成跟內建變數或函數相同的情況產生。

# 不推薦的寫作風格
T <- FALSE
c <- 10
mean <- function(x) {
  return(sum(x))
}

4.5 空格

在運算子(像是 =, +, -, <-)的前後留空格,讓程式碼閱讀起來舒服;如果是逗號 , 則遵守英文文法,前面不留空格但是後面留空格。

# 推薦的寫作風格
average <- mean(feet / 12 + inches, na.rm = TRUE)

# 不推薦的寫作風格
average<-mean(feet/12+inches,na.rm=TRUE)

如果是使用 : 或者 :: 的時候,前後則不需要留空格。

# 推薦的寫作風格
x <- 1:10
base::get

# 不推薦的寫作風格
x <- 1 : 10
base :: get

如果是使用小括號的時候,在前面留一個空格,但如果是呼叫函數的應用情景則不留空格。

# 推薦的寫作風格
if (debug) do (x)
plot(x, y)

# 不推薦的寫作風格
if(debug)do(x)
plot (x, y)

4.6 大括號

左大括號 { 之後必須要接新的一行,右大括號 } 必須要單獨一行,除非後面接有 else ifelse 的敘述。

# 推薦的寫作風格
if (y < 0 && debug) {
  message("Y is negative")
}

if (y == 0) {
  log(x)
} else {
  y ^ x
}

# 不推薦的寫作風格
if (y < 0 && debug)
message("Y is negative")

if (y == 0) {
  log(x)
} 
else {
  y ^ x
}

4.7 縮排

使用兩個空格作為縮排,如果在函數定義時則對齊敘述開始的地方。

long_function_name <- function(a = "a long argument", 
                               b = "another argument",
                               c = "another long argument") {
  # As usual code is indented by two spaces.
}