class: center, middle, inverse, title-slide # Phong cách viết code ### Hoàng Đức Anh --- layout: true .footer[Ranalytics.vn] .rectangle[] --- ## Giới thiệu >"Good coding style is like correct punctuation: you can manage without it, butitsuremakesthingseasiertoread." > >Hadley Wickham --- ## Tên file - Không sử dụng dấu cách khi đặt tên file, dùng `-` hoặc `_` để phân tách các từ - Sử dụng chữ viết thường ```r # Good ucb-admit.csv # Bad UCB Admit.csv ``` --- ## Tên object - Sử dụng dâu gạch dưới `_` để phân tách các từ - Đặt tên *có ý nghĩa* nhưng ngắn gọn - Không sử dụng tên đã bị lặp lại ```r # Good acs_employed # Bad acs.employed *acs2 *acs3 acs_subset acs_subsetted_for_males ``` --- ## Dấu cách - Đặt dấu cách trước và sau các toán tử (=, +, -, <-, %>%, ...) - Đặt dấu cách sau dấu phẩy (không đặt dấu cách trước dấu phẩy `,`) - như viết chính tả thông thường - Không đặt khoảng trắng sau tên hàm ```r # Good average <- mean(feet / 12 + inches, na.rm = TRUE) # Bad average<-mean(feet/12+inches,na.rm=TRUE) #Good summary(mtcars) #Bad summary (mtcars) ``` --- ## ggplot2 - Luôn kết thúc một dòng với dấu `+` - Dòng tiếp theo cần phải thụt đầu dòng ```r # Good ggplot(diamonds, mapping = aes(x = price)) + geom_histogram() # Bad ggplot(diamonds,mapping=aes(x=price))+geom_histogram() ``` --- ## ggplot2 (cont) - Trong trường hợp biểu đồ quá phức tạp, ta có thể để mỗi thuộc tính mapping trong ggplot thành một dòng ```r #Good ggplot(diamonds %>% head(100), mapping = aes(x = price, y = z, shape = carat)) + geom_point(aes(col = carat)) #Not very bad ggplot(diamonds %>% head(100), mapping = aes(x = price, y = z, shape = carat)) + geom_point(aes(col = carat)) ``` --- ## Viết code quá dài - Mỗi dòng chỉ nên chứa tối 80 ký tự để có thể in ra/hiển thị trên markdown dễ dàng - Sử dụng chức năng format tự động trong RStudio (`Ctrl + Shift + A`) ```r #Good iris %>% group_by(Species) %>% summarise( Sepal.Length = mean(Sepal.Length), Sepal.Width = mean(Sepal.Width), Species = n_distinct(Species) ) #Not very bad iris %>% group_by(Species) %>% summarise(Sepal.Length = mean(Sepal.Length), Sepal.Width = mean(Sepal.Width), Species = n_distinct(Species)) ``` --- ## Dấu gán - Sử dụng `<-` thay vì `=` ```r # Good x <- 2 # Bad x = 2 ``` --- ## Quotes Dùng dấu ngoặc kép `"`, không dùng dâu ngoặc đơn `'`. Chỉ dùng dấu `'` trong trường hợp có hai phần lồng nhau (tương tự như string & quote trong SQL) ```r ggplot(diamonds, mapping = aes(x = price)) + geom_histogram() + # Good labs(title = "`Shine bright like a diamond`", # Good x = "Diamond prices", # Bad y = 'Frequency') ``` --- ## Tài liệu tham khảo - Xem thêm hướng dẫn chi tiết tại [http://style.tidyverse.org/ ](http://style.tidyverse.org/ ) --- class: inverse, middle, center # Liên hệ <a href="mailto:hoangducanh89@gmail.com"><i class="fa fa-paper-plane fa-fw"></i> hoangducanh89@gmail.com</a><br> <a href="http://ranalytics.vn"><i class="fa fa-link fa-fw"></i> http://ranalytics.vn</a><br> <a href="http://facebook.com/hoangducanh89"><i class="fa fa-facebook fa-fw"></i> hoangducanh89</a><br> <a href="http://cslu.ohsu.edu"><i class="fa fa-map-marker fa-fw"></i> 50, Nguyễn Phúc Lai, Hà Nội</a>